diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 000000000..4105a8a3b
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "cSpell.words": ["Desposit", "modulekey", "Otokens", "weths"]
+}
diff --git a/artifacts/build-info/054c72c0d906f0ef3e8ae3ee5c14464b.json b/artifacts/build-info/054c72c0d906f0ef3e8ae3ee5c14464b.json
new file mode 100644
index 000000000..49b020cb9
--- /dev/null
+++ b/artifacts/build-info/054c72c0d906f0ef3e8ae3ee5c14464b.json
@@ -0,0 +1,391 @@
+{
+ "id": "054c72c0d906f0ef3e8ae3ee5c14464b",
+ "_format": "hh-sol-build-info-1",
+ "solcVersion": "0.6.10",
+ "solcLongVersion": "0.6.10+commit.00c0fcaf",
+ "input": {
+ "language": "Solidity",
+ "sources": {
+ "contracts/tests/CallTester.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n/**\n * @author Opyn Team\n * @notice Call action testing contract\n */\ncontract CallTester {\n event CallFunction(address sender, bytes data);\n\n function callFunction(address _sender, bytes memory _data) external {\n emit CallFunction(_sender, _data);\n }\n}\n"
+ }
+ },
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "outputSelection": {
+ "*": {
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ],
+ "": [
+ "ast"
+ ]
+ }
+ }
+ }
+ },
+ "output": {
+ "contracts": {
+ "contracts/tests/CallTester.sol": {
+ "CallTester": {
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "CallFunction",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "callFunction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506101d5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80639c23da5014610030575b600080fd5b6100e66004803603604081101561004657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561007157600080fd5b82018360208201111561008357600080fd5b803590602001918460018302840111640100000000831117156100a557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506100e8945050505050565b005b7f2962d159e052b651f6545f9c39c59745028f27b4d13aec5b33ae5da28676a27a828260405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610160578181015183820152602001610148565b50505050905090810190601f16801561018d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505056fea264697066735822122029596e6b21f791a071f587b776bb9abceeb6fbd143be64a8efdf41f01524a67f64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D5 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 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 SWAP3 SWAP6 POP PUSH2 0xE8 SWAP5 POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH32 0x2962D159E052B651F6545F9C39C59745028F27B4D13AEC5B33AE5DA28676A27A DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x160 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x18D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x29 MSIZE PUSH15 0x6B21F791A071F587B776BB9ABCEEB6 0xFB 0xD1 NUMBER 0xBE PUSH5 0xA8EFDF41F0 ISZERO 0x24 0xA6 PUSH32 0x64736F6C634300060A0033000000000000000000000000000000000000000000 ",
+ "sourceMap": "141:199:0:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80639c23da5014610030575b600080fd5b6100e66004803603604081101561004657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561007157600080fd5b82018360208201111561008357600080fd5b803590602001918460018302840111640100000000831117156100a557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506100e8945050505050565b005b7f2962d159e052b651f6545f9c39c59745028f27b4d13aec5b33ae5da28676a27a828260405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610160578181015183820152602001610148565b50505050905090810190601f16801561018d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505056fea264697066735822122029596e6b21f791a071f587b776bb9abceeb6fbd143be64a8efdf41f01524a67f64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 SWAP3 SWAP6 POP PUSH2 0xE8 SWAP5 POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH32 0x2962D159E052B651F6545F9C39C59745028F27B4D13AEC5B33AE5DA28676A27A DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x160 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x18D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x29 MSIZE PUSH15 0x6B21F791A071F587B776BB9ABCEEB6 0xFB 0xD1 NUMBER 0xBE PUSH5 0xA8EFDF41F0 ISZERO 0x24 0xA6 PUSH32 0x64736F6C634300060A0033000000000000000000000000000000000000000000 ",
+ "sourceMap": "141:199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;220:118;;;;;;;;;;;;;;;;-1:-1:-1;;;;;220:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;220:118:0;;-1:-1:-1;220:118:0;;-1:-1:-1;;;;;220:118:0:i;:::-;;;303:28;316:7;325:5;303:28;;;;-1:-1:-1;;;;;303:28:0;-1:-1:-1;;;;;303:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;220:118;;:::o"
+ },
+ "methodIdentifiers": {
+ "callFunction(address,bytes)": "9c23da50"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"CallFunction\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"callFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"Call action testing contract\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/CallTester.sol\":\"CallTester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/tests/CallTester.sol\":{\"keccak256\":\"0x81f49a2a748d9ff27ddacea3fe5207e39131ec504b4b227fdaab1e2eb6d64bb3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://de819e97a4f2118ee7aa7d56ce70f747d6e6a7b05645f0016ba958810fd6ce09\",\"dweb:/ipfs/QmW7RVCWh7nZgUn2mfcWSagBQo8yAmpSByxWkdgBb1SpJc\"]}},\"version\":1}"
+ }
+ }
+ },
+ "sources": {
+ "contracts/tests/CallTester.sol": {
+ "ast": {
+ "absolutePath": "contracts/tests/CallTester.sol",
+ "exportedSymbols": {
+ "CallTester": [
+ 22
+ ]
+ },
+ "id": 23,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1,
+ "literals": [
+ "solidity",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "47:23:0"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 2,
+ "nodeType": "StructuredDocumentation",
+ "src": "72:68:0",
+ "text": " @author Opyn Team\n @notice Call action testing contract"
+ },
+ "fullyImplemented": true,
+ "id": 22,
+ "linearizedBaseContracts": [
+ 22
+ ],
+ "name": "CallTester",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "anonymous": false,
+ "documentation": null,
+ "id": 8,
+ "name": "CallFunction",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 7,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "sender",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8,
+ "src": "186:14:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "186:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "data",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8,
+ "src": "202:10:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 5,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "202:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "185:28:0"
+ },
+ "src": "167:47:0"
+ },
+ {
+ "body": {
+ "id": 20,
+ "nodeType": "Block",
+ "src": "288:50:0",
+ "statements": [
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 16,
+ "name": "_sender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10,
+ "src": "316:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 17,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 12,
+ "src": "325:5:0",
+ "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": 15,
+ "name": "CallFunction",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8,
+ "src": "303:12:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,bytes memory)"
+ }
+ },
+ "id": 18,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "303:28:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 19,
+ "nodeType": "EmitStatement",
+ "src": "298:33:0"
+ }
+ ]
+ },
+ "documentation": null,
+ "functionSelector": "9c23da50",
+ "id": 21,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "callFunction",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 13,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 10,
+ "mutability": "mutable",
+ "name": "_sender",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 21,
+ "src": "242:15:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 9,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "242:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 12,
+ "mutability": "mutable",
+ "name": "_data",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 21,
+ "src": "259:18:0",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 11,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "259:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "241:37:0"
+ },
+ "returnParameters": {
+ "id": 14,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "288:0:0"
+ },
+ "scope": 22,
+ "src": "220:118:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 23,
+ "src": "141:199:0"
+ }
+ ],
+ "src": "47:294:0"
+ },
+ "id": 0
+ }
+ }
+ }
+}
diff --git a/artifacts/build-info/16f1cd3456e9665e042fbf695e70ab73.json b/artifacts/build-info/16f1cd3456e9665e042fbf695e70ab73.json
new file mode 100644
index 000000000..5948f1e69
--- /dev/null
+++ b/artifacts/build-info/16f1cd3456e9665e042fbf695e70ab73.json
@@ -0,0 +1,747 @@
+{
+ "id": "16f1cd3456e9665e042fbf695e70ab73",
+ "_format": "hh-sol-build-info-1",
+ "solcVersion": "0.6.10",
+ "solcLongVersion": "0.6.10+commit.00c0fcaf",
+ "input": {
+ "language": "Solidity",
+ "sources": {
+ "contracts/interfaces/WETH9Interface.sol": {
+ "content": "/**\n * Submitted for verification at Etherscan.io on 2017-12-12\n */\n\n// Copyright (C) 2015, 2016, 2017 Dapphub\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity 0.6.10;\n\ninterface WETH9Interface {\n function deposit() external payable;\n\n function withdraw(uint256 wad) external;\n\n function totalSupply() external view returns (uint256);\n\n function approve(address guy, uint256 wad) external returns (bool);\n\n function transfer(address dst, uint256 wad) external returns (bool);\n\n function transferFrom(\n address src,\n address dst,\n uint256 wad\n ) external returns (bool);\n}\n\n/*\n SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n \n Copyright (C) \n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see .\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n Copyright (C) \n This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free software, and you are welcome to redistribute it\n under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License. Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n.\n\n The GNU General Public License does not permit incorporating your program\ninto proprietary programs. If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library. If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License. But first, please read\n.\n\n*/\n"
+ }
+ },
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "outputSelection": {
+ "*": {
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ],
+ "": [
+ "ast"
+ ]
+ }
+ }
+ }
+ },
+ "output": {
+ "contracts": {
+ "contracts/interfaces/WETH9Interface.sol": {
+ "WETH9Interface": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "guy",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "payable",
+ "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": "wad",
+ "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": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "approve(address,uint256)": "095ea7b3",
+ "deposit()": "d0e30db0",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd",
+ "withdraw(uint256)": "2e1a7d4d"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"wad\",\"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\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/WETH9Interface.sol\":\"WETH9Interface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/WETH9Interface.sol\":{\"keccak256\":\"0x99bc03ad61ebc6e6e873ff84736f67a88601451471f4b79302c5ee1237213844\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://b00419defd661e973c613a360a2adf953010f0eb004a6546a0429d1f58370521\",\"dweb:/ipfs/QmWKHyDU5edADLP5zsWj4nm4sg3j6khh6vLrHFAAdK8ixc\"]}},\"version\":1}"
+ }
+ }
+ },
+ "sources": {
+ "contracts/interfaces/WETH9Interface.sol": {
+ "ast": {
+ "absolutePath": "contracts/interfaces/WETH9Interface.sol",
+ "exportedSymbols": {
+ "WETH9Interface": [
+ 44
+ ]
+ },
+ "id": 45,
+ "license": "GNU GENERAL PUBLIC LICENSE",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1,
+ "literals": [
+ "solidity",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "755:23:0"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": null,
+ "fullyImplemented": false,
+ "id": 44,
+ "linearizedBaseContracts": [
+ 44
+ ],
+ "name": "WETH9Interface",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "body": null,
+ "documentation": null,
+ "functionSelector": "d0e30db0",
+ "id": 4,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "deposit",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "827:2:0"
+ },
+ "returnParameters": {
+ "id": 3,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "846:0:0"
+ },
+ "scope": 44,
+ "src": "811:36:0",
+ "stateMutability": "payable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": null,
+ "documentation": null,
+ "functionSelector": "2e1a7d4d",
+ "id": 9,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "withdraw",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6,
+ "mutability": "mutable",
+ "name": "wad",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 9,
+ "src": "871:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "871:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "870:13:0"
+ },
+ "returnParameters": {
+ "id": 8,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "892:0:0"
+ },
+ "scope": 44,
+ "src": "853:40:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": null,
+ "documentation": null,
+ "functionSelector": "18160ddd",
+ "id": 14,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "totalSupply",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 10,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "919:2:0"
+ },
+ "returnParameters": {
+ "id": 13,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 12,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 14,
+ "src": "945:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 11,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "945:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "944:9:0"
+ },
+ "scope": 44,
+ "src": "899:55:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": null,
+ "documentation": null,
+ "functionSelector": "095ea7b3",
+ "id": 23,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "approve",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 19,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 16,
+ "mutability": "mutable",
+ "name": "guy",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 23,
+ "src": "977:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 15,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "977:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 18,
+ "mutability": "mutable",
+ "name": "wad",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 23,
+ "src": "990:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 17,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "990:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "976:26:0"
+ },
+ "returnParameters": {
+ "id": 22,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 21,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 23,
+ "src": "1021:4:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 20,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1021:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1020:6:0"
+ },
+ "scope": 44,
+ "src": "960:67:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": null,
+ "documentation": null,
+ "functionSelector": "a9059cbb",
+ "id": 32,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "transfer",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 28,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 25,
+ "mutability": "mutable",
+ "name": "dst",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 32,
+ "src": "1051:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 24,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1051:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 27,
+ "mutability": "mutable",
+ "name": "wad",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 32,
+ "src": "1064:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 26,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1064:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1050:26:0"
+ },
+ "returnParameters": {
+ "id": 31,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 30,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 32,
+ "src": "1095:4:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 29,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1095:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1094:6:0"
+ },
+ "scope": 44,
+ "src": "1033:68:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": null,
+ "documentation": null,
+ "functionSelector": "23b872dd",
+ "id": 43,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "transferFrom",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 39,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 34,
+ "mutability": "mutable",
+ "name": "src",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 43,
+ "src": "1138:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 33,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1138:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 36,
+ "mutability": "mutable",
+ "name": "dst",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 43,
+ "src": "1159:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 35,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1159:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 38,
+ "mutability": "mutable",
+ "name": "wad",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 43,
+ "src": "1180:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 37,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1180:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1128:69:0"
+ },
+ "returnParameters": {
+ "id": 42,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 41,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 43,
+ "src": "1216:4:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 40,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1216:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1215:6:0"
+ },
+ "scope": 44,
+ "src": "1107:115:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 45,
+ "src": "780:444:0"
+ }
+ ],
+ "src": "755:35651:0"
+ },
+ "id": 0
+ }
+ }
+ }
+}
diff --git a/artifacts/build-info/35f2e205bb65eab2a767781d3b0149ca.json b/artifacts/build-info/35f2e205bb65eab2a767781d3b0149ca.json
new file mode 100644
index 000000000..0e4dd52cf
--- /dev/null
+++ b/artifacts/build-info/35f2e205bb65eab2a767781d3b0149ca.json
@@ -0,0 +1,536 @@
+{
+ "id": "35f2e205bb65eab2a767781d3b0149ca",
+ "_format": "hh-sol-build-info-1",
+ "solcVersion": "0.6.10",
+ "solcLongVersion": "0.6.10+commit.00c0fcaf",
+ "input": {
+ "language": "Solidity",
+ "sources": {
+ "contracts/Migrations.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ncontract Migrations {\n address public owner;\n uint256 public last_completed_migration;\n\n constructor() public {\n owner = msg.sender;\n }\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n function setCompleted(uint256 completed) public restricted {\n last_completed_migration = completed;\n }\n}\n"
+ }
+ },
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "outputSelection": {
+ "*": {
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ],
+ "": [
+ "ast"
+ ]
+ }
+ }
+ }
+ },
+ "output": {
+ "contracts": {
+ "contracts/Migrations.sol": {
+ "Migrations": {
+ "abi": [
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "last_completed_migration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "completed",
+ "type": "uint256"
+ }
+ ],
+ "name": "setCompleted",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560fd806100316000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063445df0ac1460415780638da5cb5b146059578063fdacd57614607b575b600080fd5b60476097565b60408051918252519081900360200190f35b605f609d565b604080516001600160a01b039092168252519081900360200190f35b609560048036036020811015608f57600080fd5b503560ac565b005b60015481565b6000546001600160a01b031681565b6000546001600160a01b031633141560c45760018190555b5056fea2646970667358221220f93a46cf86529a9989965a4e7d0a7d61ede6834049f54335ba38ae231f7ac3ec64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH1 0xFD DUP1 PUSH2 0x31 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x445DF0AC EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH1 0x59 JUMPI DUP1 PUSH4 0xFDACD576 EQ PUSH1 0x7B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x47 PUSH1 0x97 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x5F PUSH1 0x9D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x95 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH1 0x8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xAC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO PUSH1 0xC4 JUMPI PUSH1 0x1 DUP2 SWAP1 SSTORE JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 GASPRICE CHAINID 0xCF DUP7 MSTORE SWAP11 SWAP10 DUP10 SWAP7 GAS 0x4E PUSH30 0xA7D61EDE6834049F54335BA38AE231F7AC3EC64736F6C634300060A0033 ",
+ "sourceMap": "64:345:0:-:0;;;162:56;;;;;;;;;-1:-1:-1;193:5:0;:18;;-1:-1:-1;;;;;;193:18:0;201:10;193:18;;;64:345;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063445df0ac1460415780638da5cb5b146059578063fdacd57614607b575b600080fd5b60476097565b60408051918252519081900360200190f35b605f609d565b604080516001600160a01b039092168252519081900360200190f35b609560048036036020811015608f57600080fd5b503560ac565b005b60015481565b6000546001600160a01b031681565b6000546001600160a01b031633141560c45760018190555b5056fea2646970667358221220f93a46cf86529a9989965a4e7d0a7d61ede6834049f54335ba38ae231f7ac3ec64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x445DF0AC EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH1 0x59 JUMPI DUP1 PUSH4 0xFDACD576 EQ PUSH1 0x7B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x47 PUSH1 0x97 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x5F PUSH1 0x9D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x95 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH1 0x8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xAC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO PUSH1 0xC4 JUMPI PUSH1 0x1 DUP2 SWAP1 SSTORE JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 GASPRICE CHAINID 0xCF DUP7 MSTORE SWAP11 SWAP10 DUP10 SWAP7 GAS 0x4E PUSH30 0xA7D61EDE6834049F54335BA38AE231F7AC3EC64736F6C634300060A0033 ",
+ "sourceMap": "64:345:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;116:39;;;:::i;:::-;;;;;;;;;;;;;;;;90:20;;;:::i;:::-;;;;-1:-1:-1;;;;;90:20:0;;;;;;;;;;;;;;295:112;;;;;;;;;;;;;;;;-1:-1:-1;295:112:0;;:::i;:::-;;116:39;;;;:::o;90:20::-;;;-1:-1:-1;;;;;90:20:0;;:::o;295:112::-;274:5;;-1:-1:-1;;;;;274:5:0;260:10;:19;256:26;;;364:24:::1;:36:::0;;;256:26;295:112;:::o"
+ },
+ "methodIdentifiers": {
+ "last_completed_migration()": "445df0ac",
+ "owner()": "8da5cb5b",
+ "setCompleted(uint256)": "fdacd576"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"last_completed_migration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"completed\",\"type\":\"uint256\"}],\"name\":\"setCompleted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/Migrations.sol\":\"Migrations\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Migrations.sol\":{\"keccak256\":\"0x1bfd11cfa8c6ba519fb780203d28abf2c341d39ced7b6cd6532f001b2ef5f4ed\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b491e57ae630c492a9ec592ca77df556e01127b1b1e9e54e70418f27859fb62a\",\"dweb:/ipfs/QmW6GsXudJMVfecuYrPDLMEGmjnZBWaDSowzYL3uPu5P4R\"]}},\"version\":1}"
+ }
+ }
+ },
+ "sources": {
+ "contracts/Migrations.sol": {
+ "ast": {
+ "absolutePath": "contracts/Migrations.sol",
+ "exportedSymbols": {
+ "Migrations": [
+ 36
+ ]
+ },
+ "id": 37,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1,
+ "literals": [
+ "solidity",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "39:23:0"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": null,
+ "fullyImplemented": true,
+ "id": 36,
+ "linearizedBaseContracts": [
+ 36
+ ],
+ "name": "Migrations",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "functionSelector": "8da5cb5b",
+ "id": 3,
+ "mutability": "mutable",
+ "name": "owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 36,
+ "src": "90:20:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "90:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "445df0ac",
+ "id": 5,
+ "mutability": "mutable",
+ "name": "last_completed_migration",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 36,
+ "src": "116:39:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "116:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 13,
+ "nodeType": "Block",
+ "src": "183:35:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 11,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 8,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3,
+ "src": "193:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 9,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "201:3:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 10,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "201:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "193:18:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 12,
+ "nodeType": "ExpressionStatement",
+ "src": "193:18:0"
+ }
+ ]
+ },
+ "documentation": null,
+ "id": 14,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "173:2:0"
+ },
+ "returnParameters": {
+ "id": 7,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "183:0:0"
+ },
+ "scope": 36,
+ "src": "162:56:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 22,
+ "nodeType": "Block",
+ "src": "246:43:0",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 19,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 16,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "260:3:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 17,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "260:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 18,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3,
+ "src": "274:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "260:19:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 21,
+ "nodeType": "IfStatement",
+ "src": "256:26:0",
+ "trueBody": {
+ "id": 20,
+ "nodeType": "PlaceholderStatement",
+ "src": "281:1:0"
+ }
+ }
+ ]
+ },
+ "documentation": null,
+ "id": 23,
+ "name": "restricted",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 15,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "243:2:0"
+ },
+ "src": "224:65:0",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 34,
+ "nodeType": "Block",
+ "src": "354:53:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 32,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 30,
+ "name": "last_completed_migration",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5,
+ "src": "364:24:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 31,
+ "name": "completed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 25,
+ "src": "391:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "364:36:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 33,
+ "nodeType": "ExpressionStatement",
+ "src": "364:36:0"
+ }
+ ]
+ },
+ "documentation": null,
+ "functionSelector": "fdacd576",
+ "id": 35,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 28,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 27,
+ "name": "restricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 23,
+ "src": "343:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "343:10:0"
+ }
+ ],
+ "name": "setCompleted",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 26,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 25,
+ "mutability": "mutable",
+ "name": "completed",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 35,
+ "src": "317:17:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 24,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "317:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "316:19:0"
+ },
+ "returnParameters": {
+ "id": 29,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "354:0:0"
+ },
+ "scope": 36,
+ "src": "295:112:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 37,
+ "src": "64:345:0"
+ }
+ ],
+ "src": "39:371:0"
+ },
+ "id": 0
+ }
+ }
+ }
+}
diff --git a/artifacts/build-info/a0f746756ed5cbf60e165da1346c9eeb.json b/artifacts/build-info/a0f746756ed5cbf60e165da1346c9eeb.json
new file mode 100644
index 000000000..6d9e5b383
--- /dev/null
+++ b/artifacts/build-info/a0f746756ed5cbf60e165da1346c9eeb.json
@@ -0,0 +1,267227 @@
+{
+ "id": "a0f746756ed5cbf60e165da1346c9eeb",
+ "_format": "hh-sol-build-info-1",
+ "solcVersion": "0.6.10",
+ "solcLongVersion": "0.6.10+commit.00c0fcaf",
+ "input": {
+ "language": "Solidity",
+ "sources": {
+ "contracts/core/AddressBook.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\nimport {Ownable} from \"../packages/oz/Ownable.sol\";\nimport {OwnedUpgradeabilityProxy} from \"../packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol\";\n\n/**\n * @author Opyn Team\n * @title AddressBook Module\n */\ncontract AddressBook is Ownable {\n /// @dev Otoken implementation key\n bytes32 private constant OTOKEN_IMPL = keccak256(\"OTOKEN_IMPL\");\n /// @dev OtokenFactory key\n bytes32 private constant OTOKEN_FACTORY = keccak256(\"OTOKEN_FACTORY\");\n /// @dev Whitelist key\n bytes32 private constant WHITELIST = keccak256(\"WHITELIST\");\n /// @dev Controller key\n bytes32 private constant CONTROLLER = keccak256(\"CONTROLLER\");\n /// @dev MarginPool key\n bytes32 private constant MARGIN_POOL = keccak256(\"MARGIN_POOL\");\n /// @dev MarginCalculator key\n bytes32 private constant MARGIN_CALCULATOR = keccak256(\"MARGIN_CALCULATOR\");\n /// @dev LiquidationManager key\n bytes32 private constant LIQUIDATION_MANAGER = keccak256(\"LIQUIDATION_MANAGER\");\n /// @dev Oracle key\n bytes32 private constant ORACLE = keccak256(\"ORACLE\");\n\n /// @dev mapping between key and address\n mapping(bytes32 => address) private addresses;\n\n /// @notice emits an event when a new proxy is created\n event ProxyCreated(bytes32 indexed id, address indexed proxy);\n /// @notice emits an event when a new address is added\n event AddressAdded(bytes32 indexed id, address indexed add);\n\n /**\n * @notice return Otoken implementation address\n * @return Otoken implementation address\n */\n function getOtokenImpl() external view returns (address) {\n return getAddress(OTOKEN_IMPL);\n }\n\n /**\n * @notice return oTokenFactory address\n * @return OtokenFactory address\n */\n function getOtokenFactory() external view returns (address) {\n return getAddress(OTOKEN_FACTORY);\n }\n\n /**\n * @notice return Whitelist address\n * @return Whitelist address\n */\n function getWhitelist() external view returns (address) {\n return getAddress(WHITELIST);\n }\n\n /**\n * @notice return Controller address\n * @return Controller address\n */\n function getController() external view returns (address) {\n return getAddress(CONTROLLER);\n }\n\n /**\n * @notice return MarginPool address\n * @return MarginPool address\n */\n function getMarginPool() external view returns (address) {\n return getAddress(MARGIN_POOL);\n }\n\n /**\n * @notice return MarginCalculator address\n * @return MarginCalculator address\n */\n function getMarginCalculator() external view returns (address) {\n return getAddress(MARGIN_CALCULATOR);\n }\n\n /**\n * @notice return LiquidationManager address\n * @return LiquidationManager address\n */\n function getLiquidationManager() external view returns (address) {\n return getAddress(LIQUIDATION_MANAGER);\n }\n\n /**\n * @notice return Oracle address\n * @return Oracle address\n */\n function getOracle() external view returns (address) {\n return getAddress(ORACLE);\n }\n\n /**\n * @notice set Otoken implementation address\n * @dev can only be called by the addressbook owner\n * @param _otokenImpl Otoken implementation address\n */\n function setOtokenImpl(address _otokenImpl) external onlyOwner {\n setAddress(OTOKEN_IMPL, _otokenImpl);\n }\n\n /**\n * @notice set OtokenFactory address\n * @dev can only be called by the addressbook owner\n * @param _otokenFactory OtokenFactory address\n */\n function setOtokenFactory(address _otokenFactory) external onlyOwner {\n setAddress(OTOKEN_FACTORY, _otokenFactory);\n }\n\n /**\n * @notice set Whitelist address\n * @dev can only be called by the addressbook owner\n * @param _whitelist Whitelist address\n */\n function setWhitelist(address _whitelist) external onlyOwner {\n setAddress(WHITELIST, _whitelist);\n }\n\n /**\n * @notice set Controller address\n * @dev can only be called by the addressbook owner\n * @param _controller Controller address\n */\n function setController(address _controller) external onlyOwner {\n updateImpl(CONTROLLER, _controller);\n }\n\n /**\n * @notice set MarginPool address\n * @dev can only be called by the addressbook owner\n * @param _marginPool MarginPool address\n */\n function setMarginPool(address _marginPool) external onlyOwner {\n setAddress(MARGIN_POOL, _marginPool);\n }\n\n /**\n * @notice set MarginCalculator address\n * @dev can only be called by the addressbook owner\n * @param _marginCalculator MarginCalculator address\n */\n function setMarginCalculator(address _marginCalculator) external onlyOwner {\n setAddress(MARGIN_CALCULATOR, _marginCalculator);\n }\n\n /**\n * @notice set LiquidationManager address\n * @dev can only be called by the addressbook owner\n * @param _liquidationManager LiquidationManager address\n */\n function setLiquidationManager(address _liquidationManager) external onlyOwner {\n setAddress(LIQUIDATION_MANAGER, _liquidationManager);\n }\n\n /**\n * @notice set Oracle address\n * @dev can only be called by the addressbook owner\n * @param _oracle Oracle address\n */\n function setOracle(address _oracle) external onlyOwner {\n setAddress(ORACLE, _oracle);\n }\n\n /**\n * @notice return an address for specific key\n * @param _key key address\n * @return address\n */\n function getAddress(bytes32 _key) public view returns (address) {\n return addresses[_key];\n }\n\n /**\n * @notice set a specific address for a specific key\n * @dev can only be called by the addressbook owner\n * @param _key key\n * @param _address address\n */\n function setAddress(bytes32 _key, address _address) public onlyOwner {\n addresses[_key] = _address;\n\n emit AddressAdded(_key, _address);\n }\n\n /**\n * @dev function to update the implementation of a specific component of the protocol\n * @param _id id of the contract to be updated\n * @param _newAddress address of the new implementation\n **/\n function updateImpl(bytes32 _id, address _newAddress) public onlyOwner {\n address payable proxyAddress = address(uint160(getAddress(_id)));\n\n if (proxyAddress == address(0)) {\n bytes memory params = abi.encodeWithSignature(\"initialize(address,address)\", address(this), owner());\n OwnedUpgradeabilityProxy proxy = new OwnedUpgradeabilityProxy();\n setAddress(_id, address(proxy));\n emit ProxyCreated(_id, address(proxy));\n proxy.upgradeToAndCall(_newAddress, params);\n } else {\n OwnedUpgradeabilityProxy proxy = OwnedUpgradeabilityProxy(proxyAddress);\n proxy.upgradeTo(_newAddress);\n }\n }\n}\n"
+ },
+ "contracts/packages/oz/Ownable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\npragma solidity 0.6.10;\n\nimport \"./Context.sol\";\n\n/**\n * @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 *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\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.\n */\ncontract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(_owner == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @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 *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity 0.6.10;\n\nimport \"./UpgradeabilityProxy.sol\";\n\n/**\n * @title OwnedUpgradeabilityProxy\n * @dev This contract combines an upgradeability proxy with basic authorization control functionalities\n */\ncontract OwnedUpgradeabilityProxy is UpgradeabilityProxy {\n /**\n * @dev Event to show ownership has been transferred\n * @param previousOwner representing the address of the previous owner\n * @param newOwner representing the address of the new owner\n */\n event ProxyOwnershipTransferred(address previousOwner, address newOwner);\n\n /// @dev Storage position of the owner of the contract\n bytes32 private constant proxyOwnerPosition = keccak256(\"org.zeppelinos.proxy.owner\");\n\n /**\n * @dev the constructor sets the original owner of the contract to the sender account.\n */\n constructor() public {\n setUpgradeabilityOwner(msg.sender);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyProxyOwner() {\n require(msg.sender == proxyOwner());\n _;\n }\n\n /**\n * @dev Tells the address of the owner\n * @return owner the address of the owner\n */\n function proxyOwner() public view returns (address owner) {\n bytes32 position = proxyOwnerPosition;\n assembly {\n owner := sload(position)\n }\n }\n\n /**\n * @dev Sets the address of the owner\n * @param _newProxyOwner address of new proxy owner\n */\n function setUpgradeabilityOwner(address _newProxyOwner) internal {\n bytes32 position = proxyOwnerPosition;\n assembly {\n sstore(position, _newProxyOwner)\n }\n }\n\n /**\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\n * @param _newOwner The address to transfer ownership to.\n */\n function transferProxyOwnership(address _newOwner) public onlyProxyOwner {\n require(_newOwner != address(0));\n emit ProxyOwnershipTransferred(proxyOwner(), _newOwner);\n setUpgradeabilityOwner(_newOwner);\n }\n\n /**\n * @dev Allows the proxy owner to upgrade the current version of the proxy.\n * @param _implementation representing the address of the new implementation to be set.\n */\n function upgradeTo(address _implementation) public onlyProxyOwner {\n _upgradeTo(_implementation);\n }\n\n /**\n * @dev Allows the proxy owner to upgrade the current version of the proxy and call the new implementation\n * to initialize whatever is needed through a low level call.\n * @param _implementation representing the address of the new implementation to be set.\n * @param _data represents the msg.data to bet sent in the low level call. This parameter may include the function\n * signature of the implementation to be called with the needed payload\n */\n function upgradeToAndCall(address _implementation, bytes calldata _data) public payable onlyProxyOwner {\n upgradeTo(_implementation);\n (bool success, ) = address(this).call{value: msg.value}(_data);\n require(success);\n }\n}\n"
+ },
+ "contracts/packages/oz/Context.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\npragma solidity 0.6.10;\n\n/*\n * @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 GSN 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 *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity 0.6.10;\n\nimport \"./Proxy.sol\";\n\n/**\n * @title UpgradeabilityProxy\n * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded\n */\ncontract UpgradeabilityProxy is Proxy {\n /**\n * @dev This event will be emitted every time the implementation gets upgraded\n * @param implementation representing the address of the upgraded implementation\n */\n event Upgraded(address indexed implementation);\n\n /// @dev Storage position of the address of the current implementation\n bytes32 private constant implementationPosition = keccak256(\"org.zeppelinos.proxy.implementation\");\n\n /**\n * @dev Tells the address of the current implementation\n * @return impl address of the current implementation\n */\n function implementation() public view override returns (address impl) {\n bytes32 position = implementationPosition;\n assembly {\n impl := sload(position)\n }\n }\n\n /**\n * @dev Sets the address of the current implementation\n * @param _newImplementation address representing the new implementation to be set\n */\n function setImplementation(address _newImplementation) internal {\n bytes32 position = implementationPosition;\n assembly {\n sstore(position, _newImplementation)\n }\n }\n\n /**\n * @dev Upgrades the implementation address\n * @param _newImplementation representing the address of the new implementation to be set\n */\n function _upgradeTo(address _newImplementation) internal {\n address currentImplementation = implementation();\n require(currentImplementation != _newImplementation);\n setImplementation(_newImplementation);\n emit Upgraded(_newImplementation);\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/Proxy.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity 0.6.10;\n\n/**\n * @title Proxy\n * @dev Gives the possibility to delegate any call to a foreign implementation.\n */\nabstract contract Proxy {\n /**\n * @dev Tells the address of the implementation where every call will be delegated.\n * @return address of the implementation to which it will be delegated\n */\n function implementation() public view virtual returns (address);\n\n /**\n * @dev Fallback function allowing to perform a delegatecall to the given implementation.\n * This function will return whatever the implementation call returns\n */\n fallback() external payable {\n address _impl = implementation();\n require(_impl != address(0));\n\n assembly {\n let ptr := mload(0x40)\n calldatacopy(ptr, 0, calldatasize())\n let result := delegatecall(gas(), _impl, ptr, calldatasize(), 0, 0)\n let size := returndatasize()\n returndatacopy(ptr, 0, size)\n\n switch result\n case 0 {\n revert(ptr, size)\n }\n default {\n return(ptr, size)\n }\n }\n }\n}\n"
+ },
+ "contracts/core/Whitelist.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.6.10;\n\nimport \"../interfaces/AddressBookInterface.sol\";\nimport \"../packages/oz/Ownable.sol\";\n\n/**\n * @author Opyn Team\n * @title Whitelist Module\n * @notice The whitelist module keeps track of all valid oToken addresses, product hashes, collateral addresses, and callee addresses.\n */\ncontract Whitelist is Ownable {\n /// @notice AddressBook module address\n address public addressBook;\n /// @dev mapping to track whitelisted products\n mapping(bytes32 => bool) internal whitelistedProduct;\n /// @dev mapping to track whitelisted collateral\n mapping(address => bool) internal whitelistedCollateral;\n /// @dev mapping to track whitelisted oTokens\n mapping(address => bool) internal whitelistedOtoken;\n /// @dev mapping to track whitelisted callee addresses for the call action\n mapping(address => bool) internal whitelistedCallee;\n\n /**\n * @dev constructor\n * @param _addressBook AddressBook module address\n */\n constructor(address _addressBook) public {\n require(_addressBook != address(0), \"Invalid address book\");\n\n addressBook = _addressBook;\n }\n\n /// @notice emits an event a product is whitelisted by the owner address\n event ProductWhitelisted(\n bytes32 productHash,\n address indexed underlying,\n address indexed strike,\n address indexed collateral,\n bool isPut\n );\n /// @notice emits an event a product is blacklisted by the owner address\n event ProductBlacklisted(\n bytes32 productHash,\n address indexed underlying,\n address indexed strike,\n address indexed collateral,\n bool isPut\n );\n /// @notice emits an event when a collateral address is whitelisted by the owner address\n event CollateralWhitelisted(address indexed collateral);\n /// @notice emits an event when a collateral address is blacklist by the owner address\n event CollateralBlacklisted(address indexed collateral);\n /// @notice emits an event when an oToken is whitelisted by the OtokenFactory module\n event OtokenWhitelisted(address indexed otoken);\n /// @notice emits an event when an oToken is blacklisted by the OtokenFactory module\n event OtokenBlacklisted(address indexed otoken);\n /// @notice emits an event when a callee address is whitelisted by the owner address\n event CalleeWhitelisted(address indexed _callee);\n /// @notice emits an event when a callee address is blacklisted by the owner address\n event CalleeBlacklisted(address indexed _callee);\n\n /**\n * @notice check if the sender is the oTokenFactory module\n */\n modifier onlyFactory() {\n require(\n msg.sender == AddressBookInterface(addressBook).getOtokenFactory(),\n \"Whitelist: Sender is not OtokenFactory\"\n );\n\n _;\n }\n\n /**\n * @notice check if a product is whitelisted\n * @dev product is the hash of underlying asset, strike asset, collateral asset, and isPut\n * @param _underlying asset that the option references\n * @param _strike asset that the strike price is denominated in\n * @param _collateral asset that is held as collateral against short/written options\n * @param _isPut True if a put option, False if a call option\n * @return boolean, True if product is whitelisted\n */\n function isWhitelistedProduct(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external view returns (bool) {\n bytes32 productHash = keccak256(abi.encode(_underlying, _strike, _collateral, _isPut));\n\n return whitelistedProduct[productHash];\n }\n\n /**\n * @notice check if a collateral asset is whitelisted\n * @param _collateral asset that is held as collateral against short/written options\n * @return boolean, True if the collateral is whitelisted\n */\n function isWhitelistedCollateral(address _collateral) external view returns (bool) {\n return whitelistedCollateral[_collateral];\n }\n\n /**\n * @notice check if an oToken is whitelisted\n * @param _otoken oToken address\n * @return boolean, True if the oToken is whitelisted\n */\n function isWhitelistedOtoken(address _otoken) external view returns (bool) {\n return whitelistedOtoken[_otoken];\n }\n\n /**\n * @notice check if a callee address is whitelisted for the call action\n * @param _callee callee destination address\n * @return boolean, True if the address is whitelisted\n */\n function isWhitelistedCallee(address _callee) external view returns (bool) {\n return whitelistedCallee[_callee];\n }\n\n /**\n * @notice allows the owner to whitelist a product\n * @dev product is the hash of underlying asset, strike asset, collateral asset, and isPut\n * can only be called from the owner address\n * @param _underlying asset that the option references\n * @param _strike asset that the strike price is denominated in\n * @param _collateral asset that is held as collateral against short/written options\n * @param _isPut True if a put option, False if a call option\n */\n function whitelistProduct(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external onlyOwner {\n require(whitelistedCollateral[_collateral], \"Whitelist: Collateral is not whitelisted\");\n require(\n (_isPut && (_strike == _collateral)) || (!_isPut && (_collateral == _underlying)),\n \"Whitelist: Only allow fully collateralized products\"\n );\n\n bytes32 productHash = keccak256(abi.encode(_underlying, _strike, _collateral, _isPut));\n\n whitelistedProduct[productHash] = true;\n\n emit ProductWhitelisted(productHash, _underlying, _strike, _collateral, _isPut);\n }\n\n /**\n * @notice allow the owner to blacklist a product\n * @dev product is the hash of underlying asset, strike asset, collateral asset, and isPut\n * can only be called from the owner address\n * @param _underlying asset that the option references\n * @param _strike asset that the strike price is denominated in\n * @param _collateral asset that is held as collateral against short/written options\n * @param _isPut True if a put option, False if a call option\n */\n function blacklistProduct(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external onlyOwner {\n bytes32 productHash = keccak256(abi.encode(_underlying, _strike, _collateral, _isPut));\n\n whitelistedProduct[productHash] = false;\n\n emit ProductBlacklisted(productHash, _underlying, _strike, _collateral, _isPut);\n }\n\n /**\n * @notice allows the owner to whitelist a collateral address\n * @dev can only be called from the owner address. This function is used to whitelist any asset other than Otoken as collateral. WhitelistOtoken() is used to whitelist Otoken contracts.\n * @param _collateral collateral asset address\n */\n function whitelistCollateral(address _collateral) external onlyOwner {\n whitelistedCollateral[_collateral] = true;\n\n emit CollateralWhitelisted(_collateral);\n }\n\n /**\n * @notice allows the owner to blacklist a collateral address\n * @dev can only be called from the owner address\n * @param _collateral collateral asset address\n */\n function blacklistCollateral(address _collateral) external onlyOwner {\n whitelistedCollateral[_collateral] = false;\n\n emit CollateralBlacklisted(_collateral);\n }\n\n /**\n * @notice allows the OtokenFactory module to whitelist a new option\n * @dev can only be called from the OtokenFactory address\n * @param _otokenAddress oToken\n */\n function whitelistOtoken(address _otokenAddress) external onlyFactory {\n whitelistedOtoken[_otokenAddress] = true;\n\n emit OtokenWhitelisted(_otokenAddress);\n }\n\n /**\n * @notice allows the owner to blacklist an option\n * @dev can only be called from the owner address\n * @param _otokenAddress oToken\n */\n function blacklistOtoken(address _otokenAddress) external onlyOwner {\n whitelistedOtoken[_otokenAddress] = false;\n\n emit OtokenBlacklisted(_otokenAddress);\n }\n\n /**\n * @notice allows the owner to whitelist a destination address for the call action\n * @dev can only be called from the owner address\n * @param _callee callee address\n */\n function whitelistCallee(address _callee) external onlyOwner {\n whitelistedCallee[_callee] = true;\n\n emit CalleeWhitelisted(_callee);\n }\n\n /**\n * @notice allows the owner to blacklist a destination address for the call action\n * @dev can only be called from the owner address\n * @param _callee callee address\n */\n function blacklistCallee(address _callee) external onlyOwner {\n whitelistedCallee[_callee] = false;\n\n emit CalleeBlacklisted(_callee);\n }\n}\n"
+ },
+ "contracts/interfaces/AddressBookInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ninterface AddressBookInterface {\n /* Getters */\n\n function getOtokenImpl() external view returns (address);\n\n function getOtokenFactory() external view returns (address);\n\n function getWhitelist() external view returns (address);\n\n function getController() external view returns (address);\n\n function getOracle() external view returns (address);\n\n function getMarginPool() external view returns (address);\n\n function getMarginCalculator() external view returns (address);\n\n function getLiquidationManager() external view returns (address);\n\n function getAddress(bytes32 _id) external view returns (address);\n\n /* Setters */\n\n function setOtokenImpl(address _otokenImpl) external;\n\n function setOtokenFactory(address _factory) external;\n\n function setOracleImpl(address _otokenImpl) external;\n\n function setWhitelist(address _whitelist) external;\n\n function setController(address _controller) external;\n\n function setMarginPool(address _marginPool) external;\n\n function setMarginCalculator(address _calculator) external;\n\n function setLiquidationManager(address _liquidationManager) external;\n\n function setAddress(bytes32 _id, address _newImpl) external;\n}\n"
+ },
+ "contracts/tests/OtokenImplV1.sol": {
+ "content": "pragma solidity =0.6.10;\n\nimport {ERC20PermitUpgradeable} from \"../packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\";\nimport {AddressBookInterface} from \"../interfaces/AddressBookInterface.sol\";\n\n/**\n * SPDX-License-Identifier: UNLICENSED\n * @dev The Otoken inherits ERC20PermitUpgradeable because we need to use the init instead of constructor\n * This is V1 implementation, with no getOtokenDetails()\n */\ncontract OtokenImplV1 is ERC20PermitUpgradeable {\n address public addressBook;\n address public controller;\n address public underlyingAsset;\n address public strikeAsset;\n address public collateralAsset;\n\n uint256 public strikePrice;\n uint256 public expiryTimestamp;\n\n bool public isPut;\n\n bool public inited = false;\n\n function init(\n address _addressBook,\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiryTimestamp,\n bool _isPut\n ) external initializer {\n inited = true;\n controller = AddressBookInterface(_addressBook).getController();\n underlyingAsset = _underlyingAsset;\n strikeAsset = _strikeAsset;\n collateralAsset = _collateralAsset;\n strikePrice = _strikePrice;\n expiryTimestamp = _expiryTimestamp;\n isPut = _isPut;\n string memory tokenName = \"ETHUSDC/1597511955/200P/USDC\";\n string memory tokenSymbol = \"oETHUSDCP\";\n __ERC20_init_unchained(tokenName, tokenSymbol);\n __ERC20Permit_init(tokenName);\n _setupDecimals(8);\n }\n\n function mintOtoken(address _to, uint256 _amount) external {\n _mint(_to, _amount);\n }\n\n function burnOtoken(address account, uint256 amount) external {\n _burn(account, amount);\n }\n\n function getChainId() external view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.5 <0.8.0;\n\nimport \"../ERC20Upgradeable.sol\";\nimport \"./IERC20PermitUpgradeable.sol\";\nimport \"../cryptography/ECDSAUpgradeable.sol\";\nimport \"../utils/CountersUpgradeable.sol\";\nimport \"./EIP712Upgradeable.sol\";\nimport \"../Initializable.sol\";\n\n/**\n * @dev Implementation 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 *\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.\n */\nabstract contract ERC20PermitUpgradeable is\n Initializable,\n ERC20Upgradeable,\n IERC20PermitUpgradeable,\n EIP712Upgradeable\n{\n using CountersUpgradeable for CountersUpgradeable.Counter;\n\n mapping(address => CountersUpgradeable.Counter) private _nonces;\n\n // solhint-disable-next-line var-name-mixedcase\n bytes32 private _PERMIT_TYPEHASH;\n\n /**\n * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n *\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\n */\n function __ERC20Permit_init(string memory name) internal initializer {\n __Context_init_unchained();\n __EIP712_init_unchained(name, \"1\");\n __ERC20Permit_init_unchained(name);\n }\n\n function __ERC20Permit_init_unchained(string memory name) internal initializer {\n _PERMIT_TYPEHASH = keccak256(\n \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"\n );\n }\n\n /**\n * @dev See {IERC20Permit-permit}.\n */\n function permit(\n address owner,\n address spender,\n uint256 amount,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual override {\n // solhint-disable-next-line not-rely-on-time\n require(block.timestamp <= deadline, \"ERC20Permit: expired deadline\");\n\n bytes32 structHash = keccak256(\n abi.encode(_PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline)\n );\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ECDSAUpgradeable.recover(hash, v, r, s);\n require(signer == owner, \"ERC20Permit: invalid signature\");\n\n _nonces[owner].increment();\n _approve(owner, spender, amount);\n }\n\n /**\n * @dev See {IERC20Permit-nonces}.\n */\n function nonces(address owner) public view override returns (uint256) {\n return _nonces[owner].current();\n }\n\n /**\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n uint256[49] private __gap;\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/ERC20Upgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./GSN/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"./math/SafeMathUpgradeable.sol\";\nimport \"./Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\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 *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\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 *\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}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping(address => uint256) private _balances;\n\n mapping(address => mapping(address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n /**\n * @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 *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\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}.\n */\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\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 *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(\n sender,\n _msgSender(),\n _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\")\n );\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(\n _msgSender(),\n spender,\n _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\")\n );\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(\n address sender,\n address recipient,\n uint256 amount\n ) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(\n address owner,\n address spender,\n uint256 amount\n ) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to 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 *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 amount\n ) internal virtual {}\n\n uint256[44] private __gap;\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @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 *\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.\n */\ninterface IERC20PermitUpgradeable {\n /**\n * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,\n * given `owner`'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\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 *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n */\n function permit(\n address owner,\n address spender,\n uint256 amount,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSAUpgradeable {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../math/SafeMathUpgradeable.sol\";\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}\n * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never\n * directly accessed.\n */\nlibrary CountersUpgradeable {\n using SafeMathUpgradeable for uint256;\n\n struct Counter {\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n // this feature: see https://github.com/ethereum/solidity/issues/4637\n uint256 _value; // default: 0\n }\n\n function current(Counter storage counter) internal view returns (uint256) {\n return counter._value;\n }\n\n function increment(Counter storage counter) internal {\n // The {SafeMath} overflow check can be skipped here, see the comment at the top\n counter._value += 1;\n }\n\n function decrement(Counter storage counter) internal {\n counter._value = counter._value.sub(1);\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 name,\n bytes32 version\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, name, version, _getChainId(), address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal view virtual returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal view virtual returns (bytes32) {\n return _HASHED_VERSION;\n }\n\n uint256[50] private __gap;\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/Initializable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\n/* solhint-disable */\npragma solidity >=0.4.24 <0.7.0;\n\n/**\n * @title Initializable\n *\n * @dev Helper contract to support initializer functions. To use it, replace\n * the constructor with a function that has the `initializer` modifier.\n * WARNING: Unlike constructors, initializer functions must be manually\n * invoked. This applies both to deploying an Initializable contract, as well\n * as extending an Initializable contract via inheritance.\n * WARNING: When used with inheritance, manual care must be taken to not invoke\n * a parent initializer twice, or ensure that all initializers are idempotent,\n * because this is not dealt with automatically as with constructors.\n */\ncontract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private initializing;\n\n /**\n * @dev Modifier to use in the initializer function of a contract.\n */\n modifier initializer() {\n require(initializing || isConstructor() || !initialized, \"Contract instance has already been initialized\");\n\n bool isTopLevelCall = !initializing;\n if (isTopLevelCall) {\n initializing = true;\n initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function isConstructor() private view returns (bool) {\n // extcodesize checks the size of the code stored in an address, and\n // address returns the current address. Since the code is still not\n // deployed when running a constructor, any checks on its code size will\n // yield zero, making it an effective way to detect if a contract is\n // under construction or not.\n address self = address(this);\n uint256 cs;\n assembly {\n cs := extcodesize(self)\n }\n return cs == 0;\n }\n\n // Reserved storage space to allow for layout changes in the future.\n uint256[50] private ______gap;\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../Initializable.sol\";\n\n/*\n * @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 GSN 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 *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {}\n\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n\n uint256[50] private __gap;\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/IERC20Upgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @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 *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\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 *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\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 */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return sub(a, b, \"SafeMath: subtraction overflow\");\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n uint256 c = a - b;\n\n return c;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) {\n return 0;\n }\n\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return div(a, b, \"SafeMath: division by zero\");\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n return c;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return mod(a, b, \"SafeMath: modulo by zero\");\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts with custom message when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n require(b != 0, errorMessage);\n return a % b;\n }\n}\n"
+ },
+ "contracts/mocks/MockPermitERC20.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {ERC20PermitUpgradeable} from \"../packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\";\n\ncontract MockPermitERC20 is ERC20PermitUpgradeable {\n constructor(\n string memory _name,\n string memory _symbol,\n uint8 _decimals\n ) public {\n __ERC20_init_unchained(_name, _symbol);\n __ERC20Permit_init(_name);\n _setupDecimals(_decimals);\n }\n\n function mint(address account, uint256 amount) public {\n _mint(account, amount);\n }\n}\n"
+ },
+ "contracts/mocks/MockOtoken.sol": {
+ "content": "pragma solidity =0.6.10;\n\nimport {ERC20PermitUpgradeable} from \"../packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\";\nimport {AddressBookInterface} from \"../interfaces/AddressBookInterface.sol\";\n\n/**\n * SPDX-License-Identifier: UNLICENSED\n * @dev The Otoken inherits ERC20PermitUpgradeable because we need to use the init instead of constructor.\n */\ncontract MockOtoken is ERC20PermitUpgradeable {\n address public addressBook;\n address public controller;\n address public underlyingAsset;\n address public strikeAsset;\n address public collateralAsset;\n\n uint256 public strikePrice;\n uint256 public expiryTimestamp;\n\n bool public isPut;\n\n bool public inited = false;\n\n function init(\n address _addressBook,\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiryTimestamp,\n bool _isPut\n ) external initializer {\n inited = true;\n controller = AddressBookInterface(_addressBook).getController();\n underlyingAsset = _underlyingAsset;\n strikeAsset = _strikeAsset;\n collateralAsset = _collateralAsset;\n strikePrice = _strikePrice;\n expiryTimestamp = _expiryTimestamp;\n isPut = _isPut;\n string memory tokenName = \"ETHUSDC/1597511955/200P/USDC\";\n string memory tokenSymbol = \"oETHUSDCP\";\n __ERC20_init_unchained(tokenName, tokenSymbol);\n __ERC20Permit_init(tokenName);\n _setupDecimals(8);\n }\n\n function getOtokenDetails()\n external\n view\n returns (\n address,\n address,\n address,\n uint256,\n uint256,\n bool\n )\n {\n return (collateralAsset, underlyingAsset, strikeAsset, strikePrice, expiryTimestamp, isPut);\n }\n\n function mintOtoken(address _to, uint256 _amount) external {\n _mint(_to, _amount);\n }\n\n function burnOtoken(address account, uint256 amount) external {\n _burn(account, amount);\n }\n\n function getChainId() external view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n}\n"
+ },
+ "contracts/tests/UpgradeableContractV1.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\nimport {Initializable} from \"../packages/oz/upgradeability/Initializable.sol\";\n\n/**\n * @author Opyn Team\n * @notice Upgradeable testing contract\n */\ncontract UpgradeableContractV1 is Initializable {\n /// @notice addressbook address\n address public addressBook;\n /// @notice owner address\n address public owner;\n\n /**\n * @dev this function is invoked by the proxy contract when this contract is added to the\n * AddressBook.\n * @param _addressBook the address of the AddressBook\n **/\n function initialize(address _addressBook, address _owner) public initializer {\n addressBook = _addressBook;\n owner = _owner;\n }\n\n function getV1Version() external pure returns (uint256) {\n return 1;\n }\n}\n"
+ },
+ "contracts/tests/UpgradeableContractV2.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\nimport {UpgradeableContractV1} from \"./UpgradeableContractV1.sol\";\n\n/**\n * @author Opyn Team\n * @notice Upgradeable testing contract\n */\ncontract UpgradeableContractV2 is UpgradeableContractV1 {\n function getV2Version() external pure returns (uint256) {\n return 2;\n }\n}\n"
+ },
+ "contracts/mocks/MockYToken.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {ERC20Upgradeable} from \"../packages/oz/upgradeability/ERC20Upgradeable.sol\";\n\ncontract MockYToken is ERC20Upgradeable {\n uint256 public pricePerShare;\n\n constructor(string memory _name, string memory _symbol) public {\n __ERC20_init_unchained(_name, _symbol);\n _setupDecimals(8);\n }\n\n function mint(address account, uint256 amount) public {\n _mint(account, amount);\n }\n\n function setPricePerShare(uint256 _pricePerShare) external {\n pricePerShare = _pricePerShare;\n }\n}\n"
+ },
+ "contracts/mocks/MockWSTETHToken.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {ERC20Upgradeable} from \"../packages/oz/upgradeability/ERC20Upgradeable.sol\";\n\ncontract MockWSTETHToken is ERC20Upgradeable {\n uint256 public stEthPerToken;\n\n constructor(string memory _name, string memory _symbol) public {\n __ERC20_init_unchained(_name, _symbol);\n _setupDecimals(18);\n }\n\n function mint(address account, uint256 amount) public {\n _mint(account, amount);\n }\n\n function setStEthPerToken(uint256 _stEthPerToken) external {\n stEthPerToken = _stEthPerToken;\n }\n}\n"
+ },
+ "contracts/mocks/MockERC20.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {ERC20Upgradeable} from \"../packages/oz/upgradeability/ERC20Upgradeable.sol\";\n\ncontract MockERC20 is ERC20Upgradeable {\n constructor(\n string memory _name,\n string memory _symbol,\n uint8 _decimals\n ) public {\n __ERC20_init_unchained(_name, _symbol);\n _setupDecimals(_decimals);\n }\n\n function mint(address account, uint256 amount) public {\n _mint(account, amount);\n }\n}\n"
+ },
+ "contracts/mocks/MockCUSDC.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {ERC20Upgradeable} from \"../packages/oz/upgradeability/ERC20Upgradeable.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\ncontract MockCUSDC is ERC20Upgradeable {\n uint256 public exchangeRateStored;\n address public underlying;\n uint256 public scale = 1e18;\n\n constructor(\n string memory _name,\n string memory _symbol,\n address _underlying,\n uint256 _initExchangeRateStored\n ) public {\n __ERC20_init_unchained(_name, _symbol);\n _setupDecimals(8);\n\n underlying = _underlying;\n exchangeRateStored = _initExchangeRateStored;\n }\n\n function mint(uint256 amount) public returns (uint256) {\n uint256 numerator = scale.mul(amount);\n uint256 cTokenAmount = numerator.div(exchangeRateStored);\n _mint(msg.sender, cTokenAmount);\n ERC20Interface(underlying).transferFrom(msg.sender, address(this), amount);\n return 0;\n }\n\n function redeem(uint256 amount) public returns (uint256) {\n _burn(msg.sender, amount);\n uint256 underlyingAmount = amount.mul(exchangeRateStored).div(scale);\n ERC20Interface(underlying).transfer(msg.sender, underlyingAmount);\n }\n\n function setExchangeRate(uint256 _exchangeRateStored) external {\n exchangeRateStored = _exchangeRateStored;\n }\n}\n"
+ },
+ "contracts/interfaces/ERC20Interface.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface ERC20Interface {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @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 *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\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 *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n function decimals() external view returns (uint8);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
+ },
+ "contracts/packages/oz/SafeMath.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\n/* solhint-disable */\npragma solidity ^0.6.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\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 */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return sub(a, b, \"SafeMath: subtraction overflow\");\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n uint256 c = a - b;\n\n return c;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) {\n return 0;\n }\n\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return div(a, b, \"SafeMath: division by zero\");\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n // Solidity only automatically asserts when dividing by 0\n require(b > 0, errorMessage);\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n return c;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return mod(a, b, \"SafeMath: modulo by zero\");\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts with custom message when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n require(b != 0, errorMessage);\n return a % b;\n }\n}\n"
+ },
+ "contracts/pricers/YearnPricer.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\nimport {OpynPricerInterface} from \"../interfaces/OpynPricerInterface.sol\";\nimport {YearnVaultInterface} from \"../interfaces/YearnVaultInterface.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * @notice A Pricer contract for a Yearn yToken\n */\ncontract YearnPricer is OpynPricerInterface {\n using SafeMath for uint256;\n\n /// @notice opyn oracle address\n OracleInterface public oracle;\n\n /// @notice yToken that this pricer will a get price for\n YearnVaultInterface public yToken;\n\n /// @notice underlying asset for this yToken\n ERC20Interface public underlying;\n\n /**\n * @param _yToken yToken asset\n * @param _underlying underlying asset for this yToken\n * @param _oracle Opyn Oracle contract address\n */\n constructor(\n address _yToken,\n address _underlying,\n address _oracle\n ) public {\n require(_yToken != address(0), \"YearnPricer: yToken address can not be 0\");\n require(_underlying != address(0), \"YearnPricer: underlying address can not be 0\");\n require(_oracle != address(0), \"YearnPricer: oracle address can not be 0\");\n\n yToken = YearnVaultInterface(_yToken);\n underlying = ERC20Interface(_underlying);\n oracle = OracleInterface(_oracle);\n }\n\n /**\n * @notice get the live price for the asset\n * @dev overrides the getPrice function in OpynPricerInterface\n * @return price of 1e8 yToken in USD, scaled by 1e8\n */\n function getPrice() external view override returns (uint256) {\n uint256 underlyingPrice = oracle.getPrice(address(underlying));\n require(underlyingPrice > 0, \"YearnPricer: underlying price is 0\");\n return _underlyingPriceToYtokenPrice(underlyingPrice);\n }\n\n /**\n * @notice set the expiry price in the oracle\n * @dev requires that the underlying price has been set before setting a yToken price\n * @param _expiryTimestamp expiry to set a price for\n */\n function setExpiryPriceInOracle(uint256 _expiryTimestamp) external {\n (uint256 underlyingPriceExpiry, ) = oracle.getExpiryPrice(address(underlying), _expiryTimestamp);\n require(underlyingPriceExpiry > 0, \"YearnPricer: underlying price not set yet\");\n uint256 yTokenPrice = _underlyingPriceToYtokenPrice(underlyingPriceExpiry);\n oracle.setExpiryPrice(address(yToken), _expiryTimestamp, yTokenPrice);\n }\n\n /**\n * @dev convert underlying price to yToken price with the yToken to underlying exchange rate\n * @param _underlyingPrice price of 1 underlying token (ie 1e6 USDC, 1e18 WETH) in USD, scaled by 1e8\n * @return price of 1e8 yToken in USD, scaled by 1e8\n */\n function _underlyingPriceToYtokenPrice(uint256 _underlyingPrice) private view returns (uint256) {\n uint256 pricePerShare = yToken.pricePerShare();\n uint8 underlyingDecimals = underlying.decimals();\n\n return pricePerShare.mul(_underlyingPrice).div(10**uint256(underlyingDecimals));\n }\n\n function getHistoricalPrice(uint80 _roundId) external view override returns (uint256, uint256) {\n revert(\"YearnPricer: Deprecated\");\n }\n}\n"
+ },
+ "contracts/interfaces/OracleInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ninterface OracleInterface {\n function isLockingPeriodOver(address _asset, uint256 _expiryTimestamp) external view returns (bool);\n\n function isDisputePeriodOver(address _asset, uint256 _expiryTimestamp) external view returns (bool);\n\n function getExpiryPrice(address _asset, uint256 _expiryTimestamp) external view returns (uint256, bool);\n\n function getDisputer() external view returns (address);\n\n function getPricer(address _asset) external view returns (address);\n\n function getPrice(address _asset) external view returns (uint256);\n\n function getPricerLockingPeriod(address _pricer) external view returns (uint256);\n\n function getPricerDisputePeriod(address _pricer) external view returns (uint256);\n\n function getChainlinkRoundData(address _asset, uint80 _roundId) external view returns (uint256, uint256);\n\n // Non-view function\n\n function setAssetPricer(address _asset, address _pricer) external;\n\n function setLockingPeriod(address _pricer, uint256 _lockingPeriod) external;\n\n function setDisputePeriod(address _pricer, uint256 _disputePeriod) external;\n\n function setExpiryPrice(\n address _asset,\n uint256 _expiryTimestamp,\n uint256 _price\n ) external;\n\n function disputeExpiryPrice(\n address _asset,\n uint256 _expiryTimestamp,\n uint256 _price\n ) external;\n\n function setDisputer(address _disputer) external;\n}\n"
+ },
+ "contracts/interfaces/OpynPricerInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ninterface OpynPricerInterface {\n function getPrice() external view returns (uint256);\n\n function getHistoricalPrice(uint80 _roundId) external view returns (uint256, uint256);\n}\n"
+ },
+ "contracts/interfaces/YearnVaultInterface.sol": {
+ "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.10;\n\ninterface YearnVaultInterface {\n function name() external view returns (string memory);\n\n function symbol() external view returns (string memory);\n\n function decimals() external view returns (uint8);\n\n function pricePerShare() external view returns (uint256);\n\n function deposit(uint256) external;\n\n function withdraw(uint256) external;\n}\n"
+ },
+ "contracts/tests/FlashUnwrap.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {CalleeInterface} from \"../interfaces/CalleeInterface.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeERC20} from \"../packages/oz/SafeERC20.sol\";\nimport {WETH9} from \"../external/canonical-weth/WETH9.sol\";\n\n/**\n * @author Opyn Team\n * @title FlashUnwrap\n * @notice contract To unwrap WETH. This is just a contract to test the Call action\n */\ncontract FlashUnwrap is CalleeInterface {\n using SafeERC20 for ERC20Interface;\n\n // Number of bytes in a CallFunctionData struct\n uint256 private constant NUM_CALLFUNCTIONDATA_BYTES = 32;\n\n WETH9 public WETH;\n\n struct CallFunctionData {\n uint256 amount;\n }\n\n constructor(address payable weth) public {\n WETH = WETH9(weth);\n }\n\n event WrappedETH(address indexed to, uint256 amount);\n event UnwrappedETH(address to, uint256 amount);\n\n receive() external payable {}\n\n // flash unwrap\n function callFunction(address payable _sender, bytes memory _data) external override {\n require(_data.length == NUM_CALLFUNCTIONDATA_BYTES, \"FlashUnwrap: cannot parse CallFunctionData\");\n\n CallFunctionData memory cfd = abi.decode(_data, (CallFunctionData));\n\n WETH.transferFrom(_sender, address(this), cfd.amount);\n WETH.withdraw(cfd.amount);\n\n _sender.transfer(cfd.amount);\n\n emit UnwrappedETH(_sender, cfd.amount);\n }\n}\n"
+ },
+ "contracts/interfaces/CalleeInterface.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n/**\n * @dev Contract interface that can be called from Controller as a call action.\n */\ninterface CalleeInterface {\n /**\n * Allows users to send this contract arbitrary data.\n * @param _sender The msg.sender to Controller\n * @param _data Arbitrary data given by the sender\n */\n function callFunction(address payable _sender, bytes memory _data) external;\n}\n"
+ },
+ "contracts/packages/oz/SafeERC20.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\n/* solhint-disable */\npragma solidity ^0.6.0;\n\nimport \"../../interfaces/ERC20Interface.sol\";\nimport \"./SafeMath.sol\";\nimport \"./Address.sol\";\n\n/**\n * @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 ERC20Interface;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using SafeMath for uint256;\n using Address for address;\n\n function safeTransfer(\n ERC20Interface token,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n }\n\n function safeTransferFrom(\n ERC20Interface token,\n address from,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n }\n\n /**\n * @dev Deprecated. This function has issues similar to the ones found in\n * {ERC20Interface-approve}, and its usage is discouraged.\n *\n * Whenever possible, use {safeIncreaseAllowance} and\n * {safeDecreaseAllowance} instead.\n */\n function safeApprove(\n ERC20Interface token,\n address spender,\n uint256 value\n ) internal {\n // safeApprove should only be called when setting an initial allowance,\n // or when resetting it to zero. To increase and decrease it, use\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n // solhint-disable-next-line max-line-length\n require(\n (value == 0) || (token.allowance(address(this), spender) == 0),\n \"SafeERC20: approve from non-zero to non-zero allowance\"\n );\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n }\n\n function safeIncreaseAllowance(\n ERC20Interface token,\n address spender,\n uint256 value\n ) internal {\n uint256 newAllowance = token.allowance(address(this), spender).add(value);\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n\n function safeDecreaseAllowance(\n ERC20Interface token,\n address spender,\n uint256 value\n ) internal {\n uint256 newAllowance = token.allowance(address(this), spender).sub(\n value,\n \"SafeERC20: decreased allowance below zero\"\n );\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n\n /**\n * @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).\n */\n function _callOptionalReturn(ERC20Interface token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n if (returndata.length > 0) {\n // Return data is optional\n // solhint-disable-next-line max-line-length\n require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n }\n }\n}\n"
+ },
+ "contracts/external/canonical-weth/WETH9.sol": {
+ "content": "// Copyright (C) 2015, 2016, 2017 Dapphub\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n// SPDX-License-Identifier: GNU GPL\npragma solidity 0.6.10;\n\n/**\n * @title WETH contract\n * @author Opyn Team\n * @dev A wrapper to use ETH as collateral\n */\ncontract WETH9 {\n string public name = \"Wrapped Ether\";\n string public symbol = \"WETH\";\n uint8 public decimals = 18;\n\n /// @notice emits an event when a sender approves WETH\n event Approval(address indexed src, address indexed guy, uint256 wad);\n /// @notice emits an event when a sender transfers WETH\n event Transfer(address indexed src, address indexed dst, uint256 wad);\n /// @notice emits an event when a sender deposits ETH into this contract\n event Deposit(address indexed dst, uint256 wad);\n /// @notice emits an event when a sender withdraws ETH from this contract\n event Withdrawal(address indexed src, uint256 wad);\n\n /// @notice mapping between address and WETH balance\n mapping(address => uint256) public balanceOf;\n /// @notice mapping between addresses and allowance amount\n mapping(address => mapping(address => uint256)) public allowance;\n\n /**\n * @notice fallback function that receives ETH\n * @dev will get called in a tx with ETH\n */\n receive() external payable {\n deposit();\n }\n\n /**\n * @notice wrap deposited ETH into WETH\n */\n function deposit() public payable {\n balanceOf[msg.sender] += msg.value;\n emit Deposit(msg.sender, msg.value);\n }\n\n /**\n * @notice withdraw ETH from contract\n * @dev Unwrap from WETH to ETH\n * @param _wad amount WETH to unwrap and withdraw\n */\n function withdraw(uint256 _wad) public {\n require(balanceOf[msg.sender] >= _wad, \"WETH9: insufficient sender balance\");\n balanceOf[msg.sender] -= _wad;\n msg.sender.transfer(_wad);\n emit Withdrawal(msg.sender, _wad);\n }\n\n /**\n * @notice get ETH total supply\n * @return total supply\n */\n function totalSupply() public view returns (uint256) {\n return address(this).balance;\n }\n\n /**\n * @notice approve transfer\n * @param _guy address to approve\n * @param _wad amount of WETH\n * @return True if tx succeeds, False if not\n */\n function approve(address _guy, uint256 _wad) public returns (bool) {\n allowance[msg.sender][_guy] = _wad;\n emit Approval(msg.sender, _guy, _wad);\n return true;\n }\n\n /**\n * @notice transfer WETH\n * @param _dst destination address\n * @param _wad amount to transfer\n * @return True if tx succeeds, False if not\n */\n function transfer(address _dst, uint256 _wad) public returns (bool) {\n return transferFrom(msg.sender, _dst, _wad);\n }\n\n /**\n * @notice transfer from address\n * @param _src source address\n * @param _dst destination address\n * @param _wad amount to transfer\n * @return True if tx succeeds, False if not\n */\n function transferFrom(\n address _src,\n address _dst,\n uint256 _wad\n ) public returns (bool) {\n require(balanceOf[_src] >= _wad, \"WETH9: insufficient source balance\");\n\n if (_src != msg.sender && allowance[_src][msg.sender] != uint256(-1)) {\n require(allowance[_src][msg.sender] >= _wad, \"WETH9: invalid allowance\");\n allowance[_src][msg.sender] -= _wad;\n }\n\n balanceOf[_src] -= _wad;\n balanceOf[_dst] += _wad;\n\n emit Transfer(_src, _dst, _wad);\n\n return true;\n }\n}\n"
+ },
+ "contracts/packages/oz/Address.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\npragma solidity ^0.6.2;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\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 *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\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 */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\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 *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\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].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @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 *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\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 *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return _functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n return _functionCallWithValue(target, data, value, errorMessage);\n }\n\n function _functionCallWithValue(\n address target,\n bytes memory data,\n uint256 weiValue,\n string memory errorMessage\n ) private returns (bytes memory) {\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{value: weiValue}(data);\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n"
+ },
+ "contracts/external/proxies/PayableProxyController.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {WETH9} from \"../canonical-weth/WETH9.sol\";\nimport {ReentrancyGuard} from \"../../packages/oz/ReentrancyGuard.sol\";\nimport {SafeERC20} from \"../../packages/oz/SafeERC20.sol\";\nimport {ERC20Interface} from \"../../interfaces/ERC20Interface.sol\";\nimport {Actions} from \"../../libs/Actions.sol\";\nimport {Controller} from \"../../core/Controller.sol\";\nimport {Address} from \"../../packages/oz/Address.sol\";\n\n/**\n * @title PayableProxyController\n * @author Opyn Team\n * @dev Contract for wrapping/unwrapping ETH before/after interacting with the Gamma Protocol\n */\ncontract PayableProxyController is ReentrancyGuard {\n using SafeERC20 for ERC20Interface;\n using Address for address payable;\n\n WETH9 public weth;\n Controller public controller;\n\n constructor(\n address _controller,\n address _marginPool,\n address payable _weth\n ) public {\n controller = Controller(_controller);\n weth = WETH9(_weth);\n ERC20Interface(address(weth)).safeApprove(_marginPool, uint256(-1));\n }\n\n /**\n * @notice fallback function which disallows ETH to be sent to this contract without data except when unwrapping WETH\n */\n fallback() external payable {\n require(msg.sender == address(weth), \"PayableProxyController: Cannot receive ETH\");\n }\n\n /**\n * @notice execute a number of actions\n * @dev a wrapper for the Controller operate function, to wrap WETH and the beginning and unwrap WETH at the end of the execution\n * @param _actions array of actions arguments\n * @param _sendEthTo address to send the remaining eth to\n */\n function operate(Actions.ActionArgs[] memory _actions, address payable _sendEthTo) external payable nonReentrant {\n // create WETH from ETH\n if (msg.value != 0) {\n weth.deposit{value: msg.value}();\n }\n\n // verify sender\n for (uint256 i = 0; i < _actions.length; i++) {\n Actions.ActionArgs memory action = _actions[i];\n\n // check that msg.sender is an owner or operator\n if (action.owner != address(0)) {\n require(\n (msg.sender == action.owner) || (controller.isOperator(action.owner, msg.sender)),\n \"PayableProxyController: cannot execute action \"\n );\n }\n\n if (action.actionType == Actions.ActionType.Call) {\n // our PayableProxy could ends up approving amount > total eth received.\n ERC20Interface(address(weth)).safeIncreaseAllowance(action.secondAddress, msg.value);\n }\n }\n\n controller.operate(_actions);\n\n // return all remaining WETH to the sendEthTo address as ETH\n uint256 remainingWeth = weth.balanceOf(address(this));\n if (remainingWeth != 0) {\n require(_sendEthTo != address(0), \"PayableProxyController: cannot send ETH to address zero\");\n\n weth.withdraw(remainingWeth);\n _sendEthTo.sendValue(remainingWeth);\n }\n }\n}\n"
+ },
+ "contracts/packages/oz/ReentrancyGuard.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\npragma solidity =0.6.10;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\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 *\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 *\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].\n */\ncontract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() internal {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @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 make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n"
+ },
+ "contracts/libs/Actions.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\nimport {MarginVault} from \"./MarginVault.sol\";\n\n/**\n * @title Actions\n * @author Opyn Team\n * @notice A library that provides a ActionArgs struct, sub types of Action structs, and functions to parse ActionArgs into specific Actions.\n * errorCode\n * A1 can only parse arguments for open vault actions\n * A2 cannot open vault for an invalid account\n * A3 cannot open vault with an invalid type\n * A4 can only parse arguments for mint actions\n * A5 cannot mint from an invalid account\n * A6 can only parse arguments for burn actions\n * A7 cannot burn from an invalid account\n * A8 can only parse arguments for deposit actions\n * A9 cannot deposit to an invalid account\n * A10 can only parse arguments for withdraw actions\n * A11 cannot withdraw from an invalid account\n * A12 cannot withdraw to an invalid account\n * A13 can only parse arguments for redeem actions\n * A14 cannot redeem to an invalid account\n * A15 can only parse arguments for settle vault actions\n * A16 cannot settle vault for an invalid account\n * A17 cannot withdraw payout to an invalid account\n * A18 can only parse arguments for liquidate action\n * A19 cannot liquidate vault for an invalid account owner\n * A20 cannot send collateral to an invalid account\n * A21 cannot parse liquidate action with no round id\n * A22 can only parse arguments for call actions\n * A23 target address cannot be address(0)\n */\nlibrary Actions {\n // possible actions that can be performed\n enum ActionType {\n OpenVault,\n MintShortOption,\n BurnShortOption,\n DepositLongOption,\n WithdrawLongOption,\n DepositCollateral,\n WithdrawCollateral,\n SettleVault,\n Redeem,\n Call,\n Liquidate\n }\n\n struct ActionArgs {\n // type of action that is being performed on the system\n ActionType actionType;\n // address of the account owner\n address owner;\n // address which we move assets from or to (depending on the action type)\n address secondAddress;\n // asset that is to be transfered\n address asset;\n // index of the vault that is to be modified (if any)\n uint256 vaultId;\n // amount of asset that is to be transfered\n uint256 amount;\n // each vault can hold multiple short / long / collateral assets but we are restricting the scope to only 1 of each in this version\n // in future versions this would be the index of the short / long / collateral asset that needs to be modified\n uint256 index;\n // any other data that needs to be passed in for arbitrary function calls\n bytes data;\n }\n\n struct MintArgs {\n // address of the account owner\n address owner;\n // index of the vault from which the asset will be minted\n uint256 vaultId;\n // address to which we transfer the minted oTokens\n address to;\n // oToken that is to be minted\n address otoken;\n // each vault can hold multiple short / long / collateral assets but we are restricting the scope to only 1 of each in this version\n // in future versions this would be the index of the short / long / collateral asset that needs to be modified\n uint256 index;\n // amount of oTokens that is to be minted\n uint256 amount;\n }\n\n struct BurnArgs {\n // address of the account owner\n address owner;\n // index of the vault from which the oToken will be burned\n uint256 vaultId;\n // address from which we transfer the oTokens\n address from;\n // oToken that is to be burned\n address otoken;\n // each vault can hold multiple short / long / collateral assets but we are restricting the scope to only 1 of each in this version\n // in future versions this would be the index of the short / long / collateral asset that needs to be modified\n uint256 index;\n // amount of oTokens that is to be burned\n uint256 amount;\n }\n\n struct OpenVaultArgs {\n // address of the account owner\n address owner;\n // vault id to create\n uint256 vaultId;\n // vault type, 0 for spread/max loss and 1 for naked margin vault\n uint256 vaultType;\n }\n\n struct DepositArgs {\n // address of the account owner\n address owner;\n // index of the vault to which the asset will be added\n uint256 vaultId;\n // address from which we transfer the asset\n address from;\n // asset that is to be deposited\n address asset;\n // each vault can hold multiple short / long / collateral assets but we are restricting the scope to only 1 of each in this version\n // in future versions this would be the index of the short / long / collateral asset that needs to be modified\n uint256 index;\n // amount of asset that is to be deposited\n uint256 amount;\n }\n\n struct RedeemArgs {\n // address to which we pay out the oToken proceeds\n address receiver;\n // oToken that is to be redeemed\n address otoken;\n // amount of oTokens that is to be redeemed\n uint256 amount;\n }\n\n struct WithdrawArgs {\n // address of the account owner\n address owner;\n // index of the vault from which the asset will be withdrawn\n uint256 vaultId;\n // address to which we transfer the asset\n address to;\n // asset that is to be withdrawn\n address asset;\n // each vault can hold multiple short / long / collateral assets but we are restricting the scope to only 1 of each in this version\n // in future versions this would be the index of the short / long / collateral asset that needs to be modified\n uint256 index;\n // amount of asset that is to be withdrawn\n uint256 amount;\n }\n\n struct SettleVaultArgs {\n // address of the account owner\n address owner;\n // index of the vault to which is to be settled\n uint256 vaultId;\n // address to which we transfer the remaining collateral\n address to;\n }\n\n struct LiquidateArgs {\n // address of the vault owner to liquidate\n address owner;\n // address of the liquidated collateral receiver\n address receiver;\n // vault id to liquidate\n uint256 vaultId;\n // amount of debt(otoken) to repay\n uint256 amount;\n // chainlink round id\n uint256 roundId;\n }\n\n struct CallArgs {\n // address of the callee contract\n address callee;\n // data field for external calls\n bytes data;\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for an open vault action\n * @param _args general action arguments structure\n * @return arguments for a open vault action\n */\n function _parseOpenVaultArgs(ActionArgs memory _args) internal pure returns (OpenVaultArgs memory) {\n require(_args.actionType == ActionType.OpenVault, \"A1\");\n require(_args.owner != address(0), \"A2\");\n\n // if not _args.data included, vault type will be 0 by default\n uint256 vaultType;\n\n if (_args.data.length == 32) {\n // decode vault type from _args.data\n vaultType = abi.decode(_args.data, (uint256));\n }\n\n // for now we only have 2 vault types\n require(vaultType < 2, \"A3\");\n\n return OpenVaultArgs({owner: _args.owner, vaultId: _args.vaultId, vaultType: vaultType});\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for a mint action\n * @param _args general action arguments structure\n * @return arguments for a mint action\n */\n function _parseMintArgs(ActionArgs memory _args) internal pure returns (MintArgs memory) {\n require(_args.actionType == ActionType.MintShortOption, \"A4\");\n require(_args.owner != address(0), \"A5\");\n\n return\n MintArgs({\n owner: _args.owner,\n vaultId: _args.vaultId,\n to: _args.secondAddress,\n otoken: _args.asset,\n index: _args.index,\n amount: _args.amount\n });\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for a burn action\n * @param _args general action arguments structure\n * @return arguments for a burn action\n */\n function _parseBurnArgs(ActionArgs memory _args) internal pure returns (BurnArgs memory) {\n require(_args.actionType == ActionType.BurnShortOption, \"A6\");\n require(_args.owner != address(0), \"A7\");\n\n return\n BurnArgs({\n owner: _args.owner,\n vaultId: _args.vaultId,\n from: _args.secondAddress,\n otoken: _args.asset,\n index: _args.index,\n amount: _args.amount\n });\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for a deposit action\n * @param _args general action arguments structure\n * @return arguments for a deposit action\n */\n function _parseDepositArgs(ActionArgs memory _args) internal pure returns (DepositArgs memory) {\n require(\n (_args.actionType == ActionType.DepositLongOption) || (_args.actionType == ActionType.DepositCollateral),\n \"A8\"\n );\n require(_args.owner != address(0), \"A9\");\n\n return\n DepositArgs({\n owner: _args.owner,\n vaultId: _args.vaultId,\n from: _args.secondAddress,\n asset: _args.asset,\n index: _args.index,\n amount: _args.amount\n });\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for a withdraw action\n * @param _args general action arguments structure\n * @return arguments for a withdraw action\n */\n function _parseWithdrawArgs(ActionArgs memory _args) internal pure returns (WithdrawArgs memory) {\n require(\n (_args.actionType == ActionType.WithdrawLongOption) || (_args.actionType == ActionType.WithdrawCollateral),\n \"A10\"\n );\n require(_args.owner != address(0), \"A11\");\n require(_args.secondAddress != address(0), \"A12\");\n\n return\n WithdrawArgs({\n owner: _args.owner,\n vaultId: _args.vaultId,\n to: _args.secondAddress,\n asset: _args.asset,\n index: _args.index,\n amount: _args.amount\n });\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for an redeem action\n * @param _args general action arguments structure\n * @return arguments for a redeem action\n */\n function _parseRedeemArgs(ActionArgs memory _args) internal pure returns (RedeemArgs memory) {\n require(_args.actionType == ActionType.Redeem, \"A13\");\n require(_args.secondAddress != address(0), \"A14\");\n\n return RedeemArgs({receiver: _args.secondAddress, otoken: _args.asset, amount: _args.amount});\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for a settle vault action\n * @param _args general action arguments structure\n * @return arguments for a settle vault action\n */\n function _parseSettleVaultArgs(ActionArgs memory _args) internal pure returns (SettleVaultArgs memory) {\n require(_args.actionType == ActionType.SettleVault, \"A15\");\n require(_args.owner != address(0), \"A16\");\n require(_args.secondAddress != address(0), \"A17\");\n\n return SettleVaultArgs({owner: _args.owner, vaultId: _args.vaultId, to: _args.secondAddress});\n }\n\n function _parseLiquidateArgs(ActionArgs memory _args) internal pure returns (LiquidateArgs memory) {\n require(_args.actionType == ActionType.Liquidate, \"A18\");\n require(_args.owner != address(0), \"A19\");\n require(_args.secondAddress != address(0), \"A20\");\n require(_args.data.length == 32, \"A21\");\n\n // decode chainlink round id from _args.data\n uint256 roundId = abi.decode(_args.data, (uint256));\n\n return\n LiquidateArgs({\n owner: _args.owner,\n receiver: _args.secondAddress,\n vaultId: _args.vaultId,\n amount: _args.amount,\n roundId: roundId\n });\n }\n\n /**\n * @notice parses the passed in action arguments to get the arguments for a call action\n * @param _args general action arguments structure\n * @return arguments for a call action\n */\n function _parseCallArgs(ActionArgs memory _args) internal pure returns (CallArgs memory) {\n require(_args.actionType == ActionType.Call, \"A22\");\n require(_args.secondAddress != address(0), \"A23\");\n\n return CallArgs({callee: _args.secondAddress, data: _args.data});\n }\n}\n"
+ },
+ "contracts/core/Controller.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {OwnableUpgradeSafe} from \"../packages/oz/upgradeability/OwnableUpgradeSafe.sol\";\nimport {ReentrancyGuardUpgradeSafe} from \"../packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol\";\nimport {Initializable} from \"../packages/oz/upgradeability/Initializable.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\nimport {MarginVault} from \"../libs/MarginVault.sol\";\nimport {Actions} from \"../libs/Actions.sol\";\nimport {AddressBookInterface} from \"../interfaces/AddressBookInterface.sol\";\nimport {OtokenInterface} from \"../interfaces/OtokenInterface.sol\";\nimport {MarginCalculatorInterface} from \"../interfaces/MarginCalculatorInterface.sol\";\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\nimport {WhitelistInterface} from \"../interfaces/WhitelistInterface.sol\";\nimport {MarginPoolInterface} from \"../interfaces/MarginPoolInterface.sol\";\nimport {CalleeInterface} from \"../interfaces/CalleeInterface.sol\";\n\n/**\n * Controller Error Codes\n * C1: sender is not full pauser\n * C2: sender is not partial pauser\n * C3: callee is not a whitelisted address\n * C4: system is partially paused\n * C5: system is fully paused\n * C6: msg.sender is not authorized to run action\n * C7: invalid addressbook address\n * C8: invalid owner address\n * C9: invalid input\n * C10: fullPauser cannot be set to address zero\n * C11: partialPauser cannot be set to address zero\n * C12: can not run actions for different owners\n * C13: can not run actions on different vaults\n * C14: invalid final vault state\n * C15: can not run actions on inexistent vault\n * C16: cannot deposit long otoken from this address\n * C17: otoken is not whitelisted to be used as collateral\n * C18: otoken used as collateral is already expired\n * C19: can not withdraw an expired otoken\n * C20: cannot deposit collateral from this address\n * C21: asset is not whitelisted to be used as collateral\n * C22: can not withdraw collateral from a vault with an expired short otoken\n * C23: otoken is not whitelisted to be minted\n * C24: can not mint expired otoken\n * C25: cannot burn from this address\n * C26: can not burn expired otoken\n * C27: otoken is not whitelisted to be redeemed\n * C28: can not redeem un-expired otoken\n * C29: asset prices not finalized yet\n * C30: can't settle vault with no otoken\n * C31: can not settle vault with un-expired otoken\n * C32: can not settle undercollateralized vault\n * C33: can not liquidate vault\n * C34: can not leave less than collateral dust\n * C35: invalid vault id\n * C36: cap amount should be greater than zero\n * C37: collateral exceed naked margin cap\n */\n\n/**\n * @title Controller\n * @author Opyn Team\n * @notice Contract that controls the Gamma Protocol and the interaction of all sub contracts\n */\ncontract Controller is Initializable, OwnableUpgradeSafe, ReentrancyGuardUpgradeSafe {\n using MarginVault for MarginVault.Vault;\n using SafeMath for uint256;\n\n AddressBookInterface public addressbook;\n WhitelistInterface public whitelist;\n OracleInterface public oracle;\n MarginCalculatorInterface public calculator;\n MarginPoolInterface public pool;\n\n ///@dev scale used in MarginCalculator\n uint256 internal constant BASE = 8;\n\n /// @notice address that has permission to partially pause the system, where system functionality is paused\n /// except redeem and settleVault\n address public partialPauser;\n\n /// @notice address that has permission to fully pause the system, where all system functionality is paused\n address public fullPauser;\n\n /// @notice True if all system functionality is paused other than redeem and settle vault\n bool public systemPartiallyPaused;\n\n /// @notice True if all system functionality is paused\n bool public systemFullyPaused;\n\n /// @notice True if a call action can only be executed to a whitelisted callee\n bool public callRestricted;\n\n /// @dev mapping between an owner address and the number of owner address vaults\n mapping(address => uint256) internal accountVaultCounter;\n /// @dev mapping between an owner address and a specific vault using a vault id\n mapping(address => mapping(uint256 => MarginVault.Vault)) internal vaults;\n /// @dev mapping between an account owner and their approved or unapproved account operators\n mapping(address => mapping(address => bool)) internal operators;\n\n /******************************************************************** V2.0.0 storage upgrade ******************************************************/\n\n /// @dev mapping to map vault by each vault type, naked margin vault should be set to 1, spread/max loss vault should be set to 0\n mapping(address => mapping(uint256 => uint256)) internal vaultType;\n /// @dev mapping to store the timestamp at which the vault was last updated, will be updated in every action that changes the vault state or when calling sync()\n mapping(address => mapping(uint256 => uint256)) internal vaultLatestUpdate;\n\n /// @dev mapping to store cap amount for naked margin vault per options collateral asset (scaled by collateral asset decimals)\n mapping(address => uint256) internal nakedCap;\n\n /// @dev mapping to store amount of naked margin vaults in pool\n mapping(address => uint256) internal nakedPoolBalance;\n\n /// @notice emits an event when an account operator is updated for a specific account owner\n event AccountOperatorUpdated(address indexed accountOwner, address indexed operator, bool isSet);\n /// @notice emits an event when a new vault is opened\n event VaultOpened(address indexed accountOwner, uint256 vaultId, uint256 indexed vaultType);\n /// @notice emits an event when a long oToken is deposited into a vault\n event LongOtokenDeposited(\n address indexed otoken,\n address indexed accountOwner,\n address indexed from,\n uint256 vaultId,\n uint256 amount\n );\n /// @notice emits an event when a long oToken is withdrawn from a vault\n event LongOtokenWithdrawed(\n address indexed otoken,\n address indexed AccountOwner,\n address indexed to,\n uint256 vaultId,\n uint256 amount\n );\n /// @notice emits an event when a collateral asset is deposited into a vault\n event CollateralAssetDeposited(\n address indexed asset,\n address indexed accountOwner,\n address indexed from,\n uint256 vaultId,\n uint256 amount\n );\n /// @notice emits an event when a collateral asset is withdrawn from a vault\n event CollateralAssetWithdrawed(\n address indexed asset,\n address indexed AccountOwner,\n address indexed to,\n uint256 vaultId,\n uint256 amount\n );\n /// @notice emits an event when a short oToken is minted from a vault\n event ShortOtokenMinted(\n address indexed otoken,\n address indexed AccountOwner,\n address indexed to,\n uint256 vaultId,\n uint256 amount\n );\n /// @notice emits an event when a short oToken is burned\n event ShortOtokenBurned(\n address indexed otoken,\n address indexed AccountOwner,\n address indexed from,\n uint256 vaultId,\n uint256 amount\n );\n /// @notice emits an event when an oToken is redeemed\n event Redeem(\n address indexed otoken,\n address indexed redeemer,\n address indexed receiver,\n address collateralAsset,\n uint256 otokenBurned,\n uint256 payout\n );\n /// @notice emits an event when a vault is settled\n event VaultSettled(\n address indexed accountOwner,\n address indexed oTokenAddress,\n address to,\n uint256 payout,\n uint256 vaultId,\n uint256 indexed vaultType\n );\n /// @notice emits an event when a vault is liquidated\n event VaultLiquidated(\n address indexed liquidator,\n address indexed receiver,\n address indexed vaultOwner,\n uint256 auctionPrice,\n uint256 auctionStartingRound,\n uint256 collateralPayout,\n uint256 debtAmount,\n uint256 vaultId\n );\n /// @notice emits an event when a call action is executed\n event CallExecuted(address indexed from, address indexed to, bytes data);\n /// @notice emits an event when the fullPauser address changes\n event FullPauserUpdated(address indexed oldFullPauser, address indexed newFullPauser);\n /// @notice emits an event when the partialPauser address changes\n event PartialPauserUpdated(address indexed oldPartialPauser, address indexed newPartialPauser);\n /// @notice emits an event when the system partial paused status changes\n event SystemPartiallyPaused(bool isPaused);\n /// @notice emits an event when the system fully paused status changes\n event SystemFullyPaused(bool isPaused);\n /// @notice emits an event when the call action restriction changes\n event CallRestricted(bool isRestricted);\n /// @notice emits an event when a donation transfer executed\n event Donated(address indexed donator, address indexed asset, uint256 amount);\n /// @notice emits an event when naked cap is updated\n event NakedCapUpdated(address indexed collateral, uint256 cap);\n\n /**\n * @notice modifier to check if the system is not partially paused, where only redeem and settleVault is allowed\n */\n modifier notPartiallyPaused() {\n _isNotPartiallyPaused();\n\n _;\n }\n\n /**\n * @notice modifier to check if the system is not fully paused, where no functionality is allowed\n */\n modifier notFullyPaused() {\n _isNotFullyPaused();\n\n _;\n }\n\n /**\n * @notice modifier to check if sender is the fullPauser address\n */\n modifier onlyFullPauser() {\n require(msg.sender == fullPauser, \"C1\");\n\n _;\n }\n\n /**\n * @notice modifier to check if the sender is the partialPauser address\n */\n modifier onlyPartialPauser() {\n require(msg.sender == partialPauser, \"C2\");\n\n _;\n }\n\n /**\n * @notice modifier to check if the sender is the account owner or an approved account operator\n * @param _sender sender address\n * @param _accountOwner account owner address\n */\n modifier onlyAuthorized(address _sender, address _accountOwner) {\n _isAuthorized(_sender, _accountOwner);\n\n _;\n }\n\n /**\n * @notice modifier to check if the called address is a whitelisted callee address\n * @param _callee called address\n */\n modifier onlyWhitelistedCallee(address _callee) {\n if (callRestricted) {\n require(_isCalleeWhitelisted(_callee), \"C3\");\n }\n\n _;\n }\n\n /**\n * @dev check if the system is not in a partiallyPaused state\n */\n function _isNotPartiallyPaused() internal view {\n require(!systemPartiallyPaused, \"C4\");\n }\n\n /**\n * @dev check if the system is not in an fullyPaused state\n */\n function _isNotFullyPaused() internal view {\n require(!systemFullyPaused, \"C5\");\n }\n\n /**\n * @dev check if the sender is an authorized operator\n * @param _sender msg.sender\n * @param _accountOwner owner of a vault\n */\n function _isAuthorized(address _sender, address _accountOwner) internal view {\n require((_sender == _accountOwner) || (operators[_accountOwner][_sender]), \"C6\");\n }\n\n /**\n * @notice initalize the deployed contract\n * @param _addressBook addressbook module\n * @param _owner account owner address\n */\n function initialize(address _addressBook, address _owner) external initializer {\n require(_addressBook != address(0), \"C7\");\n require(_owner != address(0), \"C8\");\n\n __Ownable_init(_owner);\n __ReentrancyGuard_init_unchained();\n\n addressbook = AddressBookInterface(_addressBook);\n _refreshConfigInternal();\n\n callRestricted = true;\n }\n\n /**\n * @notice send asset amount to margin pool\n * @dev use donate() instead of direct transfer() to store the balance in assetBalance\n * @param _asset asset address\n * @param _amount amount to donate to pool\n */\n function donate(address _asset, uint256 _amount) external {\n pool.transferToPool(_asset, msg.sender, _amount);\n\n emit Donated(msg.sender, _asset, _amount);\n }\n\n /**\n * @notice allows the partialPauser to toggle the systemPartiallyPaused variable and partially pause or partially unpause the system\n * @dev can only be called by the partialPauser\n * @param _partiallyPaused new boolean value to set systemPartiallyPaused to\n */\n function setSystemPartiallyPaused(bool _partiallyPaused) external onlyPartialPauser {\n require(systemPartiallyPaused != _partiallyPaused, \"C9\");\n\n systemPartiallyPaused = _partiallyPaused;\n\n emit SystemPartiallyPaused(systemPartiallyPaused);\n }\n\n /**\n * @notice allows the fullPauser to toggle the systemFullyPaused variable and fully pause or fully unpause the system\n * @dev can only be called by the fullyPauser\n * @param _fullyPaused new boolean value to set systemFullyPaused to\n */\n function setSystemFullyPaused(bool _fullyPaused) external onlyFullPauser {\n require(systemFullyPaused != _fullyPaused, \"C9\");\n\n systemFullyPaused = _fullyPaused;\n\n emit SystemFullyPaused(systemFullyPaused);\n }\n\n /**\n * @notice allows the owner to set the fullPauser address\n * @dev can only be called by the owner\n * @param _fullPauser new fullPauser address\n */\n function setFullPauser(address _fullPauser) external onlyOwner {\n require(_fullPauser != address(0), \"C10\");\n require(fullPauser != _fullPauser, \"C9\");\n emit FullPauserUpdated(fullPauser, _fullPauser);\n fullPauser = _fullPauser;\n }\n\n /**\n * @notice allows the owner to set the partialPauser address\n * @dev can only be called by the owner\n * @param _partialPauser new partialPauser address\n */\n function setPartialPauser(address _partialPauser) external onlyOwner {\n require(_partialPauser != address(0), \"C11\");\n require(partialPauser != _partialPauser, \"C9\");\n emit PartialPauserUpdated(partialPauser, _partialPauser);\n partialPauser = _partialPauser;\n }\n\n /**\n * @notice allows the owner to toggle the restriction on whitelisted call actions and only allow whitelisted\n * call addresses or allow any arbitrary call addresses\n * @dev can only be called by the owner\n * @param _isRestricted new call restriction state\n */\n function setCallRestriction(bool _isRestricted) external onlyOwner {\n require(callRestricted != _isRestricted, \"C9\");\n\n callRestricted = _isRestricted;\n\n emit CallRestricted(callRestricted);\n }\n\n /**\n * @notice allows a user to give or revoke privileges to an operator which can act on their behalf on their vaults\n * @dev can only be updated by the vault owner\n * @param _operator operator that the sender wants to give privileges to or revoke them from\n * @param _isOperator new boolean value that expresses if the sender is giving or revoking privileges for _operator\n */\n function setOperator(address _operator, bool _isOperator) external {\n require(operators[msg.sender][_operator] != _isOperator, \"C9\");\n\n operators[msg.sender][_operator] = _isOperator;\n\n emit AccountOperatorUpdated(msg.sender, _operator, _isOperator);\n }\n\n /**\n * @dev updates the configuration of the controller. can only be called by the owner\n */\n function refreshConfiguration() external onlyOwner {\n _refreshConfigInternal();\n }\n\n /**\n * @notice set cap amount for collateral asset used in naked margin\n * @dev can only be called by owner\n * @param _collateral collateral asset address\n * @param _cap cap amount, should be scaled by collateral asset decimals\n */\n function setNakedCap(address _collateral, uint256 _cap) external onlyOwner {\n require(_cap > 0, \"C36\");\n\n nakedCap[_collateral] = _cap;\n\n emit NakedCapUpdated(_collateral, _cap);\n }\n\n /**\n * @notice execute a number of actions on specific vaults\n * @dev can only be called when the system is not fully paused\n * @param _actions array of actions arguments\n */\n function operate(Actions.ActionArgs[] memory _actions) external nonReentrant notFullyPaused {\n (bool vaultUpdated, address vaultOwner, uint256 vaultId) = _runActions(_actions);\n if (vaultUpdated) {\n _verifyFinalState(vaultOwner, vaultId);\n vaultLatestUpdate[vaultOwner][vaultId] = now;\n }\n }\n\n /**\n * @notice sync vault latest update timestamp\n * @dev anyone can update the latest time the vault was touched by calling this function\n * vaultLatestUpdate will sync if the vault is well collateralized\n * @param _owner vault owner address\n * @param _vaultId vault id\n */\n function sync(address _owner, uint256 _vaultId) external nonReentrant notFullyPaused {\n _verifyFinalState(_owner, _vaultId);\n vaultLatestUpdate[_owner][_vaultId] = now;\n }\n\n /**\n * @notice check if a specific address is an operator for an owner account\n * @param _owner account owner address\n * @param _operator account operator address\n * @return True if the _operator is an approved operator for the _owner account\n */\n function isOperator(address _owner, address _operator) external view returns (bool) {\n return operators[_owner][_operator];\n }\n\n /**\n * @notice returns the current controller configuration\n * @return whitelist, the address of the whitelist module\n * @return oracle, the address of the oracle module\n * @return calculator, the address of the calculator module\n * @return pool, the address of the pool module\n */\n function getConfiguration()\n external\n view\n returns (\n address,\n address,\n address,\n address\n )\n {\n return (address(whitelist), address(oracle), address(calculator), address(pool));\n }\n\n /**\n * @notice return a vault's proceeds pre or post expiry, the amount of collateral that can be removed from a vault\n * @param _owner account owner of the vault\n * @param _vaultId vaultId to return balances for\n * @return amount of collateral that can be taken out\n */\n function getProceed(address _owner, uint256 _vaultId) external view returns (uint256) {\n (MarginVault.Vault memory vault, uint256 typeVault, ) = getVaultWithDetails(_owner, _vaultId);\n\n (uint256 netValue, bool isExcess) = calculator.getExcessCollateral(vault, typeVault);\n\n if (!isExcess) return 0;\n\n return netValue;\n }\n\n /**\n * @notice check if a vault is liquidatable in a specific round id\n * @param _owner vault owner address\n * @param _vaultId vault id to check\n * @param _roundId chainlink round id to check vault status at\n * @return isUnderCollat, true if vault is undercollateralized, the price of 1 repaid otoken and the otoken collateral dust amount\n */\n function isLiquidatable(\n address _owner,\n uint256 _vaultId,\n uint256 _roundId\n )\n external\n view\n returns (\n bool,\n uint256,\n uint256\n )\n {\n (, bool isUnderCollat, uint256 price, uint256 dust) = _isLiquidatable(_owner, _vaultId, _roundId);\n return (isUnderCollat, price, dust);\n }\n\n /**\n * @notice get an oToken's payout/cash value after expiry, in the collateral asset\n * @param _otoken oToken address\n * @param _amount amount of the oToken to calculate the payout for, always represented in 1e8\n * @return amount of collateral to pay out\n */\n function getPayout(address _otoken, uint256 _amount) public view returns (uint256) {\n return calculator.getExpiredPayoutRate(_otoken).mul(_amount).div(10**BASE);\n }\n\n /**\n * @dev return if an expired oToken is ready to be settled, only true when price for underlying,\n * strike and collateral assets at this specific expiry is available in our Oracle module\n * @param _otoken oToken\n */\n function isSettlementAllowed(address _otoken) external view returns (bool) {\n (address underlying, address strike, address collateral, uint256 expiry) = _getOtokenDetails(_otoken);\n return _canSettleAssets(underlying, strike, collateral, expiry);\n }\n\n /**\n * @dev return if underlying, strike, collateral are all allowed to be settled\n * @param _underlying oToken underlying asset\n * @param _strike oToken strike asset\n * @param _collateral oToken collateral asset\n * @param _expiry otoken expiry timestamp\n * @return True if the oToken has expired AND all oracle prices at the expiry timestamp have been finalized, False if not\n */\n function canSettleAssets(\n address _underlying,\n address _strike,\n address _collateral,\n uint256 _expiry\n ) external view returns (bool) {\n return _canSettleAssets(_underlying, _strike, _collateral, _expiry);\n }\n\n /**\n * @notice get the number of vaults for a specified account owner\n * @param _accountOwner account owner address\n * @return number of vaults\n */\n function getAccountVaultCounter(address _accountOwner) external view returns (uint256) {\n return accountVaultCounter[_accountOwner];\n }\n\n /**\n * @notice check if an oToken has expired\n * @param _otoken oToken address\n * @return True if the otoken has expired, False if not\n */\n function hasExpired(address _otoken) external view returns (bool) {\n return now >= OtokenInterface(_otoken).expiryTimestamp();\n }\n\n /**\n * @notice return a specific vault\n * @param _owner account owner\n * @param _vaultId vault id of vault to return\n * @return Vault struct that corresponds to the _vaultId of _owner\n */\n function getVault(address _owner, uint256 _vaultId) external view returns (MarginVault.Vault memory) {\n return (vaults[_owner][_vaultId]);\n }\n\n /**\n * @notice return a specific vault\n * @param _owner account owner\n * @param _vaultId vault id of vault to return\n * @return Vault struct that corresponds to the _vaultId of _owner, vault type and the latest timestamp when the vault was updated\n */\n function getVaultWithDetails(address _owner, uint256 _vaultId)\n public\n view\n returns (\n MarginVault.Vault memory,\n uint256,\n uint256\n )\n {\n return (vaults[_owner][_vaultId], vaultType[_owner][_vaultId], vaultLatestUpdate[_owner][_vaultId]);\n }\n\n /**\n * @notice get cap amount for collateral asset\n * @param _asset collateral asset address\n * @return cap amount\n */\n function getNakedCap(address _asset) external view returns (uint256) {\n return nakedCap[_asset];\n }\n\n /**\n * @notice get amount of collateral deposited in all naked margin vaults\n * @param _asset collateral asset address\n * @return naked pool balance\n */\n function getNakedPoolBalance(address _asset) external view returns (uint256) {\n return nakedPoolBalance[_asset];\n }\n\n /**\n * @notice execute a variety of actions\n * @dev for each action in the action array, execute the corresponding action, only one vault can be modified\n * for all actions except SettleVault, Redeem, and Call\n * @param _actions array of type Actions.ActionArgs[], which expresses which actions the user wants to execute\n * @return vaultUpdated, indicates if a vault has changed\n * @return owner, the vault owner if a vault has changed\n * @return vaultId, the vault Id if a vault has changed\n */\n function _runActions(Actions.ActionArgs[] memory _actions)\n internal\n returns (\n bool,\n address,\n uint256\n )\n {\n address vaultOwner;\n uint256 vaultId;\n bool vaultUpdated;\n\n for (uint256 i = 0; i < _actions.length; i++) {\n Actions.ActionArgs memory action = _actions[i];\n Actions.ActionType actionType = action.actionType;\n\n // actions except Settle, Redeem, Liquidate and Call are \"Vault-updating actinos\"\n // only allow update 1 vault in each operate call\n if (\n (actionType != Actions.ActionType.SettleVault) &&\n (actionType != Actions.ActionType.Redeem) &&\n (actionType != Actions.ActionType.Liquidate) &&\n (actionType != Actions.ActionType.Call)\n ) {\n // check if this action is manipulating the same vault as all other actions, if a vault has already been updated\n if (vaultUpdated) {\n require(vaultOwner == action.owner, \"C12\");\n require(vaultId == action.vaultId, \"C13\");\n }\n vaultUpdated = true;\n vaultId = action.vaultId;\n vaultOwner = action.owner;\n }\n\n if (actionType == Actions.ActionType.OpenVault) {\n _openVault(Actions._parseOpenVaultArgs(action));\n } else if (actionType == Actions.ActionType.DepositLongOption) {\n _depositLong(Actions._parseDepositArgs(action));\n } else if (actionType == Actions.ActionType.WithdrawLongOption) {\n _withdrawLong(Actions._parseWithdrawArgs(action));\n } else if (actionType == Actions.ActionType.DepositCollateral) {\n _depositCollateral(Actions._parseDepositArgs(action));\n } else if (actionType == Actions.ActionType.WithdrawCollateral) {\n _withdrawCollateral(Actions._parseWithdrawArgs(action));\n } else if (actionType == Actions.ActionType.MintShortOption) {\n _mintOtoken(Actions._parseMintArgs(action));\n } else if (actionType == Actions.ActionType.BurnShortOption) {\n _burnOtoken(Actions._parseBurnArgs(action));\n } else if (actionType == Actions.ActionType.Redeem) {\n _redeem(Actions._parseRedeemArgs(action));\n } else if (actionType == Actions.ActionType.SettleVault) {\n _settleVault(Actions._parseSettleVaultArgs(action));\n } else if (actionType == Actions.ActionType.Liquidate) {\n _liquidate(Actions._parseLiquidateArgs(action));\n } else if (actionType == Actions.ActionType.Call) {\n _call(Actions._parseCallArgs(action));\n }\n }\n\n return (vaultUpdated, vaultOwner, vaultId);\n }\n\n /**\n * @notice verify the vault final state after executing all actions\n * @param _owner account owner address\n * @param _vaultId vault id of the final vault\n */\n function _verifyFinalState(address _owner, uint256 _vaultId) internal view {\n (MarginVault.Vault memory vault, uint256 typeVault, ) = getVaultWithDetails(_owner, _vaultId);\n (, bool isValidVault) = calculator.getExcessCollateral(vault, typeVault);\n\n require(isValidVault, \"C14\");\n }\n\n /**\n * @notice open a new vault inside an account\n * @dev only the account owner or operator can open a vault, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args OpenVaultArgs structure\n */\n function _openVault(Actions.OpenVaultArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n uint256 vaultId = accountVaultCounter[_args.owner].add(1);\n\n require(_args.vaultId == vaultId, \"C15\");\n\n // store new vault\n accountVaultCounter[_args.owner] = vaultId;\n vaultType[_args.owner][vaultId] = _args.vaultType;\n\n emit VaultOpened(_args.owner, vaultId, _args.vaultType);\n }\n\n /**\n * @notice deposit a long oToken into a vault\n * @dev only the account owner or operator can deposit a long oToken, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args DepositArgs structure\n */\n function _depositLong(Actions.DepositArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n // only allow vault owner or vault operator to deposit long otoken\n require((_args.from == msg.sender) || (_args.from == _args.owner), \"C16\");\n\n require(whitelist.isWhitelistedOtoken(_args.asset), \"C17\");\n\n OtokenInterface otoken = OtokenInterface(_args.asset);\n\n require(now < otoken.expiryTimestamp(), \"C18\");\n\n vaults[_args.owner][_args.vaultId].addLong(_args.asset, _args.amount, _args.index);\n\n pool.transferToPool(_args.asset, _args.from, _args.amount);\n\n emit LongOtokenDeposited(_args.asset, _args.owner, _args.from, _args.vaultId, _args.amount);\n }\n\n /**\n * @notice withdraw a long oToken from a vault\n * @dev only the account owner or operator can withdraw a long oToken, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args WithdrawArgs structure\n */\n function _withdrawLong(Actions.WithdrawArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n\n OtokenInterface otoken = OtokenInterface(_args.asset);\n\n require(now < otoken.expiryTimestamp(), \"C19\");\n\n vaults[_args.owner][_args.vaultId].removeLong(_args.asset, _args.amount, _args.index);\n\n pool.transferToUser(_args.asset, _args.to, _args.amount);\n\n emit LongOtokenWithdrawed(_args.asset, _args.owner, _args.to, _args.vaultId, _args.amount);\n }\n\n /**\n * @notice deposit a collateral asset into a vault\n * @dev only the account owner or operator can deposit collateral, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args DepositArgs structure\n */\n function _depositCollateral(Actions.DepositArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n // only allow vault owner or vault operator to deposit collateral\n require((_args.from == msg.sender) || (_args.from == _args.owner), \"C20\");\n\n require(whitelist.isWhitelistedCollateral(_args.asset), \"C21\");\n\n (, uint256 typeVault, ) = getVaultWithDetails(_args.owner, _args.vaultId);\n\n if (typeVault == 1) {\n nakedPoolBalance[_args.asset] = nakedPoolBalance[_args.asset].add(_args.amount);\n\n require(nakedPoolBalance[_args.asset] <= nakedCap[_args.asset], \"C37\");\n }\n\n vaults[_args.owner][_args.vaultId].addCollateral(_args.asset, _args.amount, _args.index);\n\n pool.transferToPool(_args.asset, _args.from, _args.amount);\n\n emit CollateralAssetDeposited(_args.asset, _args.owner, _args.from, _args.vaultId, _args.amount);\n }\n\n /**\n * @notice withdraw a collateral asset from a vault\n * @dev only the account owner or operator can withdraw collateral, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args WithdrawArgs structure\n */\n function _withdrawCollateral(Actions.WithdrawArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n\n (MarginVault.Vault memory vault, uint256 typeVault, ) = getVaultWithDetails(_args.owner, _args.vaultId);\n\n if (_isNotEmpty(vault.shortOtokens)) {\n OtokenInterface otoken = OtokenInterface(vault.shortOtokens[0]);\n\n require(now < otoken.expiryTimestamp(), \"C22\");\n }\n\n if (typeVault == 1) {\n nakedPoolBalance[_args.asset] = nakedPoolBalance[_args.asset].sub(_args.amount);\n }\n\n vaults[_args.owner][_args.vaultId].removeCollateral(_args.asset, _args.amount, _args.index);\n\n pool.transferToUser(_args.asset, _args.to, _args.amount);\n\n emit CollateralAssetWithdrawed(_args.asset, _args.owner, _args.to, _args.vaultId, _args.amount);\n }\n\n /**\n * @notice mint short oTokens from a vault which creates an obligation that is recorded in the vault\n * @dev only the account owner or operator can mint an oToken, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args MintArgs structure\n */\n function _mintOtoken(Actions.MintArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n require(whitelist.isWhitelistedOtoken(_args.otoken), \"C23\");\n\n OtokenInterface otoken = OtokenInterface(_args.otoken);\n\n require(now < otoken.expiryTimestamp(), \"C24\");\n\n vaults[_args.owner][_args.vaultId].addShort(_args.otoken, _args.amount, _args.index);\n\n otoken.mintOtoken(_args.to, _args.amount);\n\n emit ShortOtokenMinted(_args.otoken, _args.owner, _args.to, _args.vaultId, _args.amount);\n }\n\n /**\n * @notice burn oTokens to reduce or remove the minted oToken obligation recorded in a vault\n * @dev only the account owner or operator can burn an oToken, cannot be called when system is partiallyPaused or fullyPaused\n * @param _args MintArgs structure\n */\n function _burnOtoken(Actions.BurnArgs memory _args)\n internal\n notPartiallyPaused\n onlyAuthorized(msg.sender, _args.owner)\n {\n // check that vault id is valid for this vault owner\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n // only allow vault owner or vault operator to burn otoken\n require((_args.from == msg.sender) || (_args.from == _args.owner), \"C25\");\n\n OtokenInterface otoken = OtokenInterface(_args.otoken);\n\n // do not allow burning expired otoken\n require(now < otoken.expiryTimestamp(), \"C26\");\n\n // remove otoken from vault\n vaults[_args.owner][_args.vaultId].removeShort(_args.otoken, _args.amount, _args.index);\n\n // burn otoken\n otoken.burnOtoken(_args.from, _args.amount);\n\n emit ShortOtokenBurned(_args.otoken, _args.owner, _args.from, _args.vaultId, _args.amount);\n }\n\n /**\n * @notice redeem an oToken after expiry, receiving the payout of the oToken in the collateral asset\n * @dev cannot be called when system is fullyPaused\n * @param _args RedeemArgs structure\n */\n function _redeem(Actions.RedeemArgs memory _args) internal {\n OtokenInterface otoken = OtokenInterface(_args.otoken);\n\n // check that otoken to redeem is whitelisted\n require(whitelist.isWhitelistedOtoken(_args.otoken), \"C27\");\n\n (address collateral, address underlying, address strike, uint256 expiry) = _getOtokenDetails(address(otoken));\n\n // only allow redeeming expired otoken\n require(now >= expiry, \"C28\");\n\n require(_canSettleAssets(underlying, strike, collateral, expiry), \"C29\");\n\n uint256 payout = getPayout(_args.otoken, _args.amount);\n\n otoken.burnOtoken(msg.sender, _args.amount);\n\n pool.transferToUser(collateral, _args.receiver, payout);\n\n emit Redeem(_args.otoken, msg.sender, _args.receiver, collateral, _args.amount, payout);\n }\n\n /**\n * @notice settle a vault after expiry, removing the net proceeds/collateral after both long and short oToken payouts have settled\n * @dev deletes a vault of vaultId after net proceeds/collateral is removed, cannot be called when system is fullyPaused\n * @param _args SettleVaultArgs structure\n */\n function _settleVault(Actions.SettleVaultArgs memory _args) internal onlyAuthorized(msg.sender, _args.owner) {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n\n (MarginVault.Vault memory vault, uint256 typeVault, ) = getVaultWithDetails(_args.owner, _args.vaultId);\n\n OtokenInterface otoken;\n\n // new scope to avoid stack too deep error\n // check if there is short or long otoken in vault\n // do not allow settling vault that have no short or long otoken\n // if there is a long otoken, burn it\n // store otoken address outside of this scope\n {\n bool hasShort = _isNotEmpty(vault.shortOtokens);\n bool hasLong = _isNotEmpty(vault.longOtokens);\n\n require(hasShort || hasLong, \"C30\");\n\n otoken = hasShort ? OtokenInterface(vault.shortOtokens[0]) : OtokenInterface(vault.longOtokens[0]);\n\n if (hasLong) {\n OtokenInterface longOtoken = OtokenInterface(vault.longOtokens[0]);\n\n longOtoken.burnOtoken(address(pool), vault.longAmounts[0]);\n }\n }\n\n (address collateral, address underlying, address strike, uint256 expiry) = _getOtokenDetails(address(otoken));\n\n // do not allow settling vault with un-expired otoken\n require(now >= expiry, \"C31\");\n require(_canSettleAssets(underlying, strike, collateral, expiry), \"C29\");\n\n (uint256 payout, bool isValidVault) = calculator.getExcessCollateral(vault, typeVault);\n\n // require that vault is valid (has excess collateral) before settling\n // to avoid allowing settling undercollateralized naked margin vault\n require(isValidVault, \"C32\");\n\n delete vaults[_args.owner][_args.vaultId];\n\n if (typeVault == 1) {\n nakedPoolBalance[collateral] = nakedPoolBalance[collateral].sub(payout);\n }\n\n pool.transferToUser(collateral, _args.to, payout);\n\n uint256 vaultId = _args.vaultId;\n address payoutRecipient = _args.to;\n\n emit VaultSettled(_args.owner, address(otoken), payoutRecipient, payout, vaultId, typeVault);\n }\n\n /**\n * @notice liquidate naked margin vault\n * @dev can liquidate different vaults id in the same operate() call\n * @param _args liquidation action arguments struct\n */\n function _liquidate(Actions.LiquidateArgs memory _args) internal notPartiallyPaused {\n require(_checkVaultId(_args.owner, _args.vaultId), \"C35\");\n\n // check if vault is undercollateralized\n // the price is the amount of collateral asset to pay per 1 repaid debt(otoken)\n // collateralDust is the minimum amount of collateral that can be left in the vault when a partial liquidation occurs\n (MarginVault.Vault memory vault, bool isUnderCollat, uint256 price, uint256 collateralDust) = _isLiquidatable(\n _args.owner,\n _args.vaultId,\n _args.roundId\n );\n\n require(isUnderCollat, \"C33\");\n\n // amount of collateral to offer to liquidator\n uint256 collateralToSell = _args.amount.mul(price).div(1e8);\n\n // if vault is partially liquidated (amount of short otoken is still greater than zero)\n // make sure remaining collateral amount is greater than dust amount\n if (vault.shortAmounts[0].sub(_args.amount) > 0) {\n require(vault.collateralAmounts[0].sub(collateralToSell) >= collateralDust, \"C34\");\n }\n\n // burn short otoken from liquidator address, index of short otoken hardcoded at 0\n // this should always work, if vault have no short otoken, it will not reach this step\n OtokenInterface(vault.shortOtokens[0]).burnOtoken(msg.sender, _args.amount);\n\n // decrease amount of collateral in liquidated vault, index of collateral to decrease is hardcoded at 0\n vaults[_args.owner][_args.vaultId].removeCollateral(vault.collateralAssets[0], collateralToSell, 0);\n\n // decrease amount of short otoken in liquidated vault, index of short otoken to decrease is hardcoded at 0\n vaults[_args.owner][_args.vaultId].removeShort(vault.shortOtokens[0], _args.amount, 0);\n\n // decrease internal naked margin collateral amount\n nakedPoolBalance[vault.collateralAssets[0]] = nakedPoolBalance[vault.collateralAssets[0]].sub(collateralToSell);\n\n pool.transferToUser(vault.collateralAssets[0], _args.receiver, collateralToSell);\n\n emit VaultLiquidated(\n msg.sender,\n _args.receiver,\n _args.owner,\n price,\n _args.roundId,\n collateralToSell,\n _args.amount,\n _args.vaultId\n );\n }\n\n /**\n * @notice execute arbitrary calls\n * @dev cannot be called when system is partiallyPaused or fullyPaused\n * @param _args Call action\n */\n function _call(Actions.CallArgs memory _args) internal notPartiallyPaused onlyWhitelistedCallee(_args.callee) {\n CalleeInterface(_args.callee).callFunction(msg.sender, _args.data);\n\n emit CallExecuted(msg.sender, _args.callee, _args.data);\n }\n\n /**\n * @notice check if a vault id is valid for a given account owner address\n * @param _accountOwner account owner address\n * @param _vaultId vault id to check\n * @return True if the _vaultId is valid, False if not\n */\n function _checkVaultId(address _accountOwner, uint256 _vaultId) internal view returns (bool) {\n return ((_vaultId > 0) && (_vaultId <= accountVaultCounter[_accountOwner]));\n }\n\n function _isNotEmpty(address[] memory _array) internal pure returns (bool) {\n return (_array.length > 0) && (_array[0] != address(0));\n }\n\n /**\n * @notice return if a callee address is whitelisted or not\n * @param _callee callee address\n * @return True if callee address is whitelisted, False if not\n */\n function _isCalleeWhitelisted(address _callee) internal view returns (bool) {\n return whitelist.isWhitelistedCallee(_callee);\n }\n\n /**\n * @notice check if a vault is liquidatable in a specific round id\n * @param _owner vault owner address\n * @param _vaultId vault id to check\n * @param _roundId chainlink round id to check vault status at\n * @return vault struct, isLiquidatable, true if vault is undercollateralized, the price of 1 repaid otoken and the otoken collateral dust amount\n */\n function _isLiquidatable(\n address _owner,\n uint256 _vaultId,\n uint256 _roundId\n )\n internal\n view\n returns (\n MarginVault.Vault memory,\n bool,\n uint256,\n uint256\n )\n {\n (MarginVault.Vault memory vault, uint256 typeVault, uint256 latestUpdateTimestamp) = getVaultWithDetails(\n _owner,\n _vaultId\n );\n (bool isUnderCollat, uint256 price, uint256 collateralDust) = calculator.isLiquidatable(\n vault,\n typeVault,\n latestUpdateTimestamp,\n _roundId\n );\n\n return (vault, isUnderCollat, price, collateralDust);\n }\n\n /**\n * @dev get otoken detail, from both otoken versions\n */\n function _getOtokenDetails(address _otoken)\n internal\n view\n returns (\n address,\n address,\n address,\n uint256\n )\n {\n OtokenInterface otoken = OtokenInterface(_otoken);\n try otoken.getOtokenDetails() returns (\n address collateral,\n address underlying,\n address strike,\n uint256,\n uint256 expiry,\n bool\n ) {\n return (collateral, underlying, strike, expiry);\n } catch {\n return (otoken.collateralAsset(), otoken.underlyingAsset(), otoken.strikeAsset(), otoken.expiryTimestamp());\n }\n }\n\n /**\n * @dev return if an expired oToken is ready to be settled, only true when price for underlying,\n * strike and collateral assets at this specific expiry is available in our Oracle module\n * @return True if the oToken has expired AND all oracle prices at the expiry timestamp have been finalized, False if not\n */\n function _canSettleAssets(\n address _underlying,\n address _strike,\n address _collateral,\n uint256 _expiry\n ) internal view returns (bool) {\n return\n oracle.isDisputePeriodOver(_underlying, _expiry) &&\n oracle.isDisputePeriodOver(_strike, _expiry) &&\n oracle.isDisputePeriodOver(_collateral, _expiry);\n }\n\n /**\n * @dev updates the internal configuration of the controller\n */\n function _refreshConfigInternal() internal {\n whitelist = WhitelistInterface(addressbook.getWhitelist());\n oracle = OracleInterface(addressbook.getOracle());\n calculator = MarginCalculatorInterface(addressbook.getMarginCalculator());\n pool = MarginPoolInterface(addressbook.getMarginPool());\n }\n}\n"
+ },
+ "contracts/libs/MarginVault.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * MarginVault Error Codes\n * V1: invalid short otoken amount\n * V2: invalid short otoken index\n * V3: short otoken address mismatch\n * V4: invalid long otoken amount\n * V5: invalid long otoken index\n * V6: long otoken address mismatch\n * V7: invalid collateral amount\n * V8: invalid collateral token index\n * V9: collateral token address mismatch\n */\n\n/**\n * @title MarginVault\n * @author Opyn Team\n * @notice A library that provides the Controller with a Vault struct and the functions that manipulate vaults.\n * Vaults describe discrete position combinations of long options, short options, and collateral assets that a user can have.\n */\nlibrary MarginVault {\n using SafeMath for uint256;\n\n // vault is a struct of 6 arrays that describe a position a user has, a user can have multiple vaults.\n struct Vault {\n // addresses of oTokens a user has shorted (i.e. written) against this vault\n address[] shortOtokens;\n // addresses of oTokens a user has bought and deposited in this vault\n // user can be long oTokens without opening a vault (e.g. by buying on a DEX)\n // generally, long oTokens will be 'deposited' in vaults to act as collateral in order to write oTokens against (i.e. in spreads)\n address[] longOtokens;\n // addresses of other ERC-20s a user has deposited as collateral in this vault\n address[] collateralAssets;\n // quantity of oTokens minted/written for each oToken address in shortOtokens\n uint256[] shortAmounts;\n // quantity of oTokens owned and held in the vault for each oToken address in longOtokens\n uint256[] longAmounts;\n // quantity of ERC-20 deposited as collateral in the vault for each ERC-20 address in collateralAssets\n uint256[] collateralAmounts;\n }\n\n /**\n * @dev increase the short oToken balance in a vault when a new oToken is minted\n * @param _vault vault to add or increase the short position in\n * @param _shortOtoken address of the _shortOtoken being minted from the user's vault\n * @param _amount number of _shortOtoken being minted from the user's vault\n * @param _index index of _shortOtoken in the user's vault.shortOtokens array\n */\n function addShort(\n Vault storage _vault,\n address _shortOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n require(_amount > 0, \"V1\");\n\n // valid indexes in any array are between 0 and array.length - 1.\n // if adding an amount to an preexisting short oToken, check that _index is in the range of 0->length-1\n if ((_index == _vault.shortOtokens.length) && (_index == _vault.shortAmounts.length)) {\n _vault.shortOtokens.push(_shortOtoken);\n _vault.shortAmounts.push(_amount);\n } else {\n require((_index < _vault.shortOtokens.length) && (_index < _vault.shortAmounts.length), \"V2\");\n address existingShort = _vault.shortOtokens[_index];\n require((existingShort == _shortOtoken) || (existingShort == address(0)), \"V3\");\n\n _vault.shortAmounts[_index] = _vault.shortAmounts[_index].add(_amount);\n _vault.shortOtokens[_index] = _shortOtoken;\n }\n }\n\n /**\n * @dev decrease the short oToken balance in a vault when an oToken is burned\n * @param _vault vault to decrease short position in\n * @param _shortOtoken address of the _shortOtoken being reduced in the user's vault\n * @param _amount number of _shortOtoken being reduced in the user's vault\n * @param _index index of _shortOtoken in the user's vault.shortOtokens array\n */\n function removeShort(\n Vault storage _vault,\n address _shortOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n // check that the removed short oToken exists in the vault at the specified index\n require(_index < _vault.shortOtokens.length, \"V2\");\n require(_vault.shortOtokens[_index] == _shortOtoken, \"V3\");\n\n uint256 newShortAmount = _vault.shortAmounts[_index].sub(_amount);\n\n if (newShortAmount == 0) {\n delete _vault.shortOtokens[_index];\n }\n _vault.shortAmounts[_index] = newShortAmount;\n }\n\n /**\n * @dev increase the long oToken balance in a vault when an oToken is deposited\n * @param _vault vault to add a long position to\n * @param _longOtoken address of the _longOtoken being added to the user's vault\n * @param _amount number of _longOtoken the protocol is adding to the user's vault\n * @param _index index of _longOtoken in the user's vault.longOtokens array\n */\n function addLong(\n Vault storage _vault,\n address _longOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n require(_amount > 0, \"V4\");\n\n // valid indexes in any array are between 0 and array.length - 1.\n // if adding an amount to an preexisting short oToken, check that _index is in the range of 0->length-1\n if ((_index == _vault.longOtokens.length) && (_index == _vault.longAmounts.length)) {\n _vault.longOtokens.push(_longOtoken);\n _vault.longAmounts.push(_amount);\n } else {\n require((_index < _vault.longOtokens.length) && (_index < _vault.longAmounts.length), \"V5\");\n address existingLong = _vault.longOtokens[_index];\n require((existingLong == _longOtoken) || (existingLong == address(0)), \"V6\");\n\n _vault.longAmounts[_index] = _vault.longAmounts[_index].add(_amount);\n _vault.longOtokens[_index] = _longOtoken;\n }\n }\n\n /**\n * @dev decrease the long oToken balance in a vault when an oToken is withdrawn\n * @param _vault vault to remove a long position from\n * @param _longOtoken address of the _longOtoken being removed from the user's vault\n * @param _amount number of _longOtoken the protocol is removing from the user's vault\n * @param _index index of _longOtoken in the user's vault.longOtokens array\n */\n function removeLong(\n Vault storage _vault,\n address _longOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n // check that the removed long oToken exists in the vault at the specified index\n require(_index < _vault.longOtokens.length, \"V5\");\n require(_vault.longOtokens[_index] == _longOtoken, \"V6\");\n\n uint256 newLongAmount = _vault.longAmounts[_index].sub(_amount);\n\n if (newLongAmount == 0) {\n delete _vault.longOtokens[_index];\n }\n _vault.longAmounts[_index] = newLongAmount;\n }\n\n /**\n * @dev increase the collateral balance in a vault\n * @param _vault vault to add collateral to\n * @param _collateralAsset address of the _collateralAsset being added to the user's vault\n * @param _amount number of _collateralAsset being added to the user's vault\n * @param _index index of _collateralAsset in the user's vault.collateralAssets array\n */\n function addCollateral(\n Vault storage _vault,\n address _collateralAsset,\n uint256 _amount,\n uint256 _index\n ) external {\n require(_amount > 0, \"V7\");\n\n // valid indexes in any array are between 0 and array.length - 1.\n // if adding an amount to an preexisting short oToken, check that _index is in the range of 0->length-1\n if ((_index == _vault.collateralAssets.length) && (_index == _vault.collateralAmounts.length)) {\n _vault.collateralAssets.push(_collateralAsset);\n _vault.collateralAmounts.push(_amount);\n } else {\n require((_index < _vault.collateralAssets.length) && (_index < _vault.collateralAmounts.length), \"V8\");\n address existingCollateral = _vault.collateralAssets[_index];\n require((existingCollateral == _collateralAsset) || (existingCollateral == address(0)), \"V9\");\n\n _vault.collateralAmounts[_index] = _vault.collateralAmounts[_index].add(_amount);\n _vault.collateralAssets[_index] = _collateralAsset;\n }\n }\n\n /**\n * @dev decrease the collateral balance in a vault\n * @param _vault vault to remove collateral from\n * @param _collateralAsset address of the _collateralAsset being removed from the user's vault\n * @param _amount number of _collateralAsset being removed from the user's vault\n * @param _index index of _collateralAsset in the user's vault.collateralAssets array\n */\n function removeCollateral(\n Vault storage _vault,\n address _collateralAsset,\n uint256 _amount,\n uint256 _index\n ) external {\n // check that the removed collateral exists in the vault at the specified index\n require(_index < _vault.collateralAssets.length, \"V8\");\n require(_vault.collateralAssets[_index] == _collateralAsset, \"V9\");\n\n uint256 newCollateralAmount = _vault.collateralAmounts[_index].sub(_amount);\n\n if (newCollateralAmount == 0) {\n delete _vault.collateralAssets[_index];\n }\n _vault.collateralAmounts[_index] = newCollateralAmount;\n }\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity ^0.6.0;\n\nimport \"./GSN/ContextUpgradeable.sol\";\nimport \"./Initializable.sol\";\n\n/**\n * @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 *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\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.\n */\ncontract OwnableUpgradeSafe is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n\n function __Ownable_init(address _sender) internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained(_sender);\n }\n\n function __Ownable_init_unchained(address _sender) internal initializer {\n _owner = _sender;\n emit OwnershipTransferred(address(0), _sender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(_owner == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @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 *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n\n uint256[49] private __gap;\n}\n"
+ },
+ "contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts-upgradeable v3.0.0\n\npragma solidity ^0.6.0;\n\nimport \"./Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\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 *\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 *\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].\n */\ncontract ReentrancyGuardUpgradeSafe is Initializable {\n bool private _notEntered;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n // Storing an initial non-zero value makes deployment a bit more\n // expensive, but in exchange the refund on every call to nonReentrant\n // will be lower in amount. Since refunds are capped to a percetange of\n // the total transaction's gas, it is best to keep them low in cases\n // like this one, to increase the likelihood of the full refund coming\n // into effect.\n _notEntered = true;\n }\n\n /**\n * @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 make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_notEntered, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _notEntered = false;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _notEntered = true;\n }\n\n uint256[49] private __gap;\n}\n"
+ },
+ "contracts/interfaces/OtokenInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ninterface OtokenInterface {\n function addressBook() external view returns (address);\n\n function underlyingAsset() external view returns (address);\n\n function strikeAsset() external view returns (address);\n\n function collateralAsset() external view returns (address);\n\n function strikePrice() external view returns (uint256);\n\n function expiryTimestamp() external view returns (uint256);\n\n function isPut() external view returns (bool);\n\n function init(\n address _addressBook,\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiry,\n bool _isPut\n ) external;\n\n function getOtokenDetails()\n external\n view\n returns (\n address,\n address,\n address,\n uint256,\n uint256,\n bool\n );\n\n function mintOtoken(address account, uint256 amount) external;\n\n function burnOtoken(address account, uint256 amount) external;\n}\n"
+ },
+ "contracts/interfaces/MarginCalculatorInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {MarginVault} from \"../libs/MarginVault.sol\";\n\ninterface MarginCalculatorInterface {\n function addressBook() external view returns (address);\n\n function getExpiredPayoutRate(address _otoken) external view returns (uint256);\n\n function getExcessCollateral(MarginVault.Vault calldata _vault, uint256 _vaultType)\n external\n view\n returns (uint256 netValue, bool isExcess);\n\n function isLiquidatable(\n MarginVault.Vault memory _vault,\n uint256 _vaultType,\n uint256 _vaultLatestUpdate,\n uint256 _roundId\n )\n external\n view\n returns (\n bool,\n uint256,\n uint256\n );\n}\n"
+ },
+ "contracts/interfaces/WhitelistInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ninterface WhitelistInterface {\n /* View functions */\n\n function addressBook() external view returns (address);\n\n function isWhitelistedProduct(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external view returns (bool);\n\n function isWhitelistedCollateral(address _collateral) external view returns (bool);\n\n function isWhitelistedOtoken(address _otoken) external view returns (bool);\n\n function isWhitelistedCallee(address _callee) external view returns (bool);\n\n /* Admin / factory only functions */\n function whitelistProduct(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external;\n\n function blacklistProduct(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external;\n\n function whitelistCollateral(address _collateral) external;\n\n function blacklistCollateral(address _collateral) external;\n\n function whitelistOtoken(address _otoken) external;\n\n function blacklistOtoken(address _otoken) external;\n\n function whitelistCallee(address _callee) external;\n\n function blacklistCallee(address _callee) external;\n}\n"
+ },
+ "contracts/interfaces/MarginPoolInterface.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\ninterface MarginPoolInterface {\n /* Getters */\n function addressBook() external view returns (address);\n\n function farmer() external view returns (address);\n\n function getStoredBalance(address _asset) external view returns (uint256);\n\n /* Admin-only functions */\n function setFarmer(address _farmer) external;\n\n function farm(\n address _asset,\n address _receiver,\n uint256 _amount\n ) external;\n\n /* Controller-only functions */\n function transferToPool(\n address _asset,\n address _user,\n uint256 _amount\n ) external;\n\n function transferToUser(\n address _asset,\n address _user,\n uint256 _amount\n ) external;\n\n function batchTransferToPool(\n address[] calldata _asset,\n address[] calldata _user,\n uint256[] calldata _amount\n ) external;\n\n function batchTransferToUser(\n address[] calldata _asset,\n address[] calldata _user,\n uint256[] calldata _amount\n ) external;\n}\n"
+ },
+ "contracts/tests/CalleeAllowanceTester.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {CalleeInterface} from \"../interfaces/CalleeInterface.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeERC20} from \"../packages/oz/SafeERC20.sol\";\n\n/**\n * @author Opyn Team\n * @title CalleeAllowanceTester\n * @notice contract test if we can successfully pull weth from the payable proxy\n */\ncontract CalleeAllowanceTester is CalleeInterface {\n using SafeERC20 for ERC20Interface;\n ERC20Interface public weth;\n\n constructor(address _weth) public {\n weth = ERC20Interface(_weth);\n }\n\n // tset pull token\n function callFunction(address payable, bytes memory _data) external override {\n (address from, uint256 amount) = abi.decode(_data, (address, uint256));\n\n weth.safeTransferFrom(from, address(this), amount);\n }\n}\n"
+ },
+ "contracts/mocks/MockController.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n// import \"../packages/oz/upgradeability/VersionedInitializable.sol\";\nimport \"../interfaces/OtokenInterface.sol\";\nimport \"../interfaces/CalleeInterface.sol\";\nimport \"../interfaces/ERC20Interface.sol\";\n\n/**\n * @author Opyn Team\n * @notice Upgradeable Controller that can mock minting and burning calls from controller.\n */\ncontract MockController {\n /// @notice addressbook address\n address public addressBook;\n address public owner;\n\n /**\n * @dev this function is invoked by the proxy contract when this contract is added to the\n * AddressBook.\n * @param _addressBook the address of the AddressBook\n **/\n function initialize(address _addressBook, address _owner) external {\n addressBook = _addressBook;\n owner = _owner;\n }\n\n /**\n * @dev this function is used to test if controller can mint otokens\n */\n function testMintOtoken(\n address _otoken,\n address _account,\n uint256 _amount\n ) external {\n OtokenInterface(_otoken).mintOtoken(_account, _amount);\n }\n\n /**\n * @dev this function is used to test if controller can burn otokens\n */\n function testBurnOtoken(\n address _otoken,\n address _account,\n uint256 _amount\n ) external {\n OtokenInterface(_otoken).burnOtoken(_account, _amount);\n }\n\n /**\n * @dev this function is used to test if controller can be the only msg.sender to the 0xcallee\n */\n function test0xCallee(address _callee, bytes memory _data) external {\n CalleeInterface(_callee).callFunction(msg.sender, _data);\n }\n}\n"
+ },
+ "contracts/core/OtokenFactory.sol": {
+ "content": "pragma solidity =0.6.10;\n\nimport {OtokenSpawner} from \"./OtokenSpawner.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\nimport {AddressBookInterface} from \"../interfaces/AddressBookInterface.sol\";\nimport {OtokenInterface} from \"../interfaces/OtokenInterface.sol\";\nimport {WhitelistInterface} from \"../interfaces/WhitelistInterface.sol\";\n\n/**\n * SPDX-License-Identifier: UNLICENSED\n * @title A factory to create Opyn oTokens\n * @author Opyn Team\n * @notice Create new oTokens and keep track of all created tokens\n * @dev Calculate contract address before each creation with CREATE2\n * and deploy eip-1167 minimal proxies for oToken logic contract\n */\ncontract OtokenFactory is OtokenSpawner {\n using SafeMath for uint256;\n /// @notice Opyn AddressBook contract that records the address of the Whitelist module and the Otoken impl address. */\n address public addressBook;\n\n /// @notice array of all created otokens */\n address[] public otokens;\n\n /// @dev mapping from parameters hash to its deployed address\n mapping(bytes32 => address) private idToAddress;\n\n /// @dev max expiry that BokkyPooBahsDateTimeLibrary can handle. (2345/12/31)\n uint256 private constant MAX_EXPIRY = 11865398400;\n\n constructor(address _addressBook) public {\n addressBook = _addressBook;\n }\n\n /// @notice emitted when the factory creates a new Option\n event OtokenCreated(\n address tokenAddress,\n address creator,\n address indexed underlying,\n address indexed strike,\n address indexed collateral,\n uint256 strikePrice,\n uint256 expiry,\n bool isPut\n );\n\n /**\n * @notice create new oTokens\n * @dev deploy an eip-1167 minimal proxy with CREATE2 and register it to the whitelist module\n * @param _underlyingAsset asset that the option references\n * @param _strikeAsset asset that the strike price is denominated in\n * @param _collateralAsset asset that is held as collateral against short/written options\n * @param _strikePrice strike price with decimals = 18\n * @param _expiry expiration timestamp as a unix timestamp\n * @param _isPut True if a put option, False if a call option\n * @return newOtoken address of the newly created option\n */\n function createOtoken(\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiry,\n bool _isPut\n ) external returns (address) {\n require(_expiry > now, \"OtokenFactory: Can't create expired option\");\n require(_expiry < MAX_EXPIRY, \"OtokenFactory: Can't create option with expiry > 2345/12/31\");\n // 8 hours = 3600 * 8 = 28800 seconds\n require(_expiry.sub(28800).mod(86400) == 0, \"OtokenFactory: Option has to expire 08:00 UTC\");\n bytes32 id = _getOptionId(_underlyingAsset, _strikeAsset, _collateralAsset, _strikePrice, _expiry, _isPut);\n require(idToAddress[id] == address(0), \"OtokenFactory: Option already created\");\n\n address whitelist = AddressBookInterface(addressBook).getWhitelist();\n require(\n WhitelistInterface(whitelist).isWhitelistedProduct(\n _underlyingAsset,\n _strikeAsset,\n _collateralAsset,\n _isPut\n ),\n \"OtokenFactory: Unsupported Product\"\n );\n\n require(!_isPut || _strikePrice > 0, \"OtokenFactory: Can't create a $0 strike put option\");\n\n address otokenImpl = AddressBookInterface(addressBook).getOtokenImpl();\n\n bytes memory initializationCalldata = abi.encodeWithSelector(\n OtokenInterface(otokenImpl).init.selector,\n addressBook,\n _underlyingAsset,\n _strikeAsset,\n _collateralAsset,\n _strikePrice,\n _expiry,\n _isPut\n );\n\n address newOtoken = _spawn(otokenImpl, initializationCalldata);\n\n idToAddress[id] = newOtoken;\n otokens.push(newOtoken);\n WhitelistInterface(whitelist).whitelistOtoken(newOtoken);\n\n emit OtokenCreated(\n newOtoken,\n msg.sender,\n _underlyingAsset,\n _strikeAsset,\n _collateralAsset,\n _strikePrice,\n _expiry,\n _isPut\n );\n\n return newOtoken;\n }\n\n /**\n * @notice get the total oTokens created by the factory\n * @return length of the oTokens array\n */\n function getOtokensLength() external view returns (uint256) {\n return otokens.length;\n }\n\n /**\n * @notice get the oToken address for an already created oToken, if no oToken has been created with these parameters, it will return address(0)\n * @param _underlyingAsset asset that the option references\n * @param _strikeAsset asset that the strike price is denominated in\n * @param _collateralAsset asset that is held as collateral against short/written options\n * @param _strikePrice strike price with decimals = 18\n * @param _expiry expiration timestamp as a unix timestamp\n * @param _isPut True if a put option, False if a call option\n * @return the address of target otoken.\n */\n function getOtoken(\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiry,\n bool _isPut\n ) external view returns (address) {\n bytes32 id = _getOptionId(_underlyingAsset, _strikeAsset, _collateralAsset, _strikePrice, _expiry, _isPut);\n return idToAddress[id];\n }\n\n /**\n * @notice get the address at which a new oToken with these parameters would be deployed\n * @dev return the exact address that will be deployed at with _computeAddress\n * @param _underlyingAsset asset that the option references\n * @param _strikeAsset asset that the strike price is denominated in\n * @param _collateralAsset asset that is held as collateral against short/written options\n * @param _strikePrice strike price with decimals = 18\n * @param _expiry expiration timestamp as a unix timestamp\n * @param _isPut True if a put option, False if a call option\n * @return targetAddress the address this oToken would be deployed at\n */\n function getTargetOtokenAddress(\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiry,\n bool _isPut\n ) external view returns (address) {\n address otokenImpl = AddressBookInterface(addressBook).getOtokenImpl();\n\n bytes memory initializationCalldata = abi.encodeWithSelector(\n OtokenInterface(otokenImpl).init.selector,\n addressBook,\n _underlyingAsset,\n _strikeAsset,\n _collateralAsset,\n _strikePrice,\n _expiry,\n _isPut\n );\n return _computeAddress(otokenImpl, initializationCalldata);\n }\n\n /**\n * @dev hash oToken parameters and return a unique option id\n * @param _underlyingAsset asset that the option references\n * @param _strikeAsset asset that the strike price is denominated in\n * @param _collateralAsset asset that is held as collateral against short/written options\n * @param _strikePrice strike price with decimals = 18\n * @param _expiry expiration timestamp as a unix timestamp\n * @param _isPut True if a put option, False if a call option\n * @return id the unique id of an oToken\n */\n function _getOptionId(\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiry,\n bool _isPut\n ) internal pure returns (bytes32) {\n return\n keccak256(\n abi.encodePacked(_underlyingAsset, _strikeAsset, _collateralAsset, _strikePrice, _expiry, _isPut)\n );\n }\n}\n"
+ },
+ "contracts/core/OtokenSpawner.sol": {
+ "content": "/* SPDX-License-Identifier: UNLICENSED */\n\npragma solidity =0.6.10;\n\nimport {Spawn} from \"../packages/Spawn.sol\";\nimport {Create2} from \"../packages/oz/Create2.sol\";\n\n/**\n * @title OtokenSpawner\n * @author Opyn Team\n * @notice This contract spawns and initializes eip-1167 minimal proxies that\n * point to existing logic contracts.\n * @notice This contract was modified from Spawner.sol\n * https://github.com/0age/Spawner/blob/master/contracts/Spawner.sol to fit into OtokenFactory\n */\ncontract OtokenSpawner {\n // fixed salt value because we will only deploy an oToken with the same init value once\n bytes32 private constant SALT = bytes32(0);\n\n /**\n * @notice internal function for spawning an eip-1167 minimal proxy using `CREATE2`\n * @param logicContract address of the logic contract\n * @param initializationCalldata calldata that will be supplied to the `DELEGATECALL`\n * from the spawned contract to the logic contract during contract creation\n * @return spawnedContract the address of the newly-spawned contract\n */\n function _spawn(address logicContract, bytes memory initializationCalldata) internal returns (address) {\n // place the creation code and constructor args of the contract to spawn in memory\n bytes memory initCode = abi.encodePacked(\n type(Spawn).creationCode,\n abi.encode(logicContract, initializationCalldata)\n );\n\n // spawn the contract using `CREATE2`\n return Create2.deploy(0, SALT, initCode);\n }\n\n /**\n * @notice internal view function for finding the address of the standard\n * eip-1167 minimal proxy created using `CREATE2` with a given logic contract\n * and initialization calldata payload\n * @param logicContract address of the logic contract\n * @param initializationCalldata calldata that will be supplied to the `DELEGATECALL`\n * from the spawned contract to the logic contract during contract creation\n * @return target address of the next spawned minimal proxy contract with the\n * given parameters.\n */\n function _computeAddress(address logicContract, bytes memory initializationCalldata)\n internal\n view\n returns (address target)\n {\n // place the creation code and constructor args of the contract to spawn in memory\n bytes memory initCode = abi.encodePacked(\n type(Spawn).creationCode,\n abi.encode(logicContract, initializationCalldata)\n );\n // get target address using the constructed initialization code\n bytes32 initCodeHash = keccak256(initCode);\n\n target = Create2.computeAddress(SALT, initCodeHash);\n }\n}\n"
+ },
+ "contracts/packages/Spawn.sol": {
+ "content": "/* solhint-disable avoid-low-level-calls, indent, no-inline-assembly */\n/* This contract is copied from Spawner package: https://github.com/0age/Spawner */\npragma solidity =0.6.10;\n\n/**\n * @title Spawn\n * @author 0age\n * @notice This contract provides creation code that is used by Spawner in order\n * to initialize and deploy eip-1167 minimal proxies for a given logic contract.\n * SPDX-License-Identifier: MIT\n */\n// version: https://github.com/0age/Spawner/blob/1b342afda0c1ec47e6a2d65828a6ca50f0a442fe/contracts/Spawner.sol\ncontract Spawn {\n constructor(address logicContract, bytes memory initializationCalldata) public payable {\n // delegatecall into the logic contract to perform initialization.\n (bool ok, ) = logicContract.delegatecall(initializationCalldata);\n if (!ok) {\n // pass along failure message from delegatecall and revert.\n assembly {\n returndatacopy(0, 0, returndatasize())\n revert(0, returndatasize())\n }\n }\n\n // place eip-1167 runtime code in memory.\n bytes memory runtimeCode = abi.encodePacked(\n bytes10(0x363d3d373d3d3d363d73),\n logicContract,\n bytes15(0x5af43d82803e903d91602b57fd5bf3)\n );\n\n // return eip-1167 code to write it to spawned contract runtime.\n assembly {\n return(add(0x20, runtimeCode), 45) // eip-1167 runtime code, length\n }\n }\n}\n"
+ },
+ "contracts/packages/oz/Create2.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n/* solhint-disable */\n\npragma solidity =0.6.10;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address) {\n address addr;\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n // solhint-disable-next-line no-inline-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n return addr;\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address) {\n bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));\n return address(uint256(_data));\n }\n}\n"
+ },
+ "contracts/pricers/WstethPricer.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.6.10;\n\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\nimport {OpynPricerInterface} from \"../interfaces/OpynPricerInterface.sol\";\nimport {WSTETHInterface} from \"../interfaces/WSTETHInterface.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * Error Codes\n * W1: cannot deploy pricer, wstETH address cannot be 0\n * W2: cannot deploy pricer, underlying address cannot be 0\n * W3: cannot deploy pricer, oracle address cannot be 0\n * W4: cannot retrieve price, underlying price is 0\n * W5: cannot set expiry price in oracle, underlying price is 0 and has not been set\n * W6: cannot retrieve historical prices, getHistoricalPrice has been deprecated\n */\n\n/**\n * @title WstethPricer\n * @author Opyn Team\n * @notice A Pricer contract for a wstETH token\n */\ncontract WstethPricer is OpynPricerInterface {\n using SafeMath for uint256;\n\n /// @notice opyn oracle address\n OracleInterface public oracle;\n\n /// @notice wstETH token\n WSTETHInterface public wstETH;\n\n /// @notice underlying asset (WETH)\n address public underlying;\n\n /**\n * @param _wstETH wstETH\n * @param _underlying underlying asset for wstETH\n * @param _oracle Opyn Oracle contract address\n */\n constructor(\n address _wstETH,\n address _underlying,\n address _oracle\n ) public {\n require(_wstETH != address(0), \"W1\");\n require(_underlying != address(0), \"W2\");\n require(_oracle != address(0), \"W3\");\n\n wstETH = WSTETHInterface(_wstETH);\n oracle = OracleInterface(_oracle);\n underlying = _underlying;\n }\n\n /**\n * @notice get the live price for the asset\n * @dev overrides the getPrice function in OpynPricerInterface\n * @return price of 1 wstETH in USD, scaled by 1e8\n */\n function getPrice() external view override returns (uint256) {\n uint256 underlyingPrice = oracle.getPrice(underlying);\n require(underlyingPrice > 0, \"W4\");\n return _underlyingPriceToWstethPrice(underlyingPrice);\n }\n\n /**\n * @notice set the expiry price in the oracle\n * @dev requires that the underlying price has been set before setting a wstETH price\n * @param _expiryTimestamp expiry to set a price for\n */\n function setExpiryPriceInOracle(uint256 _expiryTimestamp) external {\n (uint256 underlyingPriceExpiry, ) = oracle.getExpiryPrice(underlying, _expiryTimestamp);\n require(underlyingPriceExpiry > 0, \"W5\");\n uint256 wstEthPrice = _underlyingPriceToWstethPrice(underlyingPriceExpiry);\n oracle.setExpiryPrice(address(wstETH), _expiryTimestamp, wstEthPrice);\n }\n\n /**\n * @dev convert underlying price to wstETH price with the wstETH to stETH exchange rate (1 stETH ≈ 1 ETH)\n * @param _underlyingPrice price of 1 underlying token (ie 1e18 WETH) in USD, scaled by 1e8\n * @return price of 1 wstETH in USD, scaled by 1e8\n */\n function _underlyingPriceToWstethPrice(uint256 _underlyingPrice) private view returns (uint256) {\n uint256 stEthPerWsteth = wstETH.stEthPerToken();\n\n return stEthPerWsteth.mul(_underlyingPrice).div(1e18);\n }\n\n function getHistoricalPrice(uint80) external view override returns (uint256, uint256) {\n revert(\"W6\");\n }\n}\n"
+ },
+ "contracts/interfaces/WSTETHInterface.sol": {
+ "content": "// SPDX-License-Identifier: MIT\npragma solidity =0.6.10;\n\ninterface WSTETHInterface {\n function name() external view returns (string memory);\n\n function symbol() external view returns (string memory);\n\n function decimals() external view returns (uint8);\n\n function stEthPerToken() external view returns (uint256);\n}\n"
+ },
+ "contracts/pricers/ChainlinkPricer.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {AggregatorInterface} from \"../interfaces/AggregatorInterface.sol\";\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\nimport {OpynPricerInterface} from \"../interfaces/OpynPricerInterface.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * @notice A Pricer contract for one asset as reported by Chainlink\n */\ncontract ChainLinkPricer is OpynPricerInterface {\n using SafeMath for uint256;\n\n /// @dev base decimals\n uint256 internal constant BASE = 8;\n\n /// @notice chainlink response decimals\n uint256 public aggregatorDecimals;\n\n /// @notice the opyn oracle address\n OracleInterface public oracle;\n /// @notice the aggregator for an asset\n AggregatorInterface public aggregator;\n\n /// @notice asset that this pricer will a get price for\n address public asset;\n /// @notice bot address that is allowed to call setExpiryPriceInOracle\n address public bot;\n\n /**\n * @param _bot priveleged address that can call setExpiryPriceInOracle\n * @param _asset asset that this pricer will get a price for\n * @param _aggregator Chainlink aggregator contract for the asset\n * @param _oracle Opyn Oracle address\n */\n constructor(\n address _bot,\n address _asset,\n address _aggregator,\n address _oracle\n ) public {\n require(_bot != address(0), \"ChainLinkPricer: Cannot set 0 address as bot\");\n require(_oracle != address(0), \"ChainLinkPricer: Cannot set 0 address as oracle\");\n require(_aggregator != address(0), \"ChainLinkPricer: Cannot set 0 address as aggregator\");\n\n bot = _bot;\n oracle = OracleInterface(_oracle);\n aggregator = AggregatorInterface(_aggregator);\n asset = _asset;\n\n aggregatorDecimals = uint256(aggregator.decimals());\n }\n\n /**\n * @notice modifier to check if sender address is equal to bot address\n */\n modifier onlyBot() {\n require(msg.sender == bot, \"ChainLinkPricer: unauthorized sender\");\n\n _;\n }\n\n /**\n * @notice set the expiry price in the oracle, can only be called by Bot address\n * @dev a roundId must be provided to confirm price validity, which is the first Chainlink price provided after the expiryTimestamp\n * @param _expiryTimestamp expiry to set a price for\n * @param _roundId the first roundId after expiryTimestamp\n */\n function setExpiryPriceInOracle(uint256 _expiryTimestamp, uint80 _roundId) external onlyBot {\n (, int256 price, , uint256 roundTimestamp, ) = aggregator.getRoundData(_roundId);\n\n require(_expiryTimestamp <= roundTimestamp, \"ChainLinkPricer: invalid roundId\");\n\n oracle.setExpiryPrice(asset, _expiryTimestamp, uint256(price));\n }\n\n /**\n * @notice get the live price for the asset\n * @dev overides the getPrice function in OpynPricerInterface\n * @return price of the asset in USD, scaled by 1e8\n */\n function getPrice() external view override returns (uint256) {\n (, int256 answer, , , ) = aggregator.latestRoundData();\n require(answer > 0, \"ChainLinkPricer: price is lower than 0\");\n // chainlink's answer is already 1e8\n return _scaleToBase(uint256(answer));\n }\n\n /**\n * @notice get historical chainlink price\n * @param _roundId chainlink round id\n * @return round price and timestamp\n */\n function getHistoricalPrice(uint80 _roundId) external view override returns (uint256, uint256) {\n (, int256 price, , uint256 roundTimestamp, ) = aggregator.getRoundData(_roundId);\n return (_scaleToBase(uint256(price)), roundTimestamp);\n }\n\n /**\n * @notice scale aggregator response to base decimals (1e8)\n * @param _price aggregator price\n * @return price scaled to 1e8\n */\n function _scaleToBase(uint256 _price) internal view returns (uint256) {\n if (aggregatorDecimals > BASE) {\n uint256 exp = aggregatorDecimals.sub(BASE);\n _price = _price.div(10**exp);\n } else if (aggregatorDecimals < BASE) {\n uint256 exp = BASE.sub(aggregatorDecimals);\n _price = _price.mul(10**exp);\n }\n\n return _price;\n }\n}\n"
+ },
+ "contracts/interfaces/AggregatorInterface.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n/**\n * @dev Interface of the Chainlink aggregator\n */\ninterface AggregatorInterface {\n function decimals() external view returns (uint8);\n\n function description() external view returns (string memory);\n\n function version() external view returns (uint256);\n\n // getRoundData and latestRoundData should both raise \"No data present\"\n // if they do not have data to report, instead of returning unset values\n // which could be misinterpreted as actual reported values.\n function getRoundData(uint80 _roundId)\n external\n view\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n );\n\n function latestRoundData()\n external\n view\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n );\n}\n"
+ },
+ "contracts/mocks/MockOracle.sol": {
+ "content": "pragma solidity =0.6.10;\n\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\nimport {OpynPricerInterface} from \"../interfaces/OpynPricerInterface.sol\";\n\n/**\n * SPDX-License-Identifier: UNLICENSED\n * @dev The MockOracle contract let us easily manipulate the oracle state in testings.\n */\ncontract MockOracle {\n struct Price {\n uint256 price;\n uint256 timestamp; // timestamp at which the price is pushed to this oracle\n }\n\n using SafeMath for uint256;\n\n mapping(address => uint256) public realTimePrice;\n mapping(address => mapping(uint256 => uint256)) public storedPrice;\n mapping(address => uint256) internal stablePrice;\n mapping(address => mapping(uint256 => bool)) public isFinalized;\n\n mapping(address => uint256) internal pricerLockingPeriod;\n mapping(address => uint256) internal pricerDisputePeriod;\n mapping(address => address) internal assetPricer;\n\n // asset => expiry => bool\n mapping(address => mapping(uint256 => bool)) private _isDisputePeriodOver;\n mapping(address => mapping(uint256 => bool)) private _isLockingPeriodOver;\n\n // chainlink historic round data, asset => round => price/timestamp\n mapping(address => mapping(uint80 => uint256)) private _roundPrice;\n mapping(address => mapping(uint80 => uint256)) private _roundTimestamp;\n\n function setRealTimePrice(address _asset, uint256 _price) external {\n realTimePrice[_asset] = _price;\n }\n\n // get chainlink historic round data\n function getChainlinkRoundData(address _asset, uint80 _roundId) external view returns (uint256, uint256) {\n uint256 price = _roundPrice[_asset][_roundId];\n uint256 timestamp = _roundTimestamp[_asset][_roundId];\n\n return (price, timestamp);\n }\n\n function getPrice(address _asset) external view returns (uint256) {\n uint256 price = stablePrice[_asset];\n\n if (price == 0) {\n price = realTimePrice[_asset];\n }\n\n return price;\n }\n\n // set chainlink historic data for specific round id\n function setChainlinkRoundData(\n address _asset,\n uint80 _roundId,\n uint256 _price,\n uint256 _timestamp\n ) external returns (uint256, uint256) {\n _roundPrice[_asset][_roundId] = _price;\n _roundTimestamp[_asset][_roundId] = _timestamp;\n }\n\n // set bunch of things at expiry in 1 function\n function setExpiryPriceFinalizedAllPeiodOver(\n address _asset,\n uint256 _expiryTimestamp,\n uint256 _price,\n bool _isFinalized\n ) external {\n storedPrice[_asset][_expiryTimestamp] = _price;\n isFinalized[_asset][_expiryTimestamp] = _isFinalized;\n _isDisputePeriodOver[_asset][_expiryTimestamp] = _isFinalized;\n _isLockingPeriodOver[_asset][_expiryTimestamp] = _isFinalized;\n }\n\n // let the pricer set expiry price to oracle.\n function setExpiryPrice(\n address _asset,\n uint256 _expiryTimestamp,\n uint256 _price\n ) external {\n storedPrice[_asset][_expiryTimestamp] = _price;\n }\n\n function setIsFinalized(\n address _asset,\n uint256 _expiryTimestamp,\n bool _isFinalized\n ) external {\n isFinalized[_asset][_expiryTimestamp] = _isFinalized;\n }\n\n function getExpiryPrice(address _asset, uint256 _expiryTimestamp) external view returns (uint256, bool) {\n uint256 price = stablePrice[_asset];\n bool _isFinalized = true;\n\n if (price == 0) {\n price = storedPrice[_asset][_expiryTimestamp];\n _isFinalized = isFinalized[_asset][_expiryTimestamp];\n }\n\n return (price, _isFinalized);\n }\n\n function getPricer(address _asset) external view returns (address) {\n return assetPricer[_asset];\n }\n\n function getPricerLockingPeriod(address _pricer) external view returns (uint256) {\n return pricerLockingPeriod[_pricer];\n }\n\n function getPricerDisputePeriod(address _pricer) external view returns (uint256) {\n return pricerDisputePeriod[_pricer];\n }\n\n function isLockingPeriodOver(address _asset, uint256 _expiryTimestamp) public view returns (bool) {\n return _isLockingPeriodOver[_asset][_expiryTimestamp];\n }\n\n function setIsLockingPeriodOver(\n address _asset,\n uint256 _expiryTimestamp,\n bool _result\n ) external {\n _isLockingPeriodOver[_asset][_expiryTimestamp] = _result;\n }\n\n function isDisputePeriodOver(address _asset, uint256 _expiryTimestamp) external view returns (bool) {\n return _isDisputePeriodOver[_asset][_expiryTimestamp];\n }\n\n function setIsDisputePeriodOver(\n address _asset,\n uint256 _expiryTimestamp,\n bool _result\n ) external {\n _isDisputePeriodOver[_asset][_expiryTimestamp] = _result;\n }\n\n function setAssetPricer(address _asset, address _pricer) external {\n assetPricer[_asset] = _pricer;\n }\n\n function setLockingPeriod(address _pricer, uint256 _lockingPeriod) external {\n pricerLockingPeriod[_pricer] = _lockingPeriod;\n }\n\n function setDisputePeriod(address _pricer, uint256 _disputePeriod) external {\n pricerDisputePeriod[_pricer] = _disputePeriod;\n }\n\n function setStablePrice(address _asset, uint256 _price) external {\n stablePrice[_asset] = _price;\n }\n}\n"
+ },
+ "contracts/core/Oracle.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\nimport {OpynPricerInterface} from \"../interfaces/OpynPricerInterface.sol\";\nimport {Ownable} from \"../packages/oz/Ownable.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * @author Opyn Team\n * @title Oracle Module\n * @notice The Oracle module sets, retrieves, and stores USD prices (USD per asset) for underlying, collateral, and strike assets\n * manages pricers that are used for different assets\n */\ncontract Oracle is Ownable {\n using SafeMath for uint256;\n\n /// @dev structure that stores price of asset and timestamp when the price was stored\n struct Price {\n uint256 price;\n uint256 timestamp; // timestamp at which the price is pushed to this oracle\n }\n\n //// @dev disputer is a role defined by the owner that has the ability to dispute a price during the dispute period\n address internal disputer;\n\n bool migrated;\n\n /// @dev mapping of asset pricer to its locking period\n /// locking period is the period of time after the expiry timestamp where a price can not be pushed\n mapping(address => uint256) internal pricerLockingPeriod;\n /// @dev mapping of asset pricer to its dispute period\n /// dispute period is the period of time after an expiry price has been pushed where a price can be disputed\n mapping(address => uint256) internal pricerDisputePeriod;\n /// @dev mapping between an asset and its pricer\n mapping(address => address) internal assetPricer;\n /// @dev mapping between asset, expiry timestamp, and the Price structure at the expiry timestamp\n mapping(address => mapping(uint256 => Price)) internal storedPrice;\n /// @dev mapping between stable asset and price\n mapping(address => uint256) internal stablePrice;\n\n /// @notice emits an event when the disputer is updated\n event DisputerUpdated(address indexed newDisputer);\n /// @notice emits an event when the pricer is updated for an asset\n event PricerUpdated(address indexed asset, address indexed pricer);\n /// @notice emits an event when the locking period is updated for a pricer\n event PricerLockingPeriodUpdated(address indexed pricer, uint256 lockingPeriod);\n /// @notice emits an event when the dispute period is updated for a pricer\n event PricerDisputePeriodUpdated(address indexed pricer, uint256 disputePeriod);\n /// @notice emits an event when an expiry price is updated for a specific asset\n event ExpiryPriceUpdated(\n address indexed asset,\n uint256 indexed expiryTimestamp,\n uint256 price,\n uint256 onchainTimestamp\n );\n /// @notice emits an event when the disputer disputes a price during the dispute period\n event ExpiryPriceDisputed(\n address indexed asset,\n uint256 indexed expiryTimestamp,\n uint256 disputedPrice,\n uint256 newPrice,\n uint256 disputeTimestamp\n );\n /// @notice emits an event when a stable asset price changes\n event StablePriceUpdated(address indexed asset, uint256 price);\n\n /**\n * @notice function to mgirate asset prices from old oracle to new deployed oracle\n * @dev this can only be called by owner, should be used at the deployment time before setting Oracle module into AddressBook\n * @param _asset asset address\n * @param _expiries array of expiries timestamps\n * @param _prices array of prices\n */\n function migrateOracle(\n address _asset,\n uint256[] calldata _expiries,\n uint256[] calldata _prices\n ) external onlyOwner {\n require(!migrated, \"Oracle: migration already done\");\n require(_expiries.length == _prices.length, \"Oracle: invalid migration data\");\n\n for (uint256 i; i < _expiries.length; i++) {\n storedPrice[_asset][_expiries[i]] = Price(_prices[i], now);\n }\n }\n\n /**\n * @notice end migration process\n * @dev can only be called by owner, should be called before setting Oracle module into AddressBook\n */\n function endMigration() external onlyOwner {\n migrated = true;\n }\n\n /**\n * @notice sets the pricer for an asset\n * @dev can only be called by the owner\n * @param _asset asset address\n * @param _pricer pricer address\n */\n function setAssetPricer(address _asset, address _pricer) external onlyOwner {\n require(_pricer != address(0), \"Oracle: cannot set pricer to address(0)\");\n require(stablePrice[_asset] == 0, \"Oracle: could not set a pricer for stable asset\");\n\n assetPricer[_asset] = _pricer;\n\n emit PricerUpdated(_asset, _pricer);\n }\n\n /**\n * @notice sets the locking period for a pricer\n * @dev can only be called by the owner\n * @param _pricer pricer address\n * @param _lockingPeriod locking period\n */\n function setLockingPeriod(address _pricer, uint256 _lockingPeriod) external onlyOwner {\n pricerLockingPeriod[_pricer] = _lockingPeriod;\n\n emit PricerLockingPeriodUpdated(_pricer, _lockingPeriod);\n }\n\n /**\n * @notice sets the dispute period for a pricer\n * @dev can only be called by the owner\n * for a composite pricer (ie CompoundPricer) that depends on or calls other pricers, ensure\n * that the dispute period for the composite pricer is longer than the dispute period for the\n * asset pricer that it calls to ensure safe usage as a dispute in the other pricer will cause\n * the need for a dispute with the composite pricer's price\n * @param _pricer pricer address\n * @param _disputePeriod dispute period\n */\n function setDisputePeriod(address _pricer, uint256 _disputePeriod) external onlyOwner {\n pricerDisputePeriod[_pricer] = _disputePeriod;\n\n emit PricerDisputePeriodUpdated(_pricer, _disputePeriod);\n }\n\n /**\n * @notice set the disputer address\n * @dev can only be called by the owner\n * @param _disputer disputer address\n */\n function setDisputer(address _disputer) external onlyOwner {\n disputer = _disputer;\n\n emit DisputerUpdated(_disputer);\n }\n\n /**\n * @notice set stable asset price\n * @dev price should be scaled by 1e8\n * @param _asset asset address\n * @param _price price\n */\n function setStablePrice(address _asset, uint256 _price) external onlyOwner {\n require(assetPricer[_asset] == address(0), \"Oracle: could not set stable price for an asset with pricer\");\n\n stablePrice[_asset] = _price;\n\n emit StablePriceUpdated(_asset, _price);\n }\n\n /**\n * @notice dispute an asset price during the dispute period\n * @dev only the disputer can dispute a price during the dispute period, by setting a new one\n * @param _asset asset address\n * @param _expiryTimestamp expiry timestamp\n * @param _price the correct price\n */\n function disputeExpiryPrice(\n address _asset,\n uint256 _expiryTimestamp,\n uint256 _price\n ) external {\n require(msg.sender == disputer, \"Oracle: caller is not the disputer\");\n require(!isDisputePeriodOver(_asset, _expiryTimestamp), \"Oracle: dispute period over\");\n\n Price storage priceToUpdate = storedPrice[_asset][_expiryTimestamp];\n\n require(priceToUpdate.timestamp != 0, \"Oracle: price to dispute does not exist\");\n\n uint256 oldPrice = priceToUpdate.price;\n priceToUpdate.price = _price;\n\n emit ExpiryPriceDisputed(_asset, _expiryTimestamp, oldPrice, _price, now);\n }\n\n /**\n * @notice submits the expiry price to the oracle, can only be set from the pricer\n * @dev asset price can only be set after the locking period is over and before the dispute period has started\n * @param _asset asset address\n * @param _expiryTimestamp expiry timestamp\n * @param _price asset price at expiry\n */\n function setExpiryPrice(\n address _asset,\n uint256 _expiryTimestamp,\n uint256 _price\n ) external {\n require(msg.sender == assetPricer[_asset], \"Oracle: caller is not authorized to set expiry price\");\n require(isLockingPeriodOver(_asset, _expiryTimestamp), \"Oracle: locking period is not over yet\");\n require(storedPrice[_asset][_expiryTimestamp].timestamp == 0, \"Oracle: dispute period started\");\n\n storedPrice[_asset][_expiryTimestamp] = Price(_price, now);\n emit ExpiryPriceUpdated(_asset, _expiryTimestamp, _price, now);\n }\n\n /**\n * @notice get a live asset price from the asset's pricer contract\n * @param _asset asset address\n * @return price scaled by 1e8, denominated in USD\n * e.g. 17568900000 => 175.689 USD\n */\n function getPrice(address _asset) external view returns (uint256) {\n uint256 price = stablePrice[_asset];\n\n if (price == 0) {\n require(assetPricer[_asset] != address(0), \"Oracle: Pricer for this asset not set\");\n\n price = OpynPricerInterface(assetPricer[_asset]).getPrice();\n }\n\n return price;\n }\n\n /**\n * @notice get the asset price at specific expiry timestamp\n * @param _asset asset address\n * @param _expiryTimestamp expiry timestamp\n * @return price scaled by 1e8, denominated in USD\n * @return isFinalized True, if the price is finalized, False if not\n */\n function getExpiryPrice(address _asset, uint256 _expiryTimestamp) external view returns (uint256, bool) {\n uint256 price = stablePrice[_asset];\n bool isFinalized = true;\n\n if (price == 0) {\n price = storedPrice[_asset][_expiryTimestamp].price;\n isFinalized = isDisputePeriodOver(_asset, _expiryTimestamp);\n }\n\n return (price, isFinalized);\n }\n\n /**\n * @notice get the pricer for an asset\n * @param _asset asset address\n * @return pricer address\n */\n function getPricer(address _asset) external view returns (address) {\n return assetPricer[_asset];\n }\n\n /**\n * @notice get the disputer address\n * @return disputer address\n */\n function getDisputer() external view returns (address) {\n return disputer;\n }\n\n /**\n * @notice get a pricer's locking period\n * locking period is the period of time after the expiry timestamp where a price can not be pushed\n * @dev during the locking period an expiry price can not be submitted to this contract\n * @param _pricer pricer address\n * @return locking period\n */\n function getPricerLockingPeriod(address _pricer) external view returns (uint256) {\n return pricerLockingPeriod[_pricer];\n }\n\n /**\n * @notice get a pricer's dispute period\n * dispute period is the period of time after an expiry price has been pushed where a price can be disputed\n * @dev during the dispute period, the disputer can dispute the submitted price and modify it\n * @param _pricer pricer address\n * @return dispute period\n */\n function getPricerDisputePeriod(address _pricer) external view returns (uint256) {\n return pricerDisputePeriod[_pricer];\n }\n\n /**\n * @notice get historical asset price and timestamp\n * @dev if asset is a stable asset, will return stored price and timestamp equal to now\n * @param _asset asset address to get it's historical price\n * @param _roundId chainlink round id\n * @return price and round timestamp\n */\n function getChainlinkRoundData(address _asset, uint80 _roundId) external view returns (uint256, uint256) {\n uint256 price = stablePrice[_asset];\n uint256 timestamp = now;\n\n if (price == 0) {\n require(assetPricer[_asset] != address(0), \"Oracle: Pricer for this asset not set\");\n\n (price, timestamp) = OpynPricerInterface(assetPricer[_asset]).getHistoricalPrice(_roundId);\n }\n\n return (price, timestamp);\n }\n\n /**\n * @notice check if the locking period is over for setting the asset price at a particular expiry timestamp\n * @param _asset asset address\n * @param _expiryTimestamp expiry timestamp\n * @return True if locking period is over, False if not\n */\n function isLockingPeriodOver(address _asset, uint256 _expiryTimestamp) public view returns (bool) {\n uint256 price = stablePrice[_asset];\n\n if (price == 0) {\n address pricer = assetPricer[_asset];\n uint256 lockingPeriod = pricerLockingPeriod[pricer];\n\n return now > _expiryTimestamp.add(lockingPeriod);\n }\n\n return true;\n }\n\n /**\n * @notice check if the dispute period is over\n * @param _asset asset address\n * @param _expiryTimestamp expiry timestamp\n * @return True if dispute period is over, False if not\n */\n function isDisputePeriodOver(address _asset, uint256 _expiryTimestamp) public view returns (bool) {\n uint256 price = stablePrice[_asset];\n\n if (price == 0) {\n // check if the pricer has a price for this expiry timestamp\n Price memory price = storedPrice[_asset][_expiryTimestamp];\n if (price.timestamp == 0) {\n return false;\n }\n\n address pricer = assetPricer[_asset];\n uint256 disputePeriod = pricerDisputePeriod[pricer];\n\n return now > price.timestamp.add(disputePeriod);\n }\n\n return true;\n }\n}\n"
+ },
+ "contracts/pricers/CompoundPricer.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\nimport {CTokenInterface} from \"../interfaces/CTokenInterface.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * @notice A Pricer contract for a Compound cToken\n */\ncontract CompoundPricer {\n using SafeMath for uint256;\n\n /// @notice opyn oracle address\n OracleInterface public oracle;\n\n /// @notice cToken that this pricer will a get price for\n CTokenInterface public cToken;\n\n /// @notice underlying asset for this cToken\n ERC20Interface public underlying;\n\n /**\n * @param _cToken cToken asset\n * @param _underlying underlying asset for this cToken\n * @param _oracle Opyn Oracle contract address\n */\n constructor(\n address _cToken,\n address _underlying,\n address _oracle\n ) public {\n require(_cToken != address(0), \"CompoundPricer: cToken address can not be 0\");\n require(_underlying != address(0), \"CompoundPricer: underlying address can not be 0\");\n require(_oracle != address(0), \"CompoundPricer: oracle address can not be 0\");\n\n cToken = CTokenInterface(_cToken);\n underlying = ERC20Interface(_underlying);\n oracle = OracleInterface(_oracle);\n }\n\n /**\n * @notice get the live price for the asset\n * @return price of 1e8 cToken in USD, scaled by 1e8\n */\n function getPrice() external view returns (uint256) {\n uint256 underlyingPrice = oracle.getPrice(address(underlying));\n require(underlyingPrice > 0, \"CompoundPricer: underlying price is 0\");\n return _underlyingPriceToCtokenPrice(underlyingPrice);\n }\n\n /**\n * @notice set the expiry price in the oracle\n * @dev requires that the underlying price has been set before setting a cToken price\n * @param _expiryTimestamp expiry to set a price for\n */\n function setExpiryPriceInOracle(uint256 _expiryTimestamp) external {\n (uint256 underlyingPriceExpiry, ) = oracle.getExpiryPrice(address(underlying), _expiryTimestamp);\n require(underlyingPriceExpiry > 0, \"CompoundPricer: underlying price not set yet\");\n uint256 cTokenPrice = _underlyingPriceToCtokenPrice(underlyingPriceExpiry);\n oracle.setExpiryPrice(address(cToken), _expiryTimestamp, cTokenPrice);\n }\n\n /**\n * @dev convert underlying price to cToken price with the cToken to underlying exchange rate\n * @param _underlyingPrice price of 1 underlying token (ie 1e6 USDC, 1e18 WETH) in USD, scaled by 1e8\n * @return price of 1e8 cToken in USD, scaled by 1e8\n */\n function _underlyingPriceToCtokenPrice(uint256 _underlyingPrice) internal view returns (uint256) {\n uint256 underlyingDecimals = uint256(underlying.decimals());\n uint256 cTokenDecimals = uint256(cToken.decimals());\n uint256 exchangeRate = cToken.exchangeRateStored();\n return exchangeRate.mul(_underlyingPrice).mul(10**(cTokenDecimals)).div(10**(underlyingDecimals.add(18)));\n }\n}\n"
+ },
+ "contracts/interfaces/CTokenInterface.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n/**\n * @dev Interface of Compound cToken\n */\ninterface CTokenInterface {\n /**\n * @notice Calculates the exchange rate from the underlying to the CToken\n * @return Calculated exchange rate scaled by 1e18\n */\n function exchangeRateStored() external view returns (uint256);\n\n function decimals() external view returns (uint256);\n}\n"
+ },
+ "contracts/mocks/MockPricer.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\n\ncontract MockPricer {\n OracleInterface public oracle;\n\n uint256 internal price;\n address public asset;\n\n constructor(address _asset, address _oracle) public {\n asset = _asset;\n oracle = OracleInterface(_oracle);\n }\n\n function setPrice(uint256 _price) external {\n price = _price;\n }\n\n function getPrice() external view returns (uint256) {\n return price;\n }\n\n function setExpiryPriceInOracle(uint256 _expiryTimestamp, uint256 _price) external {\n oracle.setExpiryPrice(asset, _expiryTimestamp, _price);\n }\n\n function getHistoricalPrice(uint80 _roundId) external view returns (uint256, uint256) {\n return (price, now);\n }\n}\n"
+ },
+ "contracts/core/MarginCalculator.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\npragma experimental ABIEncoderV2;\n\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\nimport {Ownable} from \"../packages/oz/Ownable.sol\";\nimport {OtokenInterface} from \"../interfaces/OtokenInterface.sol\";\nimport {OracleInterface} from \"../interfaces/OracleInterface.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {FixedPointInt256 as FPI} from \"../libs/FixedPointInt256.sol\";\nimport {MarginVault} from \"../libs/MarginVault.sol\";\n\n/**\n * @title MarginCalculator\n * @author Opyn\n * @notice Calculator module that checks if a given vault is valid, calculates margin requirements, and settlement proceeds\n */\ncontract MarginCalculator is Ownable {\n using SafeMath for uint256;\n using FPI for FPI.FixedPointInt;\n\n /// @dev decimals option upper bound value, spot shock and oracle deviation\n uint256 internal constant SCALING_FACTOR = 27;\n\n /// @dev decimals used by strike price and oracle price\n uint256 internal constant BASE = 8;\n\n /// @notice auction length\n uint256 public constant AUCTION_TIME = 3600;\n\n /// @dev struct to store all needed vault details\n struct VaultDetails {\n address shortUnderlyingAsset;\n address shortStrikeAsset;\n address shortCollateralAsset;\n address longUnderlyingAsset;\n address longStrikeAsset;\n address longCollateralAsset;\n uint256 shortStrikePrice;\n uint256 shortExpiryTimestamp;\n uint256 shortCollateralDecimals;\n uint256 longStrikePrice;\n uint256 longExpiryTimestamp;\n uint256 longCollateralDecimals;\n uint256 collateralDecimals;\n uint256 vaultType;\n bool isShortPut;\n bool isLongPut;\n bool hasLong;\n bool hasShort;\n bool hasCollateral;\n }\n\n /// @dev oracle deviation value (1e27)\n uint256 internal oracleDeviation;\n\n /// @dev FixedPoint 0\n FPI.FixedPointInt internal ZERO = FPI.fromScaledUint(0, BASE);\n\n /// @dev mapping to store dust amount per option collateral asset (scaled by collateral asset decimals)\n mapping(address => uint256) internal dust;\n\n /// @dev mapping to store array of time to expiry for a given product\n mapping(bytes32 => uint256[]) internal timesToExpiryForProduct;\n\n /// @dev mapping to store option upper bound value at specific time to expiry for a given product (1e27)\n mapping(bytes32 => mapping(uint256 => uint256)) internal maxPriceAtTimeToExpiry;\n\n /// @dev mapping to store shock value for spot price of a given product (1e27)\n mapping(bytes32 => uint256) internal spotShock;\n\n /// @dev oracle module\n OracleInterface public oracle;\n\n /// @notice emits an event when collateral dust is updated\n event CollateralDustUpdated(address indexed collateral, uint256 dust);\n /// @notice emits an event when new time to expiry is added for a specific product\n event TimeToExpiryAdded(bytes32 indexed productHash, uint256 timeToExpiry);\n /// @notice emits an event when new upper bound value is added for a specific time to expiry timestamp\n event MaxPriceAdded(bytes32 indexed productHash, uint256 timeToExpiry, uint256 value);\n /// @notice emits an event when updating upper bound value at specific expiry timestamp\n event MaxPriceUpdated(bytes32 indexed productHash, uint256 timeToExpiry, uint256 oldValue, uint256 newValue);\n /// @notice emits an event when spot shock value is updated for a specific product\n event SpotShockUpdated(bytes32 indexed product, uint256 spotShock);\n /// @notice emits an event when oracle deviation value is updated\n event OracleDeviationUpdated(uint256 oracleDeviation);\n\n /**\n * @notice constructor\n * @param _oracle oracle module address\n */\n constructor(address _oracle) public {\n require(_oracle != address(0), \"MarginCalculator: invalid oracle address\");\n\n oracle = OracleInterface(_oracle);\n }\n\n /**\n * @notice set dust amount for collateral asset\n * @dev can only be called by owner\n * @param _collateral collateral asset address\n * @param _dust dust amount, should be scaled by collateral asset decimals\n */\n function setCollateralDust(address _collateral, uint256 _dust) external onlyOwner {\n require(_dust > 0, \"MarginCalculator: dust amount should be greater than zero\");\n\n dust[_collateral] = _dust;\n\n emit CollateralDustUpdated(_collateral, _dust);\n }\n\n /**\n * @notice set product upper bound values\n * @dev can only be called by owner\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _collateral otoken collateral asset\n * @param _isPut otoken type\n * @param _timesToExpiry array of times to expiry timestamp\n * @param _values upper bound values array\n */\n function setUpperBoundValues(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut,\n uint256[] calldata _timesToExpiry,\n uint256[] calldata _values\n ) external onlyOwner {\n require(_timesToExpiry.length > 0, \"MarginCalculator: invalid times to expiry array\");\n require(_timesToExpiry.length == _values.length, \"MarginCalculator: invalid values array\");\n\n // get product hash\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n\n uint256[] storage expiryArray = timesToExpiryForProduct[productHash];\n\n // check that this is the first expiry to set\n // if not, the last expiry should be less than the new one to insert (to make sure the array stay in order)\n require(\n (expiryArray.length == 0) || (_timesToExpiry[0] > expiryArray[expiryArray.length.sub(1)]),\n \"MarginCalculator: expiry array is not in order\"\n );\n\n for (uint256 i = 0; i < _timesToExpiry.length; i++) {\n // check that new times array is in order\n if (i.add(1) < _timesToExpiry.length) {\n require(_timesToExpiry[i] < _timesToExpiry[i.add(1)], \"MarginCalculator: time should be in order\");\n }\n\n require(_values[i] > 0, \"MarginCalculator: no expiry upper bound value found\");\n\n // add new upper bound value for this product at specific time to expiry\n maxPriceAtTimeToExpiry[productHash][_timesToExpiry[i]] = _values[i];\n\n // add new time to expiry to array\n expiryArray.push(_timesToExpiry[i]);\n\n emit TimeToExpiryAdded(productHash, _timesToExpiry[i]);\n emit MaxPriceAdded(productHash, _timesToExpiry[i], _values[i]);\n }\n }\n\n /**\n * @notice set option upper bound value for specific time to expiry (1e27)\n * @dev can only be called by owner\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _collateral otoken collateral asset\n * @param _isPut otoken type\n * @param _timeToExpiry option time to expiry timestamp\n * @param _value upper bound value\n */\n function updateUpperBoundValue(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut,\n uint256 _timeToExpiry,\n uint256 _value\n ) external onlyOwner {\n require(_value > 0, \"MarginCalculator: invalid option upper bound value\");\n\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n uint256 oldMaxPrice = maxPriceAtTimeToExpiry[productHash][_timeToExpiry];\n\n require(oldMaxPrice != 0, \"MarginCalculator: upper bound value not found\");\n\n // update upper bound value for the time to expiry\n maxPriceAtTimeToExpiry[productHash][_timeToExpiry] = _value;\n\n emit MaxPriceUpdated(productHash, _timeToExpiry, oldMaxPrice, _value);\n }\n\n /**\n * @notice set spot shock value, scaled to 1e27\n * @dev can only be called by owner\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _collateral otoken collateral asset\n * @param _isPut otoken type\n * @param _shockValue spot shock value\n */\n function setSpotShock(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut,\n uint256 _shockValue\n ) external onlyOwner {\n require(_shockValue > 0, \"MarginCalculator: invalid spot shock value\");\n\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n\n spotShock[productHash] = _shockValue;\n\n emit SpotShockUpdated(productHash, _shockValue);\n }\n\n /**\n * @notice set oracle deviation (1e27)\n * @dev can only be called by owner\n * @param _deviation deviation value\n */\n function setOracleDeviation(uint256 _deviation) external onlyOwner {\n oracleDeviation = _deviation;\n\n emit OracleDeviationUpdated(_deviation);\n }\n\n /**\n * @notice get dust amount for collateral asset\n * @param _collateral collateral asset address\n * @return dust amount\n */\n function getCollateralDust(address _collateral) external view returns (uint256) {\n return dust[_collateral];\n }\n\n /**\n * @notice get times to expiry for a specific product\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _collateral otoken collateral asset\n * @param _isPut otoken type\n * @return array of times to expiry\n */\n function getTimesToExpiry(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external view returns (uint256[] memory) {\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n return timesToExpiryForProduct[productHash];\n }\n\n /**\n * @notice get option upper bound value for specific time to expiry\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _collateral otoken collateral asset\n * @param _isPut otoken type\n * @param _timeToExpiry option time to expiry timestamp\n * @return option upper bound value (1e27)\n */\n function getMaxPrice(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut,\n uint256 _timeToExpiry\n ) external view returns (uint256) {\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n\n return maxPriceAtTimeToExpiry[productHash][_timeToExpiry];\n }\n\n /**\n * @notice get spot shock value\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _collateral otoken collateral asset\n * @param _isPut otoken type\n * @return _shockValue spot shock value (1e27)\n */\n function getSpotShock(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) external view returns (uint256) {\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n\n return spotShock[productHash];\n }\n\n /**\n * @notice get oracle deviation\n * @return oracle deviation value (1e27)\n */\n function getOracleDeviation() external view returns (uint256) {\n return oracleDeviation;\n }\n\n /**\n * @notice return the collateral required for naked margin vault, in collateral asset decimals\n * @dev _shortAmount, _strikePrice and _underlyingPrice should be scaled by 1e8\n * @param _underlying underlying asset address\n * @param _strike strike asset address\n * @param _collateral collateral asset address\n * @param _shortAmount amount of short otoken\n * @param _strikePrice otoken strike price\n * @param _underlyingPrice otoken underlying price\n * @param _shortExpiryTimestamp otoken expiry timestamp\n * @param _collateralDecimals otoken collateral asset decimals\n * @param _isPut otoken type\n * @return collateral required for a naked margin vault, in collateral asset decimals\n */\n function getNakedMarginRequired(\n address _underlying,\n address _strike,\n address _collateral,\n uint256 _shortAmount,\n uint256 _strikePrice,\n uint256 _underlyingPrice,\n uint256 _shortExpiryTimestamp,\n uint256 _collateralDecimals,\n bool _isPut\n ) external view returns (uint256) {\n bytes32 productHash = _getProductHash(_underlying, _strike, _collateral, _isPut);\n\n // scale short amount from 1e8 to 1e27 (oToken is always in 1e8)\n FPI.FixedPointInt memory shortAmount = FPI.fromScaledUint(_shortAmount, BASE);\n // scale short strike from 1e8 to 1e27\n FPI.FixedPointInt memory shortStrike = FPI.fromScaledUint(_strikePrice, BASE);\n // scale short underlying price from 1e8 to 1e27\n FPI.FixedPointInt memory shortUnderlyingPrice = FPI.fromScaledUint(_underlyingPrice, BASE);\n\n // return required margin, scaled by collateral asset decimals, explicitly rounded up\n return\n FPI.toScaledUint(\n _getNakedMarginRequired(\n productHash,\n shortAmount,\n shortUnderlyingPrice,\n shortStrike,\n _shortExpiryTimestamp,\n _isPut\n ),\n _collateralDecimals,\n false\n );\n }\n\n /**\n * @notice return the cash value of an expired oToken, denominated in collateral\n * @param _otoken oToken address\n * @return how much collateral can be taken out by 1 otoken unit, scaled by 1e8,\n * or how much collateral can be taken out for 1 (1e8) oToken\n */\n function getExpiredPayoutRate(address _otoken) external view returns (uint256) {\n require(_otoken != address(0), \"MarginCalculator: Invalid token address\");\n\n (\n address collateral,\n address underlying,\n address strikeAsset,\n uint256 strikePrice,\n uint256 expiry,\n bool isPut\n ) = _getOtokenDetails(_otoken);\n\n require(now >= expiry, \"MarginCalculator: Otoken not expired yet\");\n\n FPI.FixedPointInt memory cashValueInStrike = _getExpiredCashValue(\n underlying,\n strikeAsset,\n expiry,\n strikePrice,\n isPut\n );\n\n FPI.FixedPointInt memory cashValueInCollateral = _convertAmountOnExpiryPrice(\n cashValueInStrike,\n strikeAsset,\n collateral,\n expiry\n );\n\n // the exchangeRate was scaled by 1e8, if 1e8 otoken can take out 1 USDC, the exchangeRate is currently 1e8\n // we want to return: how much USDC units can be taken out by 1 (1e8 units) oToken\n uint256 collateralDecimals = uint256(ERC20Interface(collateral).decimals());\n return cashValueInCollateral.toScaledUint(collateralDecimals, true);\n }\n\n // structs to avoid stack too deep error\n // struct to store shortAmount, shortStrike and shortUnderlyingPrice scaled to 1e27\n struct ShortScaledDetails {\n FPI.FixedPointInt shortAmount;\n FPI.FixedPointInt shortStrike;\n FPI.FixedPointInt shortUnderlyingPrice;\n }\n\n /**\n * @notice check if a specific vault is undercollateralized at a specific chainlink round\n * @dev if the vault is of type 0, the function will revert\n * @param _vault vault struct\n * @param _vaultType vault type (0 for max loss/spread and 1 for naked margin vault)\n * @param _vaultLatestUpdate vault latest update (timestamp when latest vault state change happened)\n * @param _roundId chainlink round id\n * @return isLiquidatable, true if vault is undercollateralized, liquidation price and collateral dust amount\n */\n function isLiquidatable(\n MarginVault.Vault memory _vault,\n uint256 _vaultType,\n uint256 _vaultLatestUpdate,\n uint256 _roundId\n )\n external\n view\n returns (\n bool,\n uint256,\n uint256\n )\n {\n // liquidation is only supported for naked margin vault\n require(_vaultType == 1, \"MarginCalculator: invalid vault type to liquidate\");\n\n VaultDetails memory vaultDetails = _getVaultDetails(_vault, _vaultType);\n\n // can not liquidate vault that have no short position\n if (!vaultDetails.hasShort) return (false, 0, 0);\n\n require(now < vaultDetails.shortExpiryTimestamp, \"MarginCalculator: can not liquidate expired position\");\n\n (uint256 price, uint256 timestamp) = oracle.getChainlinkRoundData(\n vaultDetails.shortUnderlyingAsset,\n uint80(_roundId)\n );\n\n // check that price timestamp is after latest timestamp the vault was updated at\n require(\n timestamp > _vaultLatestUpdate,\n \"MarginCalculator: auction timestamp should be post vault latest update\"\n );\n\n // another struct to store some useful short otoken details, to avoid stack to deep error\n ShortScaledDetails memory shortDetails = ShortScaledDetails({\n shortAmount: FPI.fromScaledUint(_vault.shortAmounts[0], BASE),\n shortStrike: FPI.fromScaledUint(vaultDetails.shortStrikePrice, BASE),\n shortUnderlyingPrice: FPI.fromScaledUint(price, BASE)\n });\n\n bytes32 productHash = _getProductHash(\n vaultDetails.shortUnderlyingAsset,\n vaultDetails.shortStrikeAsset,\n vaultDetails.shortCollateralAsset,\n vaultDetails.isShortPut\n );\n\n // convert vault collateral to a fixed point (1e27) from collateral decimals\n FPI.FixedPointInt memory depositedCollateral = FPI.fromScaledUint(\n _vault.collateralAmounts[0],\n vaultDetails.collateralDecimals\n );\n\n FPI.FixedPointInt memory collateralRequired = _getNakedMarginRequired(\n productHash,\n shortDetails.shortAmount,\n shortDetails.shortUnderlyingPrice,\n shortDetails.shortStrike,\n vaultDetails.shortExpiryTimestamp,\n vaultDetails.isShortPut\n );\n\n // if collateral required <= collateral in the vault, the vault is not liquidatable\n if (collateralRequired.isLessThanOrEqual(depositedCollateral)) {\n return (false, 0, 0);\n }\n\n FPI.FixedPointInt memory cashValue = _getCashValue(\n shortDetails.shortStrike,\n shortDetails.shortUnderlyingPrice,\n vaultDetails.isShortPut\n );\n\n // get the amount of collateral per 1 repaid otoken\n uint256 debtPrice = _getDebtPrice(\n depositedCollateral,\n shortDetails.shortAmount,\n cashValue,\n shortDetails.shortUnderlyingPrice,\n timestamp,\n vaultDetails.collateralDecimals,\n vaultDetails.isShortPut\n );\n\n return (true, debtPrice, dust[vaultDetails.shortCollateralAsset]);\n }\n\n /**\n * @notice calculate required collateral margin for a vault\n * @param _vault theoretical vault that needs to be checked\n * @param _vaultType vault type\n * @return the vault collateral amount, and marginRequired the minimal amount of collateral needed in a vault, scaled to 1e27\n */\n function getMarginRequired(MarginVault.Vault memory _vault, uint256 _vaultType)\n external\n view\n returns (FPI.FixedPointInt memory, FPI.FixedPointInt memory)\n {\n VaultDetails memory vaultDetail = _getVaultDetails(_vault, _vaultType);\n return _getMarginRequired(_vault, vaultDetail);\n }\n\n /**\n * @notice returns the amount of collateral that can be removed from an actual or a theoretical vault\n * @dev return amount is denominated in the collateral asset for the oToken in the vault, or the collateral asset in the vault\n * @param _vault theoretical vault that needs to be checked\n * @param _vaultType vault type (0 for spread/max loss, 1 for naked margin)\n * @return excessCollateral the amount by which the margin is above or below the required amount\n * @return isExcess True if there is excess margin in the vault, False if there is a deficit of margin in the vault\n * if True, collateral can be taken out from the vault, if False, additional collateral needs to be added to vault\n */\n function getExcessCollateral(MarginVault.Vault memory _vault, uint256 _vaultType)\n public\n view\n returns (uint256, bool)\n {\n VaultDetails memory vaultDetails = _getVaultDetails(_vault, _vaultType);\n\n // include all the checks for to ensure the vault is valid\n _checkIsValidVault(_vault, vaultDetails);\n\n // if the vault contains no oTokens, return the amount of collateral\n if (!vaultDetails.hasShort && !vaultDetails.hasLong) {\n uint256 amount = vaultDetails.hasCollateral ? _vault.collateralAmounts[0] : 0;\n return (amount, true);\n }\n\n // get required margin, denominated in collateral, scaled in 1e27\n (FPI.FixedPointInt memory collateralAmount, FPI.FixedPointInt memory collateralRequired) = _getMarginRequired(\n _vault,\n vaultDetails\n );\n FPI.FixedPointInt memory excessCollateral = collateralAmount.sub(collateralRequired);\n\n bool isExcess = excessCollateral.isGreaterThanOrEqual(ZERO);\n uint256 collateralDecimals = vaultDetails.hasLong\n ? vaultDetails.longCollateralDecimals\n : vaultDetails.shortCollateralDecimals;\n // if is excess, truncate the tailing digits in excessCollateralExternal calculation\n uint256 excessCollateralExternal = excessCollateral.toScaledUint(collateralDecimals, isExcess);\n return (excessCollateralExternal, isExcess);\n }\n\n /**\n * @notice return the cash value of an expired oToken, denominated in strike asset\n * @dev for a call, return Max (0, underlyingPriceInStrike - otoken.strikePrice)\n * @dev for a put, return Max(0, otoken.strikePrice - underlyingPriceInStrike)\n * @param _underlying otoken underlying asset\n * @param _strike otoken strike asset\n * @param _expiryTimestamp otoken expiry timestamp\n * @param _strikePrice otoken strike price\n * @param _strikePrice true if otoken is put otherwise false\n * @return cash value of an expired otoken, denominated in the strike asset\n */\n function _getExpiredCashValue(\n address _underlying,\n address _strike,\n uint256 _expiryTimestamp,\n uint256 _strikePrice,\n bool _isPut\n ) internal view returns (FPI.FixedPointInt memory) {\n // strike price is denominated in strike asset\n FPI.FixedPointInt memory strikePrice = FPI.fromScaledUint(_strikePrice, BASE);\n FPI.FixedPointInt memory one = FPI.fromScaledUint(1, 0);\n\n // calculate the value of the underlying asset in terms of the strike asset\n FPI.FixedPointInt memory underlyingPriceInStrike = _convertAmountOnExpiryPrice(\n one, // underlying price is 1 (1e27) in term of underlying\n _underlying,\n _strike,\n _expiryTimestamp\n );\n\n return _getCashValue(strikePrice, underlyingPriceInStrike, _isPut);\n }\n\n /// @dev added this struct to avoid stack-too-deep error\n struct OtokenDetails {\n address otokenUnderlyingAsset;\n address otokenCollateralAsset;\n address otokenStrikeAsset;\n uint256 otokenExpiry;\n bool isPut;\n }\n\n /**\n * @notice calculate the amount of collateral needed for a vault\n * @dev vault passed in has already passed the checkIsValidVault function\n * @param _vault theoretical vault that needs to be checked\n * @return the vault collateral amount, and marginRequired the minimal amount of collateral needed in a vault,\n * scaled to 1e27\n */\n function _getMarginRequired(MarginVault.Vault memory _vault, VaultDetails memory _vaultDetails)\n internal\n view\n returns (FPI.FixedPointInt memory, FPI.FixedPointInt memory)\n {\n FPI.FixedPointInt memory shortAmount = _vaultDetails.hasShort\n ? FPI.fromScaledUint(_vault.shortAmounts[0], BASE)\n : ZERO;\n FPI.FixedPointInt memory longAmount = _vaultDetails.hasLong\n ? FPI.fromScaledUint(_vault.longAmounts[0], BASE)\n : ZERO;\n FPI.FixedPointInt memory collateralAmount = _vaultDetails.hasCollateral\n ? FPI.fromScaledUint(_vault.collateralAmounts[0], _vaultDetails.collateralDecimals)\n : ZERO;\n FPI.FixedPointInt memory shortStrike = _vaultDetails.hasShort\n ? FPI.fromScaledUint(_vaultDetails.shortStrikePrice, BASE)\n : ZERO;\n\n // struct to avoid stack too deep error\n OtokenDetails memory otokenDetails = OtokenDetails(\n _vaultDetails.hasShort ? _vaultDetails.shortUnderlyingAsset : _vaultDetails.longUnderlyingAsset,\n _vaultDetails.hasShort ? _vaultDetails.shortCollateralAsset : _vaultDetails.longCollateralAsset,\n _vaultDetails.hasShort ? _vaultDetails.shortStrikeAsset : _vaultDetails.longStrikeAsset,\n _vaultDetails.hasShort ? _vaultDetails.shortExpiryTimestamp : _vaultDetails.longExpiryTimestamp,\n _vaultDetails.hasShort ? _vaultDetails.isShortPut : _vaultDetails.isLongPut\n );\n\n if (now < otokenDetails.otokenExpiry) {\n // it's not expired, return amount of margin required based on vault type\n if (_vaultDetails.vaultType == 1) {\n // this is a naked margin vault\n // fetch dust amount for otoken collateral asset as FixedPointInt, assuming dust is already scaled by collateral decimals\n FPI.FixedPointInt memory dustAmount = FPI.fromScaledUint(\n dust[_vaultDetails.shortCollateralAsset],\n _vaultDetails.collateralDecimals\n );\n\n // check that collateral deposited in naked margin vault is greater than dust amount for that particular collateral asset\n if (collateralAmount.isGreaterThan(ZERO)) {\n require(\n collateralAmount.isGreaterThan(dustAmount),\n \"MarginCalculator: naked margin vault should have collateral amount greater than dust amount\"\n );\n }\n\n // get underlying asset price for short option\n FPI.FixedPointInt memory shortUnderlyingPrice = FPI.fromScaledUint(\n oracle.getPrice(_vaultDetails.shortUnderlyingAsset),\n BASE\n );\n\n // encode product hash\n bytes32 productHash = _getProductHash(\n _vaultDetails.shortUnderlyingAsset,\n _vaultDetails.shortStrikeAsset,\n _vaultDetails.shortCollateralAsset,\n _vaultDetails.isShortPut\n );\n\n // return amount of collateral in vault and needed collateral amount for margin\n return (\n collateralAmount,\n _getNakedMarginRequired(\n productHash,\n shortAmount,\n shortUnderlyingPrice,\n shortStrike,\n otokenDetails.otokenExpiry,\n otokenDetails.isPut\n )\n );\n } else {\n // this is a fully collateralized vault\n FPI.FixedPointInt memory longStrike = _vaultDetails.hasLong\n ? FPI.fromScaledUint(_vaultDetails.longStrikePrice, BASE)\n : ZERO;\n\n if (otokenDetails.isPut) {\n FPI.FixedPointInt memory strikeNeeded = _getPutSpreadMarginRequired(\n shortAmount,\n longAmount,\n shortStrike,\n longStrike\n );\n // convert amount to be denominated in collateral\n return (\n collateralAmount,\n _convertAmountOnLivePrice(\n strikeNeeded,\n otokenDetails.otokenStrikeAsset,\n otokenDetails.otokenCollateralAsset\n )\n );\n } else {\n FPI.FixedPointInt memory underlyingNeeded = _getCallSpreadMarginRequired(\n shortAmount,\n longAmount,\n shortStrike,\n longStrike\n );\n // convert amount to be denominated in collateral\n return (\n collateralAmount,\n _convertAmountOnLivePrice(\n underlyingNeeded,\n otokenDetails.otokenUnderlyingAsset,\n otokenDetails.otokenCollateralAsset\n )\n );\n }\n }\n } else {\n // the vault has expired. calculate the cash value of all the minted short options\n FPI.FixedPointInt memory shortCashValue = _vaultDetails.hasShort\n ? _getExpiredCashValue(\n _vaultDetails.shortUnderlyingAsset,\n _vaultDetails.shortStrikeAsset,\n _vaultDetails.shortExpiryTimestamp,\n _vaultDetails.shortStrikePrice,\n otokenDetails.isPut\n )\n : ZERO;\n FPI.FixedPointInt memory longCashValue = _vaultDetails.hasLong\n ? _getExpiredCashValue(\n _vaultDetails.longUnderlyingAsset,\n _vaultDetails.longStrikeAsset,\n _vaultDetails.longExpiryTimestamp,\n _vaultDetails.longStrikePrice,\n otokenDetails.isPut\n )\n : ZERO;\n\n FPI.FixedPointInt memory valueInStrike = _getExpiredSpreadCashValue(\n shortAmount,\n longAmount,\n shortCashValue,\n longCashValue\n );\n\n // convert amount to be denominated in collateral\n return (\n collateralAmount,\n _convertAmountOnExpiryPrice(\n valueInStrike,\n otokenDetails.otokenStrikeAsset,\n otokenDetails.otokenCollateralAsset,\n otokenDetails.otokenExpiry\n )\n );\n }\n }\n\n /**\n * @notice get required collateral for naked margin position\n * if put:\n * a = min(strike price, spot shock * underlying price)\n * b = max(strike price - spot shock * underlying price, 0)\n * marginRequired = ( option upper bound value * a + b) * short amount\n * if call:\n * a = min(1, strike price / (underlying price / spot shock value))\n * b = max(1- (strike price / (underlying price / spot shock value)), 0)\n * marginRequired = (option upper bound value * a + b) * short amount\n * @param _productHash product hash\n * @param _shortAmount short amount in vault, in FixedPointInt type\n * @param _strikePrice strike price of short otoken, in FixedPointInt type\n * @param _underlyingPrice underlying price of short otoken underlying asset, in FixedPointInt type\n * @param _shortExpiryTimestamp short otoken expiry timestamp\n * @param _isPut otoken type, true if put option, false for call option\n * @return required margin for this naked vault, in FixedPointInt type (scaled by 1e27)\n */\n function _getNakedMarginRequired(\n bytes32 _productHash,\n FPI.FixedPointInt memory _shortAmount,\n FPI.FixedPointInt memory _underlyingPrice,\n FPI.FixedPointInt memory _strikePrice,\n uint256 _shortExpiryTimestamp,\n bool _isPut\n ) internal view returns (FPI.FixedPointInt memory) {\n // find option upper bound value\n FPI.FixedPointInt memory optionUpperBoundValue = _findUpperBoundValue(_productHash, _shortExpiryTimestamp);\n // convert spot shock value of this product to FixedPointInt (already scaled by 1e27)\n FPI.FixedPointInt memory spotShockValue = FPI.FixedPointInt(int256(spotShock[_productHash]));\n\n FPI.FixedPointInt memory a;\n FPI.FixedPointInt memory b;\n FPI.FixedPointInt memory marginRequired;\n\n if (_isPut) {\n a = FPI.min(_strikePrice, spotShockValue.mul(_underlyingPrice));\n b = FPI.max(_strikePrice.sub(spotShockValue.mul(_underlyingPrice)), ZERO);\n marginRequired = optionUpperBoundValue.mul(a).add(b).mul(_shortAmount);\n } else {\n FPI.FixedPointInt memory one = FPI.fromScaledUint(1e27, SCALING_FACTOR);\n a = FPI.min(one, _strikePrice.mul(spotShockValue).div(_underlyingPrice));\n b = FPI.max(one.sub(_strikePrice.mul(spotShockValue).div(_underlyingPrice)), ZERO);\n marginRequired = optionUpperBoundValue.mul(a).add(b).mul(_shortAmount);\n }\n\n return marginRequired;\n }\n\n /**\n * @notice find upper bound value for product by specific expiry timestamp\n * @dev should return the upper bound value that correspond to option time to expiry, of if not found should return the next greater one, revert if no value found\n * @param _productHash product hash\n * @param _expiryTimestamp expiry timestamp\n * @return option upper bound value\n */\n function _findUpperBoundValue(bytes32 _productHash, uint256 _expiryTimestamp)\n internal\n view\n returns (FPI.FixedPointInt memory)\n {\n // get time to expiry array of this product hash\n uint256[] memory timesToExpiry = timesToExpiryForProduct[_productHash];\n\n // check that this product have upper bound values stored\n require(timesToExpiry.length != 0, \"MarginCalculator: product have no expiry values\");\n\n uint256 optionTimeToExpiry = _expiryTimestamp.sub(now);\n\n // check that the option time to expiry is in the expiry array\n require(\n timesToExpiry[timesToExpiry.length.sub(1)] >= optionTimeToExpiry,\n \"MarginCalculator: product have no upper bound value\"\n );\n\n // loop through the array and return the upper bound value in FixedPointInt type (already scaled by 1e27)\n for (uint8 i = 0; i < timesToExpiry.length; i++) {\n if (timesToExpiry[i] >= optionTimeToExpiry)\n return FPI.fromScaledUint(maxPriceAtTimeToExpiry[_productHash][timesToExpiry[i]], SCALING_FACTOR);\n }\n }\n\n /**\n * @dev returns the strike asset amount of margin required for a put or put spread with the given short oTokens, long oTokens and amounts\n *\n * marginRequired = max( (short amount * short strike) - (long strike * min (short amount, long amount)) , 0 )\n *\n * @return margin requirement denominated in the strike asset\n */\n function _getPutSpreadMarginRequired(\n FPI.FixedPointInt memory _shortAmount,\n FPI.FixedPointInt memory _longAmount,\n FPI.FixedPointInt memory _shortStrike,\n FPI.FixedPointInt memory _longStrike\n ) internal view returns (FPI.FixedPointInt memory) {\n return FPI.max(_shortAmount.mul(_shortStrike).sub(_longStrike.mul(FPI.min(_shortAmount, _longAmount))), ZERO);\n }\n\n /**\n * @dev returns the underlying asset amount required for a call or call spread with the given short oTokens, long oTokens, and amounts\n *\n * (long strike - short strike) * short amount\n * marginRequired = max( ------------------------------------------------- , max (short amount - long amount, 0) )\n * long strike\n *\n * @dev if long strike = 0, return max( short amount - long amount, 0)\n * @return margin requirement denominated in the underlying asset\n */\n function _getCallSpreadMarginRequired(\n FPI.FixedPointInt memory _shortAmount,\n FPI.FixedPointInt memory _longAmount,\n FPI.FixedPointInt memory _shortStrike,\n FPI.FixedPointInt memory _longStrike\n ) internal view returns (FPI.FixedPointInt memory) {\n // max (short amount - long amount , 0)\n if (_longStrike.isEqual(ZERO)) {\n return FPI.max(_shortAmount.sub(_longAmount), ZERO);\n }\n\n /**\n * (long strike - short strike) * short amount\n * calculate ----------------------------------------------\n * long strike\n */\n FPI.FixedPointInt memory firstPart = _longStrike.sub(_shortStrike).mul(_shortAmount).div(_longStrike);\n\n /**\n * calculate max ( short amount - long amount , 0)\n */\n FPI.FixedPointInt memory secondPart = FPI.max(_shortAmount.sub(_longAmount), ZERO);\n\n return FPI.max(firstPart, secondPart);\n }\n\n /**\n * @notice convert an amount in asset A to equivalent amount of asset B, based on a live price\n * @dev function includes the amount and applies .mul() first to increase the accuracy\n * @param _amount amount in asset A\n * @param _assetA asset A\n * @param _assetB asset B\n * @return _amount in asset B\n */\n function _convertAmountOnLivePrice(\n FPI.FixedPointInt memory _amount,\n address _assetA,\n address _assetB\n ) internal view returns (FPI.FixedPointInt memory) {\n if (_assetA == _assetB) {\n return _amount;\n }\n uint256 priceA = oracle.getPrice(_assetA);\n uint256 priceB = oracle.getPrice(_assetB);\n // amount A * price A in USD = amount B * price B in USD\n // amount B = amount A * price A / price B\n return _amount.mul(FPI.fromScaledUint(priceA, BASE)).div(FPI.fromScaledUint(priceB, BASE));\n }\n\n /**\n * @notice convert an amount in asset A to equivalent amount of asset B, based on an expiry price\n * @dev function includes the amount and apply .mul() first to increase the accuracy\n * @param _amount amount in asset A\n * @param _assetA asset A\n * @param _assetB asset B\n * @return _amount in asset B\n */\n function _convertAmountOnExpiryPrice(\n FPI.FixedPointInt memory _amount,\n address _assetA,\n address _assetB,\n uint256 _expiry\n ) internal view returns (FPI.FixedPointInt memory) {\n if (_assetA == _assetB) {\n return _amount;\n }\n (uint256 priceA, bool priceAFinalized) = oracle.getExpiryPrice(_assetA, _expiry);\n (uint256 priceB, bool priceBFinalized) = oracle.getExpiryPrice(_assetB, _expiry);\n require(priceAFinalized && priceBFinalized, \"MarginCalculator: price at expiry not finalized yet\");\n // amount A * price A in USD = amount B * price B in USD\n // amount B = amount A * price A / price B\n return _amount.mul(FPI.fromScaledUint(priceA, BASE)).div(FPI.fromScaledUint(priceB, BASE));\n }\n\n /**\n * @notice return debt price, how much collateral asset per 1 otoken repaid in collateral decimal\n * ending price = vault collateral / vault debt\n * if auction ended, return ending price\n * else calculate starting price\n * for put option:\n * starting price = max(cash value - underlying price * oracle deviation, 0)\n * for call option:\n * max(cash value - underlying price * oracle deviation, 0)\n * starting price = ---------------------------------------------------------------\n * underlying price\n *\n *\n * starting price + (ending price - starting price) * auction elapsed time\n * then price = --------------------------------------------------------------------------\n * auction time\n *\n *\n * @param _vaultCollateral vault collateral amount\n * @param _vaultDebt vault short amount\n * @param _cashValue option cash value\n * @param _spotPrice option underlying asset price (in USDC)\n * @param _auctionStartingTime auction starting timestamp (_spotPrice timestamp from chainlink)\n * @param _collateralDecimals collateral asset decimals\n * @param _isPut otoken type, true for put, false for call option\n * @return price of 1 debt otoken in collateral asset scaled by collateral decimals\n */\n function _getDebtPrice(\n FPI.FixedPointInt memory _vaultCollateral,\n FPI.FixedPointInt memory _vaultDebt,\n FPI.FixedPointInt memory _cashValue,\n FPI.FixedPointInt memory _spotPrice,\n uint256 _auctionStartingTime,\n uint256 _collateralDecimals,\n bool _isPut\n ) internal view returns (uint256) {\n // price of 1 repaid otoken in collateral asset, scaled to 1e27\n FPI.FixedPointInt memory price;\n // auction ending price\n FPI.FixedPointInt memory endingPrice = _vaultCollateral.div(_vaultDebt);\n\n // auction elapsed time\n uint256 auctionElapsedTime = now.sub(_auctionStartingTime);\n\n // if auction ended, return ending price\n if (auctionElapsedTime >= AUCTION_TIME) {\n price = endingPrice;\n } else {\n // starting price\n FPI.FixedPointInt memory startingPrice;\n\n {\n // store oracle deviation in a FixedPointInt (already scaled by 1e27)\n FPI.FixedPointInt memory fixedOracleDeviation = FPI.fromScaledUint(oracleDeviation, SCALING_FACTOR);\n\n if (_isPut) {\n startingPrice = FPI.max(_cashValue.sub(fixedOracleDeviation.mul(_spotPrice)), ZERO);\n } else {\n startingPrice = FPI.max(_cashValue.sub(fixedOracleDeviation.mul(_spotPrice)), ZERO).div(_spotPrice);\n }\n }\n\n // store auctionElapsedTime in a FixedPointInt scaled by 1e27\n FPI.FixedPointInt memory auctionElapsedTimeFixedPoint = FPI.fromScaledUint(auctionElapsedTime, 18);\n // store AUCTION_TIME in a FixedPointInt (already scaled by 1e27)\n FPI.FixedPointInt memory auctionTime = FPI.fromScaledUint(AUCTION_TIME, 18);\n\n // calculate price of 1 repaid otoken, scaled by the collateral decimals, expilictly rounded down\n price = startingPrice.add(\n (endingPrice.sub(startingPrice)).mul(auctionElapsedTimeFixedPoint).div(auctionTime)\n );\n\n // cap liquidation price to ending price\n if (price.isGreaterThan(endingPrice)) price = endingPrice;\n }\n\n return price.toScaledUint(_collateralDecimals, true);\n }\n\n /**\n * @notice get vault details to save us from making multiple external calls\n * @param _vault vault struct\n * @param _vaultType vault type, 0 for max loss/spreads and 1 for naked margin vault\n * @return vault details in VaultDetails struct\n */\n function _getVaultDetails(MarginVault.Vault memory _vault, uint256 _vaultType)\n internal\n view\n returns (VaultDetails memory)\n {\n VaultDetails memory vaultDetails = VaultDetails(\n address(0),\n address(0),\n address(0),\n address(0),\n address(0),\n address(0),\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n false\n );\n\n // check if vault has long, short otoken and collateral asset\n vaultDetails.hasLong = _isNotEmpty(_vault.longOtokens);\n vaultDetails.hasShort = _isNotEmpty(_vault.shortOtokens);\n vaultDetails.hasCollateral = _isNotEmpty(_vault.collateralAssets);\n\n vaultDetails.vaultType = _vaultType;\n\n // get vault long otoken if available\n if (vaultDetails.hasLong) {\n OtokenInterface long = OtokenInterface(_vault.longOtokens[0]);\n (\n vaultDetails.longCollateralAsset,\n vaultDetails.longUnderlyingAsset,\n vaultDetails.longStrikeAsset,\n vaultDetails.longStrikePrice,\n vaultDetails.longExpiryTimestamp,\n vaultDetails.isLongPut\n ) = _getOtokenDetails(address(long));\n vaultDetails.longCollateralDecimals = uint256(ERC20Interface(vaultDetails.longCollateralAsset).decimals());\n }\n\n // get vault short otoken if available\n if (vaultDetails.hasShort) {\n OtokenInterface short = OtokenInterface(_vault.shortOtokens[0]);\n (\n vaultDetails.shortCollateralAsset,\n vaultDetails.shortUnderlyingAsset,\n vaultDetails.shortStrikeAsset,\n vaultDetails.shortStrikePrice,\n vaultDetails.shortExpiryTimestamp,\n vaultDetails.isShortPut\n ) = _getOtokenDetails(address(short));\n vaultDetails.shortCollateralDecimals = uint256(\n ERC20Interface(vaultDetails.shortCollateralAsset).decimals()\n );\n }\n\n if (vaultDetails.hasCollateral) {\n vaultDetails.collateralDecimals = uint256(ERC20Interface(_vault.collateralAssets[0]).decimals());\n }\n\n return vaultDetails;\n }\n\n /**\n * @dev calculate the cash value obligation for an expired vault, where a positive number is an obligation\n *\n * Formula: net = (short cash value * short amount) - ( long cash value * long Amount )\n *\n * @return cash value obligation denominated in the strike asset\n */\n function _getExpiredSpreadCashValue(\n FPI.FixedPointInt memory _shortAmount,\n FPI.FixedPointInt memory _longAmount,\n FPI.FixedPointInt memory _shortCashValue,\n FPI.FixedPointInt memory _longCashValue\n ) internal pure returns (FPI.FixedPointInt memory) {\n return _shortCashValue.mul(_shortAmount).sub(_longCashValue.mul(_longAmount));\n }\n\n /**\n * @dev check if asset array contain a token address\n * @return True if the array is not empty\n */\n function _isNotEmpty(address[] memory _assets) internal pure returns (bool) {\n return _assets.length > 0 && _assets[0] != address(0);\n }\n\n /**\n * @dev ensure that:\n * a) at most 1 asset type used as collateral\n * b) at most 1 series of option used as the long option\n * c) at most 1 series of option used as the short option\n * d) asset array lengths match for long, short and collateral\n * e) long option and collateral asset is acceptable for margin with short asset\n * @param _vault the vault to check\n * @param _vaultDetails vault details struct\n */\n function _checkIsValidVault(MarginVault.Vault memory _vault, VaultDetails memory _vaultDetails) internal pure {\n // ensure all the arrays in the vault are valid\n require(_vault.shortOtokens.length <= 1, \"MarginCalculator: Too many short otokens in the vault\");\n require(_vault.longOtokens.length <= 1, \"MarginCalculator: Too many long otokens in the vault\");\n require(_vault.collateralAssets.length <= 1, \"MarginCalculator: Too many collateral assets in the vault\");\n\n require(\n _vault.shortOtokens.length == _vault.shortAmounts.length,\n \"MarginCalculator: Short asset and amount mismatch\"\n );\n require(\n _vault.longOtokens.length == _vault.longAmounts.length,\n \"MarginCalculator: Long asset and amount mismatch\"\n );\n require(\n _vault.collateralAssets.length == _vault.collateralAmounts.length,\n \"MarginCalculator: Collateral asset and amount mismatch\"\n );\n\n // ensure the long asset is valid for the short asset\n require(\n _isMarginableLong(_vault, _vaultDetails),\n \"MarginCalculator: long asset not marginable for short asset\"\n );\n\n // ensure that the collateral asset is valid for the short asset\n require(\n _isMarginableCollateral(_vault, _vaultDetails),\n \"MarginCalculator: collateral asset not marginable for short asset\"\n );\n }\n\n /**\n * @dev if there is a short option and a long option in the vault, ensure that the long option is able to be used as collateral for the short option\n * @param _vault the vault to check\n * @param _vaultDetails vault details struct\n * @return true if long is marginable or false if not\n */\n function _isMarginableLong(MarginVault.Vault memory _vault, VaultDetails memory _vaultDetails)\n internal\n pure\n returns (bool)\n {\n if (_vaultDetails.vaultType == 1)\n require(!_vaultDetails.hasLong, \"MarginCalculator: naked margin vault cannot have long otoken\");\n\n // if vault is missing a long or a short, return True\n if (!_vaultDetails.hasLong || !_vaultDetails.hasShort) return true;\n\n return\n _vault.longOtokens[0] != _vault.shortOtokens[0] &&\n _vaultDetails.longUnderlyingAsset == _vaultDetails.shortUnderlyingAsset &&\n _vaultDetails.longStrikeAsset == _vaultDetails.shortStrikeAsset &&\n _vaultDetails.longCollateralAsset == _vaultDetails.shortCollateralAsset &&\n _vaultDetails.longExpiryTimestamp == _vaultDetails.shortExpiryTimestamp &&\n _vaultDetails.isLongPut == _vaultDetails.isShortPut;\n }\n\n /**\n * @dev if there is short option and collateral asset in the vault, ensure that the collateral asset is valid for the short option\n * @param _vault the vault to check\n * @param _vaultDetails vault details struct\n * @return true if marginable or false\n */\n function _isMarginableCollateral(MarginVault.Vault memory _vault, VaultDetails memory _vaultDetails)\n internal\n pure\n returns (bool)\n {\n bool isMarginable = true;\n\n if (!_vaultDetails.hasCollateral) return isMarginable;\n\n if (_vaultDetails.hasShort) {\n isMarginable = _vaultDetails.shortCollateralAsset == _vault.collateralAssets[0];\n } else if (_vaultDetails.hasLong) {\n isMarginable = _vaultDetails.longCollateralAsset == _vault.collateralAssets[0];\n }\n\n return isMarginable;\n }\n\n /**\n * @notice get a product hash\n * @param _underlying option underlying asset\n * @param _strike option strike asset\n * @param _collateral option collateral asset\n * @param _isPut option type\n * @return product hash\n */\n function _getProductHash(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut\n ) internal pure returns (bytes32) {\n return keccak256(abi.encode(_underlying, _strike, _collateral, _isPut));\n }\n\n /**\n * @notice get option cash value\n * @dev this assume that the underlying price is denominated in strike asset\n * cash value = max(underlying price - strike price, 0)\n * @param _strikePrice option strike price\n * @param _underlyingPrice option underlying price\n * @param _isPut option type, true for put and false for call option\n */\n function _getCashValue(\n FPI.FixedPointInt memory _strikePrice,\n FPI.FixedPointInt memory _underlyingPrice,\n bool _isPut\n ) internal view returns (FPI.FixedPointInt memory) {\n if (_isPut) return _strikePrice.isGreaterThan(_underlyingPrice) ? _strikePrice.sub(_underlyingPrice) : ZERO;\n\n return _underlyingPrice.isGreaterThan(_strikePrice) ? _underlyingPrice.sub(_strikePrice) : ZERO;\n }\n\n /**\n * @dev get otoken detail, from both otoken versions\n */\n function _getOtokenDetails(address _otoken)\n internal\n view\n returns (\n address,\n address,\n address,\n uint256,\n uint256,\n bool\n )\n {\n OtokenInterface otoken = OtokenInterface(_otoken);\n try otoken.getOtokenDetails() returns (\n address collateral,\n address underlying,\n address strike,\n uint256 strikePrice,\n uint256 expiry,\n bool isPut\n ) {\n return (collateral, underlying, strike, strikePrice, expiry, isPut);\n } catch {\n // v1 otoken\n return (\n otoken.collateralAsset(),\n otoken.underlyingAsset(),\n otoken.strikeAsset(),\n otoken.strikePrice(),\n otoken.expiryTimestamp(),\n otoken.isPut()\n );\n }\n }\n}\n"
+ },
+ "contracts/libs/FixedPointInt256.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\nimport \"../packages/oz/SignedSafeMath.sol\";\nimport \"../libs/SignedConverter.sol\";\nimport \"../packages/oz/SafeMath.sol\";\n\n/**\n * @title FixedPointInt256\n * @author Opyn Team\n * @notice FixedPoint library\n */\nlibrary FixedPointInt256 {\n using SignedSafeMath for int256;\n using SignedConverter for int256;\n using SafeMath for uint256;\n using SignedConverter for uint256;\n\n int256 private constant SCALING_FACTOR = 1e27;\n uint256 private constant BASE_DECIMALS = 27;\n\n struct FixedPointInt {\n int256 value;\n }\n\n /**\n * @notice constructs an `FixedPointInt` from an unscaled int, e.g., `b=5` gets stored internally as `5**27`.\n * @param a int to convert into a FixedPoint.\n * @return the converted FixedPoint.\n */\n function fromUnscaledInt(int256 a) internal pure returns (FixedPointInt memory) {\n return FixedPointInt(a.mul(SCALING_FACTOR));\n }\n\n /**\n * @notice constructs an FixedPointInt from an scaled uint with {_decimals} decimals\n * Examples:\n * (1) USDC decimals = 6\n * Input: 5 * 1e6 USDC => Output: 5 * 1e27 (FixedPoint 5.0 USDC)\n * (2) cUSDC decimals = 8\n * Input: 5 * 1e6 cUSDC => Output: 5 * 1e25 (FixedPoint 0.05 cUSDC)\n * @param _a uint256 to convert into a FixedPoint.\n * @param _decimals original decimals _a has\n * @return the converted FixedPoint, with 27 decimals.\n */\n function fromScaledUint(uint256 _a, uint256 _decimals) internal pure returns (FixedPointInt memory) {\n FixedPointInt memory fixedPoint;\n\n if (_decimals == BASE_DECIMALS) {\n fixedPoint = FixedPointInt(_a.uintToInt());\n } else if (_decimals > BASE_DECIMALS) {\n uint256 exp = _decimals.sub(BASE_DECIMALS);\n fixedPoint = FixedPointInt((_a.div(10**exp)).uintToInt());\n } else {\n uint256 exp = BASE_DECIMALS - _decimals;\n fixedPoint = FixedPointInt((_a.mul(10**exp)).uintToInt());\n }\n\n return fixedPoint;\n }\n\n /**\n * @notice convert a FixedPointInt number to an uint256 with a specific number of decimals\n * @param _a FixedPointInt to convert\n * @param _decimals number of decimals that the uint256 should be scaled to\n * @param _roundDown True to round down the result, False to round up\n * @return the converted uint256\n */\n function toScaledUint(\n FixedPointInt memory _a,\n uint256 _decimals,\n bool _roundDown\n ) internal pure returns (uint256) {\n uint256 scaledUint;\n\n if (_decimals == BASE_DECIMALS) {\n scaledUint = _a.value.intToUint();\n } else if (_decimals > BASE_DECIMALS) {\n uint256 exp = _decimals - BASE_DECIMALS;\n scaledUint = (_a.value).intToUint().mul(10**exp);\n } else {\n uint256 exp = BASE_DECIMALS - _decimals;\n uint256 tailing;\n if (!_roundDown) {\n uint256 remainer = (_a.value).intToUint().mod(10**exp);\n if (remainer > 0) tailing = 1;\n }\n scaledUint = (_a.value).intToUint().div(10**exp).add(tailing);\n }\n\n return scaledUint;\n }\n\n /**\n * @notice add two signed integers, a + b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return sum of the two signed integers\n */\n function add(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (FixedPointInt memory) {\n return FixedPointInt(a.value.add(b.value));\n }\n\n /**\n * @notice subtract two signed integers, a-b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return difference of two signed integers\n */\n function sub(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (FixedPointInt memory) {\n return FixedPointInt(a.value.sub(b.value));\n }\n\n /**\n * @notice multiply two signed integers, a by b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return mul of two signed integers\n */\n function mul(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (FixedPointInt memory) {\n return FixedPointInt((a.value.mul(b.value)) / SCALING_FACTOR);\n }\n\n /**\n * @notice divide two signed integers, a by b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return div of two signed integers\n */\n function div(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (FixedPointInt memory) {\n return FixedPointInt((a.value.mul(SCALING_FACTOR)) / b.value);\n }\n\n /**\n * @notice minimum between two signed integers, a and b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return min of two signed integers\n */\n function min(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (FixedPointInt memory) {\n return a.value < b.value ? a : b;\n }\n\n /**\n * @notice maximum between two signed integers, a and b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return max of two signed integers\n */\n function max(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (FixedPointInt memory) {\n return a.value > b.value ? a : b;\n }\n\n /**\n * @notice is a is equal to b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return True if equal, False if not\n */\n function isEqual(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (bool) {\n return a.value == b.value;\n }\n\n /**\n * @notice is a greater than b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return True if a > b, False if not\n */\n function isGreaterThan(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (bool) {\n return a.value > b.value;\n }\n\n /**\n * @notice is a greater than or equal to b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return True if a >= b, False if not\n */\n function isGreaterThanOrEqual(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (bool) {\n return a.value >= b.value;\n }\n\n /**\n * @notice is a is less than b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return True if a < b, False if not\n */\n function isLessThan(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (bool) {\n return a.value < b.value;\n }\n\n /**\n * @notice is a less than or equal to b\n * @param a FixedPointInt\n * @param b FixedPointInt\n * @return True if a <= b, False if not\n */\n function isLessThanOrEqual(FixedPointInt memory a, FixedPointInt memory b) internal pure returns (bool) {\n return a.value <= b.value;\n }\n}\n"
+ },
+ "contracts/packages/oz/SignedSafeMath.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\n/* solhint-disable */\npragma solidity ^0.6.0;\n\n/**\n * @title SignedSafeMath\n * @dev Signed math operations with safety checks that revert on error.\n */\nlibrary SignedSafeMath {\n int256 private constant _INT256_MIN = -2**255;\n\n /**\n * @dev Returns the multiplication of two signed integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(int256 a, int256 b) internal pure returns (int256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) {\n return 0;\n }\n\n require(!(a == -1 && b == _INT256_MIN), \"SignedSafeMath: multiplication overflow\");\n\n int256 c = a * b;\n require(c / a == b, \"SignedSafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two signed integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(int256 a, int256 b) internal pure returns (int256) {\n require(b != 0, \"SignedSafeMath: division by zero\");\n require(!(b == -1 && a == _INT256_MIN), \"SignedSafeMath: division overflow\");\n\n int256 c = a / b;\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a - b;\n require((b >= 0 && c <= a) || (b < 0 && c > a), \"SignedSafeMath: subtraction overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a + b;\n require((b >= 0 && c >= a) || (b < 0 && c < a), \"SignedSafeMath: addition overflow\");\n\n return c;\n }\n}\n"
+ },
+ "contracts/libs/SignedConverter.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\n/**\n * @title SignedConverter\n * @author Opyn Team\n * @notice A library to convert an unsigned integer to signed integer or signed integer to unsigned integer.\n */\nlibrary SignedConverter {\n /**\n * @notice convert an unsigned integer to a signed integer\n * @param a uint to convert into a signed integer\n * @return converted signed integer\n */\n function uintToInt(uint256 a) internal pure returns (int256) {\n require(a < 2**255, \"FixedPointInt256: out of int range\");\n\n return int256(a);\n }\n\n /**\n * @notice convert a signed integer to an unsigned integer\n * @param a int to convert into an unsigned integer\n * @return converted unsigned integer\n */\n function intToUint(int256 a) internal pure returns (uint256) {\n if (a < 0) {\n return uint256(-a);\n } else {\n return uint256(a);\n }\n }\n}\n"
+ },
+ "contracts/tests/CalculatorTester.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\npragma experimental ABIEncoderV2;\n\nimport {MarginCalculator} from \"../core/MarginCalculator.sol\";\nimport {FixedPointInt256} from \"../libs/FixedPointInt256.sol\";\n\ncontract CalculatorTester is MarginCalculator {\n constructor(address _addressBook) public MarginCalculator(_addressBook) {}\n\n function getExpiredCashValue(\n address _underlying,\n address _strike,\n uint256 _expiryTimestamp,\n uint256 _strikePrice,\n bool _isPut\n ) external view returns (uint256) {\n return\n FixedPointInt256.toScaledUint(\n _getExpiredCashValue(_underlying, _strike, _expiryTimestamp, _strikePrice, _isPut),\n BASE,\n true\n );\n }\n\n function findUpperBoundValue(\n address _underlying,\n address _strike,\n address _collateral,\n bool _isPut,\n uint256 _expiryTimestamp\n ) external view returns (uint256) {\n bytes32 productHash = keccak256(abi.encode(_underlying, _strike, _collateral, _isPut));\n\n return FixedPointInt256.toScaledUint(_findUpperBoundValue(productHash, _expiryTimestamp), 27, false);\n }\n\n function price(\n uint256 _vaultCollateral,\n uint256 _vaultDebt,\n uint256 _cv,\n uint256 _spotPrice,\n uint256 _auctionStartingTime,\n uint256 _collateralDecimals,\n bool _isPut\n ) external view returns (uint256) {\n FixedPointInt256.FixedPointInt memory vaultCollateral = FixedPointInt256.fromScaledUint(\n _vaultCollateral,\n _collateralDecimals\n );\n FixedPointInt256.FixedPointInt memory vaultDebt = FixedPointInt256.fromScaledUint(_vaultDebt, BASE);\n FixedPointInt256.FixedPointInt memory cv = FixedPointInt256.fromScaledUint(_cv, BASE);\n FixedPointInt256.FixedPointInt memory spotPrice = FixedPointInt256.fromScaledUint(_spotPrice, BASE);\n\n return\n _getDebtPrice(vaultCollateral, vaultDebt, cv, spotPrice, _auctionStartingTime, _collateralDecimals, _isPut);\n }\n}\n"
+ },
+ "contracts/tests/FixedPointInt256Tester.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport \"../libs/FixedPointInt256.sol\";\n\n/**\n * @author Opyn Team\n * @notice FixedPointInt256 contract tester\n */\ncontract FixedPointInt256Tester {\n using FixedPointInt256 for FixedPointInt256.FixedPointInt;\n\n function testFromUnscaledInt(int256 a) external pure returns (FixedPointInt256.FixedPointInt memory) {\n return FixedPointInt256.fromUnscaledInt(a);\n }\n\n function testAdd(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (FixedPointInt256.FixedPointInt memory)\n {\n return a.add(b);\n }\n\n function testSub(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (FixedPointInt256.FixedPointInt memory)\n {\n return a.sub(b);\n }\n\n function testMul(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (FixedPointInt256.FixedPointInt memory)\n {\n return a.mul(b);\n }\n\n function testDiv(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (FixedPointInt256.FixedPointInt memory)\n {\n return a.div(b);\n }\n\n function testMin(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (FixedPointInt256.FixedPointInt memory)\n {\n return FixedPointInt256.min(a, b);\n }\n\n function testMax(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (FixedPointInt256.FixedPointInt memory)\n {\n return FixedPointInt256.max(a, b);\n }\n\n function testIsEqual(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (bool)\n {\n return a.isEqual(b);\n }\n\n function testIsGreaterThan(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (bool)\n {\n return a.isGreaterThan(b);\n }\n\n function testIsGreaterThanOrEqual(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (bool)\n {\n return a.isGreaterThanOrEqual(b);\n }\n\n function testIsLessThan(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (bool)\n {\n return a.isLessThan(b);\n }\n\n function testIsLessThanOrEqual(FixedPointInt256.FixedPointInt memory a, FixedPointInt256.FixedPointInt memory b)\n external\n pure\n returns (bool)\n {\n return a.isLessThanOrEqual(b);\n }\n}\n"
+ },
+ "contracts/tests/SignedConverterTester.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport \"../libs/SignedConverter.sol\";\n\n/**\n * @author Opyn Team\n * @notice SignedConverter contract tester\n */\ncontract SignedConverterTester {\n using SignedConverter for int256;\n using SignedConverter for uint256;\n\n function testFromInt(int256 a) external pure returns (uint256) {\n return SignedConverter.intToUint(a);\n }\n\n function testFromUint(uint256 a) external pure returns (int256) {\n return SignedConverter.uintToInt(a);\n }\n}\n"
+ },
+ "contracts/tests/MarginVaultTester.sol": {
+ "content": "pragma solidity =0.6.10;\n\n// SPDX-License-Identifier: UNLICENSED\npragma experimental ABIEncoderV2;\n\nimport {MarginVault} from \"../libs/MarginVault.sol\";\n\ncontract MarginVaultTester {\n using MarginVault for MarginVault.Vault;\n\n mapping(address => mapping(uint256 => MarginVault.Vault)) private vault;\n\n function getVault(uint256 _vaultIndex) external view returns (MarginVault.Vault memory) {\n return vault[msg.sender][_vaultIndex];\n }\n\n function testAddShort(\n uint256 _vaultIndex,\n address _shortOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n vault[msg.sender][_vaultIndex].addShort(_shortOtoken, _amount, _index);\n }\n\n function testRemoveShort(\n uint256 _vaultIndex,\n address _shortOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n vault[msg.sender][_vaultIndex].removeShort(_shortOtoken, _amount, _index);\n }\n\n function testAddLong(\n uint256 _vaultIndex,\n address _longOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n vault[msg.sender][_vaultIndex].addLong(_longOtoken, _amount, _index);\n }\n\n function testRemoveLong(\n uint256 _vaultIndex,\n address _longOtoken,\n uint256 _amount,\n uint256 _index\n ) external {\n vault[msg.sender][_vaultIndex].removeLong(_longOtoken, _amount, _index);\n }\n\n function testAddCollateral(\n uint256 _vaultIndex,\n address _collateralAsset,\n uint256 _amount,\n uint256 _index\n ) external {\n vault[msg.sender][_vaultIndex].addCollateral(_collateralAsset, _amount, _index);\n }\n\n function testRemoveCollateral(\n uint256 _vaultIndex,\n address _collateralAsset,\n uint256 _amount,\n uint256 _index\n ) external {\n vault[msg.sender][_vaultIndex].removeCollateral(_collateralAsset, _amount, _index);\n }\n}\n"
+ },
+ "contracts/tests/ActionTester.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {Actions} from \"../libs/Actions.sol\";\n\ncontract ActionTester {\n Actions.OpenVaultArgs private openVaultArgs;\n Actions.DepositArgs private depositArgs;\n Actions.WithdrawArgs private withdrawArgs;\n Actions.MintArgs private mintArgs;\n Actions.BurnArgs private burnArgs;\n Actions.RedeemArgs private redeemArgs;\n Actions.SettleVaultArgs private settleVaultArgs;\n Actions.CallArgs private callArgs;\n Actions.LiquidateArgs private liquidateArgs;\n\n function testParseDespositAction(Actions.ActionArgs memory _args) external {\n depositArgs = Actions._parseDepositArgs(_args);\n }\n\n function getDepositArgs() external view returns (Actions.DepositArgs memory) {\n return depositArgs;\n }\n\n function testParseWithdrawAction(Actions.ActionArgs memory _args) external {\n withdrawArgs = Actions._parseWithdrawArgs(_args);\n }\n\n function getWithdrawArgs() external view returns (Actions.WithdrawArgs memory) {\n return withdrawArgs;\n }\n\n function testParseOpenVaultAction(Actions.ActionArgs memory _args) external {\n openVaultArgs = Actions._parseOpenVaultArgs(_args);\n }\n\n function getOpenVaultArgs() external view returns (Actions.OpenVaultArgs memory) {\n return openVaultArgs;\n }\n\n function testParseRedeemAction(Actions.ActionArgs memory _args) external {\n redeemArgs = Actions._parseRedeemArgs(_args);\n }\n\n function getRedeemArgs() external view returns (Actions.RedeemArgs memory) {\n return redeemArgs;\n }\n\n function testParseSettleVaultAction(Actions.ActionArgs memory _args) external {\n settleVaultArgs = Actions._parseSettleVaultArgs(_args);\n }\n\n function testParseLiquidateActions(Actions.ActionArgs memory _args) external {\n liquidateArgs = Actions._parseLiquidateArgs(_args);\n }\n\n function getSettleVaultArgs() external view returns (Actions.SettleVaultArgs memory) {\n return settleVaultArgs;\n }\n\n function testParseMintAction(Actions.ActionArgs memory _args) external {\n mintArgs = Actions._parseMintArgs(_args);\n }\n\n function getMintArgs() external view returns (Actions.MintArgs memory) {\n return mintArgs;\n }\n\n function testParseBurnAction(Actions.ActionArgs memory _args) external {\n burnArgs = Actions._parseBurnArgs(_args);\n }\n\n function getBurnArgs() external view returns (Actions.BurnArgs memory) {\n return burnArgs;\n }\n\n function testParseCallAction(Actions.ActionArgs memory _args) external {\n callArgs = Actions._parseCallArgs(_args);\n }\n\n function getCallArgs() external view returns (Actions.CallArgs memory) {\n return callArgs;\n }\n\n function getLiquidateArgs() external view returns (Actions.LiquidateArgs memory) {\n return liquidateArgs;\n }\n}\n"
+ },
+ "contracts/external/callees/PermitCallee.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\npragma experimental ABIEncoderV2;\n\nimport {CalleeInterface} from \"../../interfaces/CalleeInterface.sol\";\nimport {IERC20PermitUpgradeable} from \"../../packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\";\n\n/**\n * @title PermitCallee\n * @author Opyn Team\n * @dev Contract for executing permit signature\n */\ncontract PermitCallee is CalleeInterface {\n function callFunction(address payable _sender, bytes memory _data) external override {\n (\n address token,\n address owner,\n address spender,\n uint256 amount,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) = abi.decode(_data, (address, address, address, uint256, uint256, uint8, bytes32, bytes32));\n\n IERC20PermitUpgradeable(token).permit(owner, spender, amount, deadline, v, r, s);\n }\n}\n"
+ },
+ "contracts/mocks/Mock0xExchange.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\npragma experimental ABIEncoderV2;\n\nimport {ZeroXExchangeInterface} from \"../interfaces/ZeroXExchangeInterface.sol\";\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeERC20} from \"../packages/oz/SafeERC20.sol\";\nimport {Mock0xERC20Proxy} from \"./Mock0xERC20Proxy.sol\";\n\n/**\n * @notice Mock 0x Exchange\n */\ncontract Mock0xExchange {\n using SafeERC20 for ERC20Interface;\n uint256 public called = 0;\n uint256 public takerAmount;\n uint256 public makerAmount;\n bytes public signature;\n uint256 public fillAmount;\n Mock0xERC20Proxy public proxy;\n\n constructor() public {\n proxy = new Mock0xERC20Proxy(); //TODO: what is this? do we need it?\n }\n\n function fillLimitOrder(\n ZeroXExchangeInterface.LimitOrder memory _order,\n ZeroXExchangeInterface.Signature memory _signature,\n uint128 _takerTokenFillAmount\n ) public payable returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount) {\n return (0, 0);\n }\n\n function batchFillLimitOrders(\n ZeroXExchangeInterface.LimitOrder[] memory _orders,\n ZeroXExchangeInterface.Signature[] memory _signatures,\n uint128[] memory _takerTokenFillAmounts,\n bool _revertIfIncomplete\n ) external payable returns (uint128[] memory takerTokenFilledAmounts, uint128[] memory makerTokenFilledAmounts) {\n for (uint256 i = 0; i < _orders.length; i++) {\n (takerTokenFilledAmounts[i], makerTokenFilledAmounts[i]) = fillLimitOrder(\n _orders[i],\n _signatures[i],\n _takerTokenFillAmounts[i]\n );\n }\n return (takerTokenFilledAmounts, makerTokenFilledAmounts);\n }\n}\n"
+ },
+ "contracts/interfaces/ZeroXExchangeInterface.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\n\npragma experimental ABIEncoderV2;\n\n/**\n * @dev ZeroX Exchange contract interface.\n */\ninterface ZeroXExchangeInterface {\n // solhint-disable max-line-length\n /// @dev Canonical order structure\n struct LimitOrder {\n address makerToken; // The ERC20 token the maker is selling and the maker is selling to the taker.\n address takerToken; // The ERC20 token the taker is selling and the taker is selling to the maker.\n uint128 makerAmount; // The amount of makerToken being sold by the maker.\n uint128 takerAmount; // The amount of takerToken being sold by the taker.\n uint128 takerTokenFeeAmount; // Amount of takerToken paid by the taker to the feeRecipient.\n address maker; // The address of the maker, and signer, of this order.\n address taker; // Allowed taker address. Set to zero to allow any taker.\n address sender; // Allowed address to call fillLimitOrder() (msg.sender). This is the same as taker, expect when using meta-transactions. Set to zero to allow any caller.\n address feeRecipient; // Recipient of maker token or taker token fees (if non-zero).\n bytes32 pool; // The staking pool to attribute the 0x protocol fee from this order. Set to zero to attribute to the default pool, not owned by anyone.\n uint64 expiry; // The Unix timestamp in seconds when this order expires.\n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash.\n }\n\n struct Signature {\n uint8 signatureType; // Either 2 (EIP712) or 3 (EthSign)\n uint8 v; // Signature data.\n bytes32 r; // Signature data.\n bytes32 s; // Signature data.\n }\n\n /// @dev Executes multiple calls of fillLimitOrder.\n /// @param orders Array of order specifications.\n /// @param takerTokenFillAmounts Array of desired amounts of takerToken to sell in orders.\n /// @param signatures Array of proofs that orders have been created by makers.\n /// @return takerTokenFilledAmounts Array of amount of takerToken(s) filled.\n /// @return makerTokenFilledAmounts Array of amount of makerToken(s) filled.\n function batchFillLimitOrders(\n LimitOrder[] memory orders,\n Signature[] memory signatures,\n uint128[] memory takerTokenFillAmounts,\n bool revertIfIncomplete\n ) external payable returns (uint128[] memory takerTokenFilledAmounts, uint128[] memory makerTokenFilledAmounts);\n}\n"
+ },
+ "contracts/mocks/Mock0xERC20Proxy.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity 0.6.10;\npragma experimental ABIEncoderV2;\n\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {SafeERC20} from \"../packages/oz/SafeERC20.sol\";\n\n/**\n * @notice Mock 0x ERC20 Proxy\n\n */\ncontract Mock0xERC20Proxy {\n using SafeERC20 for ERC20Interface;\n\n function transferToken(\n address token,\n address from,\n address to,\n uint256 amount\n ) external {\n ERC20Interface(token).safeTransferFrom(from, to, amount);\n }\n}\n"
+ },
+ "contracts/core/MarginPool.sol": {
+ "content": "/**\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity =0.6.10;\n\nimport {ERC20Interface} from \"../interfaces/ERC20Interface.sol\";\nimport {AddressBookInterface} from \"../interfaces/AddressBookInterface.sol\";\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\nimport {SafeERC20} from \"../packages/oz/SafeERC20.sol\";\nimport {Ownable} from \"../packages/oz/Ownable.sol\";\n\n/**\n * @author Opyn Team\n * @title MarginPool\n * @notice Contract that holds all protocol funds\n */\ncontract MarginPool is Ownable {\n using SafeMath for uint256;\n using SafeERC20 for ERC20Interface;\n\n /// @notice AddressBook module\n address public addressBook;\n /// @dev the address that has the ability to withdraw excess assets in the pool\n address public farmer;\n /// @dev mapping between an asset and the amount of the asset in the pool\n mapping(address => uint256) internal assetBalance;\n\n /**\n * @notice contructor\n * @param _addressBook AddressBook module\n */\n constructor(address _addressBook) public {\n require(_addressBook != address(0), \"Invalid address book\");\n\n addressBook = _addressBook;\n }\n\n /// @notice emits an event when marginpool receive funds from controller\n event TransferToPool(address indexed asset, address indexed user, uint256 amount);\n /// @notice emits an event when marginpool transfer funds to controller\n event TransferToUser(address indexed asset, address indexed user, uint256 amount);\n /// @notice emit event after updating the farmer address\n event FarmerUpdated(address indexed oldAddress, address indexed newAddress);\n /// @notice emit event when an asset gets harvested from the pool\n event AssetFarmed(address indexed asset, address indexed receiver, uint256 amount);\n\n /**\n * @notice check if the sender is the Controller module\n */\n modifier onlyController() {\n require(\n msg.sender == AddressBookInterface(addressBook).getController(),\n \"MarginPool: Sender is not Controller\"\n );\n\n _;\n }\n\n /**\n * @notice check if the sender is the farmer address\n */\n modifier onlyFarmer() {\n require(msg.sender == farmer, \"MarginPool: Sender is not farmer\");\n\n _;\n }\n\n /**\n * @notice transfers an asset from a user to the pool\n * @param _asset address of the asset to transfer\n * @param _user address of the user to transfer assets from\n * @param _amount amount of the token to transfer from _user\n */\n function transferToPool(\n address _asset,\n address _user,\n uint256 _amount\n ) public onlyController {\n require(_amount > 0, \"MarginPool: transferToPool amount is equal to 0\");\n assetBalance[_asset] = assetBalance[_asset].add(_amount);\n\n // transfer _asset _amount from _user to pool\n ERC20Interface(_asset).safeTransferFrom(_user, address(this), _amount);\n emit TransferToPool(_asset, _user, _amount);\n }\n\n /**\n * @notice transfers an asset from the pool to a user\n * @param _asset address of the asset to transfer\n * @param _user address of the user to transfer assets to\n * @param _amount amount of the token to transfer to _user\n */\n function transferToUser(\n address _asset,\n address _user,\n uint256 _amount\n ) public onlyController {\n require(_user != address(this), \"MarginPool: cannot transfer assets to oneself\");\n assetBalance[_asset] = assetBalance[_asset].sub(_amount);\n\n // transfer _asset _amount from pool to _user\n ERC20Interface(_asset).safeTransfer(_user, _amount);\n emit TransferToUser(_asset, _user, _amount);\n }\n\n /**\n * @notice get the stored balance of an asset\n * @param _asset asset address\n * @return asset balance\n */\n function getStoredBalance(address _asset) external view returns (uint256) {\n return assetBalance[_asset];\n }\n\n /**\n * @notice transfers multiple assets from users to the pool\n * @param _asset addresses of the assets to transfer\n * @param _user addresses of the users to transfer assets to\n * @param _amount amount of each token to transfer to pool\n */\n function batchTransferToPool(\n address[] memory _asset,\n address[] memory _user,\n uint256[] memory _amount\n ) external onlyController {\n require(\n _asset.length == _user.length && _user.length == _amount.length,\n \"MarginPool: batchTransferToPool array lengths are not equal\"\n );\n\n for (uint256 i = 0; i < _asset.length; i++) {\n // transfer _asset _amount from _user to pool\n transferToPool(_asset[i], _user[i], _amount[i]);\n }\n }\n\n /**\n * @notice transfers multiple assets from the pool to users\n * @param _asset addresses of the assets to transfer\n * @param _user addresses of the users to transfer assets to\n * @param _amount amount of each token to transfer to _user\n */\n function batchTransferToUser(\n address[] memory _asset,\n address[] memory _user,\n uint256[] memory _amount\n ) external onlyController {\n require(\n _asset.length == _user.length && _user.length == _amount.length,\n \"MarginPool: batchTransferToUser array lengths are not equal\"\n );\n\n for (uint256 i = 0; i < _asset.length; i++) {\n // transfer _asset _amount from pool to _user\n transferToUser(_asset[i], _user[i], _amount[i]);\n }\n }\n\n /**\n * @notice function to collect the excess balance of a particular asset\n * @dev can only be called by the farmer address. Do not farm otokens.\n * @param _asset asset address\n * @param _receiver receiver address\n * @param _amount amount to remove from pool\n */\n function farm(\n address _asset,\n address _receiver,\n uint256 _amount\n ) external onlyFarmer {\n require(_receiver != address(0), \"MarginPool: invalid receiver address\");\n\n uint256 externalBalance = ERC20Interface(_asset).balanceOf(address(this));\n uint256 storedBalance = assetBalance[_asset];\n\n require(_amount <= externalBalance.sub(storedBalance), \"MarginPool: amount to farm exceeds limit\");\n\n ERC20Interface(_asset).safeTransfer(_receiver, _amount);\n\n emit AssetFarmed(_asset, _receiver, _amount);\n }\n\n /**\n * @notice function to set farmer address\n * @dev can only be called by MarginPool owner\n * @param _farmer farmer address\n */\n function setFarmer(address _farmer) external onlyOwner {\n emit FarmerUpdated(farmer, _farmer);\n\n farmer = _farmer;\n }\n}\n"
+ },
+ "contracts/mocks/MockDumbERC20.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n/* solhint-disable */\npragma solidity ^0.6.0;\n\nimport {SafeMath} from \"../packages/oz/SafeMath.sol\";\n\n/**\n * ERC20 Token that return false when operation failed\n */\ncontract MockDumbERC20 {\n using SafeMath for uint256;\n\n bool internal _locked;\n\n mapping(address => uint256) private _balances;\n\n mapping(address => mapping(address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n constructor(\n string memory name_,\n string memory symbol_,\n uint8 decimals_\n ) public {\n _name = name_;\n _symbol = symbol_;\n _decimals = decimals_;\n }\n\n function name() public view returns (string memory) {\n return _name;\n }\n\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n\n function totalSupply() public view returns (uint256) {\n return _totalSupply;\n }\n\n function balanceOf(address account) public view returns (uint256) {\n return _balances[account];\n }\n\n function transfer(address recipient, uint256 amount) public virtual returns (bool) {\n if (_locked) return false;\n if (_balances[msg.sender] < amount) {\n return false;\n }\n _balances[msg.sender] = _balances[msg.sender].sub(amount);\n _balances[recipient] = _balances[recipient].add(amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint256 amount) public virtual returns (bool) {\n _allowances[msg.sender][spender] = _allowances[msg.sender][spender].add(amount);\n return true;\n }\n\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public virtual returns (bool) {\n if (_locked) return false;\n if (_balances[sender] < amount) {\n return false;\n }\n if (_allowances[sender][msg.sender] < amount) {\n return false;\n }\n _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount);\n _balances[sender] = _balances[sender].sub(amount);\n _balances[recipient] = _balances[recipient].add(amount);\n return true;\n }\n\n function mint(address recipient, uint256 amount) public {\n _balances[recipient] = _balances[recipient].add(amount);\n }\n\n function burn(address recipient, uint256 amount) public {\n _balances[recipient] = _balances[recipient].sub(amount);\n }\n\n function setLocked(bool locked_) public {\n _locked = locked_;\n }\n}\n"
+ },
+ "contracts/mocks/MockCToken.sol": {
+ "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.6.10;\n\nimport {ERC20Upgradeable} from \"../packages/oz/upgradeability/ERC20Upgradeable.sol\";\n\ncontract MockCToken is ERC20Upgradeable {\n uint256 public exchangeRateStored;\n\n constructor(string memory _name, string memory _symbol) public {\n __ERC20_init_unchained(_name, _symbol);\n _setupDecimals(8);\n }\n\n function mint(address account, uint256 amount) public {\n _mint(account, amount);\n }\n\n function setExchangeRate(uint256 _exchangeRateStored) external {\n exchangeRateStored = _exchangeRateStored;\n }\n}\n"
+ },
+ "contracts/core/Otoken.sol": {
+ "content": "/* SPDX-License-Identifier: UNLICENSED */\npragma solidity =0.6.10;\n\nimport {ERC20Upgradeable} from \"../packages/oz/upgradeability/ERC20Upgradeable.sol\";\nimport {ERC20PermitUpgradeable} from \"../packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\";\nimport {Strings} from \"../packages/oz/Strings.sol\";\nimport {BokkyPooBahsDateTimeLibrary} from \"../packages/BokkyPooBahsDateTimeLibrary.sol\";\nimport {AddressBookInterface} from \"../interfaces/AddressBookInterface.sol\";\n\n/**\n * @title Otoken\n * @author Opyn Team\n * @notice Otoken is the ERC20 token for an option\n * @dev The Otoken inherits ERC20Upgradeable because we need to use the init instead of constructor\n */\ncontract Otoken is ERC20PermitUpgradeable {\n /// @notice address of the Controller module\n address public controller;\n\n /// @notice asset that the option references\n address public underlyingAsset;\n\n /// @notice asset that the strike price is denominated in\n address public strikeAsset;\n\n /// @notice asset that is held as collateral against short/written options\n address public collateralAsset;\n\n /// @notice strike price with decimals = 8\n uint256 public strikePrice;\n\n /// @notice expiration timestamp of the option, represented as a unix timestamp\n uint256 public expiryTimestamp;\n\n /// @notice True if a put option, False if a call option\n bool public isPut;\n\n uint256 private constant STRIKE_PRICE_SCALE = 1e8;\n uint256 private constant STRIKE_PRICE_DIGITS = 8;\n\n /**\n * @notice initialize the oToken\n * @param _addressBook addressbook module\n * @param _underlyingAsset asset that the option references\n * @param _strikeAsset asset that the strike price is denominated in\n * @param _collateralAsset asset that is held as collateral against short/written options\n * @param _strikePrice strike price with decimals = 8\n * @param _expiryTimestamp expiration timestamp of the option, represented as a unix timestamp\n * @param _isPut True if a put option, False if a call option\n */\n function init(\n address _addressBook,\n address _underlyingAsset,\n address _strikeAsset,\n address _collateralAsset,\n uint256 _strikePrice,\n uint256 _expiryTimestamp,\n bool _isPut\n ) external initializer {\n controller = AddressBookInterface(_addressBook).getController();\n underlyingAsset = _underlyingAsset;\n strikeAsset = _strikeAsset;\n collateralAsset = _collateralAsset;\n strikePrice = _strikePrice;\n expiryTimestamp = _expiryTimestamp;\n isPut = _isPut;\n (string memory tokenName, string memory tokenSymbol) = _getNameAndSymbol();\n __ERC20_init_unchained(tokenName, tokenSymbol);\n __ERC20Permit_init(tokenName);\n _setupDecimals(8);\n }\n\n function getOtokenDetails()\n external\n view\n returns (\n address,\n address,\n address,\n uint256,\n uint256,\n bool\n )\n {\n return (collateralAsset, underlyingAsset, strikeAsset, strikePrice, expiryTimestamp, isPut);\n }\n\n /**\n * @notice mint oToken for an account\n * @dev Controller only method where access control is taken care of by _beforeTokenTransfer hook\n * @param account account to mint token to\n * @param amount amount to mint\n */\n function mintOtoken(address account, uint256 amount) external {\n require(msg.sender == controller, \"Otoken: Only Controller can mint Otokens\");\n _mint(account, amount);\n }\n\n /**\n * @notice burn oToken from an account.\n * @dev Controller only method where access control is taken care of by _beforeTokenTransfer hook\n * @param account account to burn token from\n * @param amount amount to burn\n */\n function burnOtoken(address account, uint256 amount) external {\n require(msg.sender == controller, \"Otoken: Only Controller can burn Otokens\");\n _burn(account, amount);\n }\n\n /**\n * @notice generates the name and symbol for an option\n * @dev this function uses a named return variable to avoid the stack-too-deep error\n * @return tokenName (ex: ETHUSDC 05-September-2020 200 Put USDC Collateral)\n * @return tokenSymbol (ex: oETHUSDC-05SEP20-200P)\n */\n function _getNameAndSymbol() internal view returns (string memory tokenName, string memory tokenSymbol) {\n string memory underlying = ERC20Upgradeable(underlyingAsset).symbol();\n string memory strike = ERC20Upgradeable(strikeAsset).symbol();\n string memory collateral = ERC20Upgradeable(collateralAsset).symbol();\n string memory displayStrikePrice = _getDisplayedStrikePrice(strikePrice);\n\n // convert expiry to a readable string\n (uint256 year, uint256 month, uint256 day) = BokkyPooBahsDateTimeLibrary.timestampToDate(expiryTimestamp);\n\n // get option type string\n (string memory typeSymbol, string memory typeFull) = _getOptionType(isPut);\n\n //get option month string\n (string memory monthSymbol, string memory monthFull) = _getMonth(month);\n\n // concatenated name string: ETHUSDC 05-September-2020 200 Put USDC Collateral\n tokenName = string(\n abi.encodePacked(\n underlying,\n strike,\n \" \",\n _uintTo2Chars(day),\n \"-\",\n monthFull,\n \"-\",\n Strings.toString(year),\n \" \",\n displayStrikePrice,\n typeFull,\n \" \",\n collateral,\n \" Collateral\"\n )\n );\n\n // concatenated symbol string: oETHUSDC/USDC-05SEP20-200P\n tokenSymbol = string(\n abi.encodePacked(\n \"o\",\n underlying,\n strike,\n \"/\",\n collateral,\n \"-\",\n _uintTo2Chars(day),\n monthSymbol,\n _uintTo2Chars(year),\n \"-\",\n displayStrikePrice,\n typeSymbol\n )\n );\n }\n\n /**\n * @dev convert strike price scaled by 1e8 to human readable number string\n * @param _strikePrice strike price scaled by 1e8\n * @return strike price string\n */\n function _getDisplayedStrikePrice(uint256 _strikePrice) internal pure returns (string memory) {\n uint256 remainder = _strikePrice.mod(STRIKE_PRICE_SCALE);\n uint256 quotient = _strikePrice.div(STRIKE_PRICE_SCALE);\n string memory quotientStr = Strings.toString(quotient);\n\n if (remainder == 0) return quotientStr;\n\n uint256 trailingZeroes;\n while (remainder.mod(10) == 0) {\n remainder = remainder / 10;\n trailingZeroes += 1;\n }\n\n // pad the number with \"1 + starting zeroes\"\n remainder += 10**(STRIKE_PRICE_DIGITS - trailingZeroes);\n\n string memory tmpStr = Strings.toString(remainder);\n tmpStr = _slice(tmpStr, 1, 1 + STRIKE_PRICE_DIGITS - trailingZeroes);\n\n string memory completeStr = string(abi.encodePacked(quotientStr, \".\", tmpStr));\n return completeStr;\n }\n\n /**\n * @dev return a representation of a number using 2 characters, adds a leading 0 if one digit, uses two trailing digits if a 3 digit number\n * @return 2 characters that corresponds to a number\n */\n function _uintTo2Chars(uint256 number) internal pure returns (string memory) {\n if (number > 99) number = number % 100;\n string memory str = Strings.toString(number);\n if (number < 10) {\n return string(abi.encodePacked(\"0\", str));\n }\n return str;\n }\n\n /**\n * @dev return string representation of option type\n * @return shortString a 1 character representation of option type (P or C)\n * @return longString a full length string of option type (Put or Call)\n */\n function _getOptionType(bool _isPut) internal pure returns (string memory shortString, string memory longString) {\n if (_isPut) {\n return (\"P\", \"Put\");\n } else {\n return (\"C\", \"Call\");\n }\n }\n\n /**\n * @dev cut string s into s[start:end]\n * @param _s the string to cut\n * @param _start the starting index\n * @param _end the ending index (excluded in the substring)\n */\n function _slice(\n string memory _s,\n uint256 _start,\n uint256 _end\n ) internal pure returns (string memory) {\n bytes memory a = new bytes(_end - _start);\n for (uint256 i = 0; i < _end - _start; i++) {\n a[i] = bytes(_s)[_start + i];\n }\n return string(a);\n }\n\n /**\n * @dev return string representation of a month\n * @return shortString a 3 character representation of a month (ex: SEP, DEC, etc)\n * @return longString a full length string of a month (ex: September, December, etc)\n */\n function _getMonth(uint256 _month) internal pure returns (string memory shortString, string memory longString) {\n if (_month == 1) {\n return (\"JAN\", \"January\");\n } else if (_month == 2) {\n return (\"FEB\", \"February\");\n } else if (_month == 3) {\n return (\"MAR\", \"March\");\n } else if (_month == 4) {\n return (\"APR\", \"April\");\n } else if (_month == 5) {\n return (\"MAY\", \"May\");\n } else if (_month == 6) {\n return (\"JUN\", \"June\");\n } else if (_month == 7) {\n return (\"JUL\", \"July\");\n } else if (_month == 8) {\n return (\"AUG\", \"August\");\n } else if (_month == 9) {\n return (\"SEP\", \"September\");\n } else if (_month == 10) {\n return (\"OCT\", \"October\");\n } else if (_month == 11) {\n return (\"NOV\", \"November\");\n } else {\n return (\"DEC\", \"December\");\n }\n }\n}\n"
+ },
+ "contracts/packages/oz/Strings.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// openzeppelin-contracts v3.1.0\n\n/* solhint-disable */\npragma solidity =0.6.10;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + (temp % 10)));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n"
+ },
+ "contracts/packages/BokkyPooBahsDateTimeLibrary.sol": {
+ "content": "// SPDX-License-Identifier: MIT\n// solhint-disable\npragma solidity ^0.6.0;\n\n// ----------------------------------------------------------------------------\n// BokkyPooBah's DateTime Library v1.01\n//\n// A gas-efficient Solidity date and time library\n//\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\n//\n// Tested date range 1970/01/01 to 2345/12/31\n//\n// Conventions:\n// Unit | Range | Notes\n// :-------- |:-------------:|:-----\n// timestamp | >= 0 | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\n// year | 1970 ... 2345 |\n// month | 1 ... 12 |\n// day | 1 ... 31 |\n// hour | 0 ... 23 |\n// minute | 0 ... 59 |\n// second | 0 ... 59 |\n// dayOfWeek | 1 ... 7 | 1 = Monday, ..., 7 = Sunday\n//\n//\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\n// ----------------------------------------------------------------------------\n\n// version v1.01\nlibrary BokkyPooBahsDateTimeLibrary {\n uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\n int256 constant OFFSET19700101 = 2440588;\n\n // ------------------------------------------------------------------------\n // Calculate year/month/day from the number of days since 1970/01/01 using\n // the date conversion algorithm from\n // http://aa.usno.navy.mil/faq/docs/JD_Formula.php\n // and adding the offset 2440588 so that 1970/01/01 is day 0\n //\n // int L = days + 68569 + offset\n // int N = 4 * L / 146097\n // L = L - (146097 * N + 3) / 4\n // year = 4000 * (L + 1) / 1461001\n // L = L - 1461 * year / 4 + 31\n // month = 80 * L / 2447\n // dd = L - 2447 * month / 80\n // L = month / 11\n // month = month + 2 - 12 * L\n // year = 100 * (N - 49) + year + L\n // ------------------------------------------------------------------------\n function _daysToDate(uint256 _days)\n internal\n pure\n returns (\n uint256 year,\n uint256 month,\n uint256 day\n )\n {\n int256 __days = int256(_days);\n\n int256 L = __days + 68569 + OFFSET19700101;\n int256 N = (4 * L) / 146097;\n L = L - (146097 * N + 3) / 4;\n int256 _year = (4000 * (L + 1)) / 1461001;\n L = L - (1461 * _year) / 4 + 31;\n int256 _month = (80 * L) / 2447;\n int256 _day = L - (2447 * _month) / 80;\n L = _month / 11;\n _month = _month + 2 - 12 * L;\n _year = 100 * (N - 49) + _year + L;\n\n year = uint256(_year);\n month = uint256(_month);\n day = uint256(_day);\n }\n\n function timestampToDate(uint256 timestamp)\n internal\n pure\n returns (\n uint256 year,\n uint256 month,\n uint256 day\n )\n {\n (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);\n }\n}\n"
+ }
+ },
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "outputSelection": {
+ "*": {
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ],
+ "": [
+ "ast"
+ ]
+ }
+ }
+ }
+ },
+ "output": {
+ "contracts": {
+ "contracts/core/AddressBook.sol": {
+ "AddressBook": {
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "add",
+ "type": "address"
+ }
+ ],
+ "name": "AddressAdded",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "proxy",
+ "type": "address"
+ }
+ ],
+ "name": "ProxyCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_key",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getController",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getLiquidationManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getMarginCalculator",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getMarginPool",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOracle",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenFactory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenImpl",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getWhitelist",
+ "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": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_key",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "_address",
+ "type": "address"
+ }
+ ],
+ "name": "setAddress",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_controller",
+ "type": "address"
+ }
+ ],
+ "name": "setController",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_liquidationManager",
+ "type": "address"
+ }
+ ],
+ "name": "setLiquidationManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_marginCalculator",
+ "type": "address"
+ }
+ ],
+ "name": "setMarginCalculator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_marginPool",
+ "type": "address"
+ }
+ ],
+ "name": "setMarginPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "name": "setOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otokenFactory",
+ "type": "address"
+ }
+ ],
+ "name": "setOtokenFactory",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otokenImpl",
+ "type": "address"
+ }
+ ],
+ "name": "setOtokenImpl",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_whitelist",
+ "type": "address"
+ }
+ ],
+ "name": "setWhitelist",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_id",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "_newAddress",
+ "type": "address"
+ }
+ ],
+ "name": "updateImpl",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b5060006100246001600160e01b0361007316565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610077565b3390565b611380806100866000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806392eefe9b116100b8578063d01f63f51161007c578063d01f63f5146102d8578063d94f323e146102e0578063e7cf784114610306578063e9f2e8be1461032c578063ee8a463214610352578063f2fde38b1461035a57610142565b806392eefe9b14610250578063a8de41d514610276578063b508ac991461027e578063ca446dd9146102a4578063cf28493f146102d057610142565b8063715018a61161010a578063715018a6146101e457806375486342146101ec5780637adbf973146101f4578063833b1fce1461021a578063854cff2f146102225780638da5cb5b1461024857610142565b80631ffaf0db1461014757806321f8a7211461016b5780632b6bfeaa146101885780633018205f146101b657806338f92fc7146101be575b600080fd5b61014f610380565b604080516001600160a01b039092168252519081900360200190f35b61014f6004803603602081101561018157600080fd5b50356103b4565b6101b46004803603604081101561019e57600080fd5b50803590602001356001600160a01b03166103cf565b005b61014f610646565b6101b4600480360360208110156101d457600080fd5b50356001600160a01b0316610671565b6101b46106fe565b61014f6107a0565b6101b46004803603602081101561020a57600080fd5b50356001600160a01b03166107cc565b61014f610849565b6101b46004803603602081101561023857600080fd5b50356001600160a01b0316610870565b61014f6108f0565b6101b46004803603602081101561026657600080fd5b50356001600160a01b03166108ff565b61014f610980565b6101b46004803603602081101561029457600080fd5b50356001600160a01b03166109ac565b6101b4600480360360408110156102ba57600080fd5b50803590602001356001600160a01b0316610a2a565b61014f610adb565b61014f610b0d565b6101b4600480360360208110156102f657600080fd5b50356001600160a01b0316610b37565b6101b46004803603602081101561031c57600080fd5b50356001600160a01b0316610bbc565b6101b46004803603602081101561034257600080fd5b50356001600160a01b0316610c3e565b61014f610cc6565b6101b46004803603602081101561037057600080fd5b50356001600160a01b0316610cfa565b604080516d4f544f4b454e5f464143544f525960901b8152905190819003600e0190206000906103af906103b4565b905090565b6000908152600160205260409020546001600160a01b031690565b6103d7610df2565b6000546001600160a01b03908116911614610427576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b6000610432836103b4565b90506001600160a01b0381166105dc5760603061044d6108f0565b604080516001600160a01b0393841660248201529190921660448083019190915282518083039091018152606490910182526020810180516001600160e01b031663485cc95560e01b17905290519091506000906104aa90610df6565b604051809103906000f0801580156104c6573d6000803e3d6000fd5b5090506104d38582610a2a565b6040516001600160a01b0382169086907f1eb35cb4b5bbb23d152f3b4016a5a46c37a07ae930ed0956aba951e23114243890600090a36040805163278f794360e11b81526001600160a01b03868116600483019081526024830193845285516044840152855191851693634f1ef2869389938893929160640190602085019080838360005b83811015610570578181015183820152602001610558565b50505050905090810190601f16801561059d5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156105bd57600080fd5b505af11580156105d1573d6000803e3d6000fd5b505050505050610641565b60408051631b2ce7f360e11b81526001600160a01b03848116600483015291518392831691633659cfe691602480830192600092919082900301818387803b15801561062757600080fd5b505af115801561063b573d6000803e3d6000fd5b50505050505b505050565b604080516921a7a72a2927a62622a960b11b8152905190819003600a0190206000906103af906103b4565b610679610df2565b6000546001600160a01b039081169116146106c9576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b60408051722624a8aaa4a220aa24a7a72fa6a0a720a3a2a960691b815290519081900360130190206106fb9082610a2a565b50565b610706610df2565b6000546001600160a01b03908116911614610756576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b604080516a13505491d25397d413d3d360aa1b8152905190819003600b0190206000906103af906103b4565b6107d4610df2565b6000546001600160a01b03908116911614610824576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b60408051654f5241434c4560d01b815290519081900360060190206106fb9082610a2a565b60408051654f5241434c4560d01b815290519081900360060190206000906103af906103b4565b610878610df2565b6000546001600160a01b039081169116146108c8576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516815d2125511531254d560ba1b815290519081900360090190206106fb9082610a2a565b6000546001600160a01b031690565b610907610df2565b6000546001600160a01b03908116911614610957576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516921a7a72a2927a62622a960b11b8152905190819003600a0190206106fb90826103cf565b604080516a13d513d2d15397d253541360aa1b8152905190819003600b0190206000906103af906103b4565b6109b4610df2565b6000546001600160a01b03908116911614610a04576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516a13d513d2d15397d253541360aa1b8152905190819003600b0190206106fb90825b610a32610df2565b6000546001600160a01b03908116911614610a82576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b60008281526001602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917f3eb532562a19423f49e2e3b30790b23d00c625f3ee37c7359d03688bf7111f6c9190a35050565b604080517026a0a923a4a72fa1a0a621aaa620aa27a960791b815290519081900360110190206000906103af906103b4565b604080516815d2125511531254d560ba1b815290519081900360090190206000906103af906103b4565b610b3f610df2565b6000546001600160a01b03908116911614610b8f576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516d4f544f4b454e5f464143544f525960901b8152905190819003600e0190206106fb9082610a2a565b610bc4610df2565b6000546001600160a01b03908116911614610c14576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516a13505491d25397d413d3d360aa1b8152905190819003600b0190206106fb9082610a2a565b610c46610df2565b6000546001600160a01b03908116911614610c96576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080517026a0a923a4a72fa1a0a621aaa620aa27a960791b815290519081900360110190206106fb9082610a2a565b60408051722624a8aaa4a220aa24a7a72fa6a0a720a3a2a960691b815290519081900360130190206000906103af906103b4565b610d02610df2565b6000546001600160a01b03908116911614610d52576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b6001600160a01b038116610d975760405162461bcd60e51b81526004018080602001828103825260268152602001806113056026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b61050180610e048339019056fe608060405234801561001057600080fd5b50610023336001600160e01b0361002816565b61005d565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6104958061006c6000396000f3fe60806040526004361061004a5760003560e01c8063025313a21461008e5780633659cfe6146100bf5780634f1ef286146100f45780635c60da1b14610174578063f1739cae14610189575b60006100546101bc565b90506001600160a01b03811661006957600080fd5b60405136600082376000803683855af43d806000843e81801561008a578184f35b8184fd5b34801561009a57600080fd5b506100a36101df565b604080516001600160a01b039092168252519081900360200190f35b3480156100cb57600080fd5b506100f2600480360360208110156100e257600080fd5b50356001600160a01b0316610215565b005b6100f26004803603604081101561010a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013557600080fd5b82018360208201111561014757600080fd5b8035906020019184600183028401116401000000008311171561016957600080fd5b509092509050610246565b34801561018057600080fd5b506100a36101bc565b34801561019557600080fd5b506100f2600480360360208110156101ac57600080fd5b50356001600160a01b03166102ed565b600080604051808061043d60239139604051908190036023019020549392505050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a0190205490565b61021d6101df565b6001600160a01b0316336001600160a01b03161461023a57600080fd5b61024381610379565b50565b61024e6101df565b6001600160a01b0316336001600160a01b03161461026b57600080fd5b61027483610215565b6000306001600160a01b0316348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102d4576040519150601f19603f3d011682016040523d82523d6000602084013e6102d9565b606091505b50509050806102e757600080fd5b50505050565b6102f56101df565b6001600160a01b0316336001600160a01b03161461031257600080fd5b6001600160a01b03811661032557600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961034e6101df565b604080516001600160a01b03928316815291841660208301528051918290030190a1610243816103e5565b60006103836101bc565b9050816001600160a01b0316816001600160a01b031614156103a457600080fd5b6103ad8261041a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6000604051808061043d6023913960405190819003602301902092909255505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6ea2646970667358221220f2afd0d88ce5ca2e4e38002b51bde27c9952caa825a64af50a818c922bbe776864736f6c634300060a00334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122035264fbdb520b45e8f5bd57e641078ca8e7ab35ff00bb18a7f4471f851df33a264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x24 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x73 AND JUMP JUMPDEST PUSH1 0x0 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 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x77 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x1380 DUP1 PUSH2 0x86 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 0x142 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x92EEFE9B GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD01F63F5 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xD01F63F5 EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0xD94F323E EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0xE7CF7841 EQ PUSH2 0x306 JUMPI DUP1 PUSH4 0xE9F2E8BE EQ PUSH2 0x32C JUMPI DUP1 PUSH4 0xEE8A4632 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x35A JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x92EEFE9B EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0xA8DE41D5 EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0xB508AC99 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0xCA446DD9 EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0xCF28493F EQ PUSH2 0x2D0 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x75486342 EQ PUSH2 0x1EC JUMPI DUP1 PUSH4 0x7ADBF973 EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x833B1FCE EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x854CFF2F EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x248 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x1FFAF0DB EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x21F8A721 EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x2B6BFEAA EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x3018205F EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x38F92FC7 EQ PUSH2 0x1BE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14F PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3CF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14F PUSH2 0x646 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x671 JUMP JUMPDEST PUSH2 0x1B4 PUSH2 0x6FE JUMP JUMPDEST PUSH2 0x14F PUSH2 0x7A0 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x14F PUSH2 0x849 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x870 JUMP JUMPDEST PUSH2 0x14F PUSH2 0x8F0 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8FF JUMP JUMPDEST PUSH2 0x14F PUSH2 0x980 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9AC JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA2A JUMP JUMPDEST PUSH2 0x14F PUSH2 0xADB JUMP JUMPDEST PUSH2 0x14F PUSH2 0xB0D JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB37 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x31C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBBC JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC3E JUMP JUMPDEST PUSH2 0x14F PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH14 0x4F544F4B454E5F464143544F5259 PUSH1 0x90 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xE ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x427 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x432 DUP4 PUSH2 0x3B4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5DC JUMPI PUSH1 0x60 ADDRESS PUSH2 0x44D PUSH2 0x8F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x44 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x485CC955 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x4AA SWAP1 PUSH2 0xDF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x4C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP PUSH2 0x4D3 DUP6 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP7 SWAP1 PUSH32 0x1EB35CB4B5BBB23D152F3B4016A5A46C37A07AE930ED0956ABA951E231142438 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0x24 DUP4 ADD SWAP4 DUP5 MSTORE DUP6 MLOAD PUSH1 0x44 DUP5 ADD MSTORE DUP6 MLOAD SWAP2 DUP6 AND SWAP4 PUSH4 0x4F1EF286 SWAP4 DUP10 SWAP4 DUP9 SWAP4 SWAP3 SWAP2 PUSH1 0x64 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x570 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x558 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x59D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP PUSH2 0x641 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD DUP4 SWAP3 DUP4 AND SWAP2 PUSH4 0x3659CFE6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x627 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x63B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x21A7A72A2927A62622A9 PUSH1 0xB1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x679 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x6C9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH19 0x2624A8AAA4A220AA24A7A72FA6A0A720A3A2A9 PUSH1 0x69 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x706 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x756 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13505491D25397D413D3D3 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x7D4 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x824 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0x4F5241434C45 PUSH1 0xD0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x6 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0x4F5241434C45 PUSH1 0xD0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x6 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x878 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x8C8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH9 0x15D2125511531254D5 PUSH1 0xBA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x9 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x907 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x957 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x21A7A72A2927A62622A9 PUSH1 0xB1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0x3CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13D513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x9B4 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA04 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13D513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 JUMPDEST PUSH2 0xA32 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA82 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 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 0x3EB532562A19423F49E2E3B30790B23D00C625F3EE37C7359D03688BF7111F6C SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH17 0x26A0A923A4A72FA1A0A621AAA620AA27A9 PUSH1 0x79 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x11 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH9 0x15D2125511531254D5 PUSH1 0xBA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x9 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0xB3F PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xB8F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH14 0x4F544F4B454E5F464143544F5259 PUSH1 0x90 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xE ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH2 0xBC4 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xC14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13505491D25397D413D3D3 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH2 0xC46 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xC96 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH17 0x26A0A923A4A72FA1A0A621AAA620AA27A9 PUSH1 0x79 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x11 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH19 0x2624A8AAA4A220AA24A7A72FA6A0A720A3A2A9 PUSH1 0x69 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0xD02 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xD52 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1305 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 CALLER SWAP1 JUMP JUMPDEST PUSH2 0x501 DUP1 PUSH2 0xE04 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x28 AND JUMP JUMPDEST PUSH2 0x5D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x495 DUP1 PUSH2 0x6C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x25313A2 EQ PUSH2 0x8E JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xF1739CAE EQ PUSH2 0x189 JUMPI JUMPDEST PUSH1 0x0 PUSH2 0x54 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLDATASIZE PUSH1 0x0 DUP3 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL RETURNDATASIZE DUP1 PUSH1 0x0 DUP5 RETURNDATACOPY DUP2 DUP1 ISZERO PUSH2 0x8A JUMPI DUP2 DUP5 RETURN JUMPDEST DUP2 DUP5 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x246 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x21D PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x23A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243 DUP2 PUSH2 0x379 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x274 DUP4 PUSH2 0x215 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLVALUE DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2D4 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 0x2D9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2F5 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x5A3E66EFAA1E445EBD894728A69D6959842EA1E97BD79B892797106E270EFCD9 PUSH2 0x34E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 PUSH2 0x243 DUP2 PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x383 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AD DUP3 PUSH2 0x41A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE POP POP JUMP INVALID PUSH16 0x72672E7A657070656C696E6F732E7072 PUSH16 0x78792E696D706C656D656E746174696F PUSH15 0xA2646970667358221220F2AFD0D88C 0xE5 0xCA 0x2E 0x4E CODESIZE STOP 0x2B MLOAD 0xBD 0xE2 PUSH29 0x9952CAA825A64AF50A818C922BBE776864736F6C634300060A00334F77 PUSH15 0x61626C653A206E6577206F776E6572 KECCAK256 PUSH10 0x7320746865207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x6573734F776E61626C653A2063616C6C657220 PUSH10 0x73206E6F742074686520 PUSH16 0x776E6572A26469706673582212203526 0x4F 0xBD 0xB5 KECCAK256 0xB4 0x5E DUP16 JUMPDEST 0xD5 PUSH31 0x641078CA8E7AB35FF00BB18A7F4471F851DF33A264736F6C634300060A0033 ",
+ "sourceMap": "285:6686:0:-:0;;;;;;;;;;;;-1:-1:-1;893:17:48;913:12;-1:-1:-1;;;;;913:10:48;:12;:::i;:::-;935:6;:18;;-1:-1:-1;;;;;;935:18:48;-1:-1:-1;;;;;935:18:48;;;;;;;968:43;;935:18;;-1:-1:-1;935:18:48;968:43;;935:6;;968:43;860:158;285:6686:0;;623:104:46;710:10;623:104;:::o;285:6686:0:-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101425760003560e01c806392eefe9b116100b8578063d01f63f51161007c578063d01f63f5146102d8578063d94f323e146102e0578063e7cf784114610306578063e9f2e8be1461032c578063ee8a463214610352578063f2fde38b1461035a57610142565b806392eefe9b14610250578063a8de41d514610276578063b508ac991461027e578063ca446dd9146102a4578063cf28493f146102d057610142565b8063715018a61161010a578063715018a6146101e457806375486342146101ec5780637adbf973146101f4578063833b1fce1461021a578063854cff2f146102225780638da5cb5b1461024857610142565b80631ffaf0db1461014757806321f8a7211461016b5780632b6bfeaa146101885780633018205f146101b657806338f92fc7146101be575b600080fd5b61014f610380565b604080516001600160a01b039092168252519081900360200190f35b61014f6004803603602081101561018157600080fd5b50356103b4565b6101b46004803603604081101561019e57600080fd5b50803590602001356001600160a01b03166103cf565b005b61014f610646565b6101b4600480360360208110156101d457600080fd5b50356001600160a01b0316610671565b6101b46106fe565b61014f6107a0565b6101b46004803603602081101561020a57600080fd5b50356001600160a01b03166107cc565b61014f610849565b6101b46004803603602081101561023857600080fd5b50356001600160a01b0316610870565b61014f6108f0565b6101b46004803603602081101561026657600080fd5b50356001600160a01b03166108ff565b61014f610980565b6101b46004803603602081101561029457600080fd5b50356001600160a01b03166109ac565b6101b4600480360360408110156102ba57600080fd5b50803590602001356001600160a01b0316610a2a565b61014f610adb565b61014f610b0d565b6101b4600480360360208110156102f657600080fd5b50356001600160a01b0316610b37565b6101b46004803603602081101561031c57600080fd5b50356001600160a01b0316610bbc565b6101b46004803603602081101561034257600080fd5b50356001600160a01b0316610c3e565b61014f610cc6565b6101b46004803603602081101561037057600080fd5b50356001600160a01b0316610cfa565b604080516d4f544f4b454e5f464143544f525960901b8152905190819003600e0190206000906103af906103b4565b905090565b6000908152600160205260409020546001600160a01b031690565b6103d7610df2565b6000546001600160a01b03908116911614610427576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b6000610432836103b4565b90506001600160a01b0381166105dc5760603061044d6108f0565b604080516001600160a01b0393841660248201529190921660448083019190915282518083039091018152606490910182526020810180516001600160e01b031663485cc95560e01b17905290519091506000906104aa90610df6565b604051809103906000f0801580156104c6573d6000803e3d6000fd5b5090506104d38582610a2a565b6040516001600160a01b0382169086907f1eb35cb4b5bbb23d152f3b4016a5a46c37a07ae930ed0956aba951e23114243890600090a36040805163278f794360e11b81526001600160a01b03868116600483019081526024830193845285516044840152855191851693634f1ef2869389938893929160640190602085019080838360005b83811015610570578181015183820152602001610558565b50505050905090810190601f16801561059d5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156105bd57600080fd5b505af11580156105d1573d6000803e3d6000fd5b505050505050610641565b60408051631b2ce7f360e11b81526001600160a01b03848116600483015291518392831691633659cfe691602480830192600092919082900301818387803b15801561062757600080fd5b505af115801561063b573d6000803e3d6000fd5b50505050505b505050565b604080516921a7a72a2927a62622a960b11b8152905190819003600a0190206000906103af906103b4565b610679610df2565b6000546001600160a01b039081169116146106c9576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b60408051722624a8aaa4a220aa24a7a72fa6a0a720a3a2a960691b815290519081900360130190206106fb9082610a2a565b50565b610706610df2565b6000546001600160a01b03908116911614610756576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b604080516a13505491d25397d413d3d360aa1b8152905190819003600b0190206000906103af906103b4565b6107d4610df2565b6000546001600160a01b03908116911614610824576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b60408051654f5241434c4560d01b815290519081900360060190206106fb9082610a2a565b60408051654f5241434c4560d01b815290519081900360060190206000906103af906103b4565b610878610df2565b6000546001600160a01b039081169116146108c8576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516815d2125511531254d560ba1b815290519081900360090190206106fb9082610a2a565b6000546001600160a01b031690565b610907610df2565b6000546001600160a01b03908116911614610957576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516921a7a72a2927a62622a960b11b8152905190819003600a0190206106fb90826103cf565b604080516a13d513d2d15397d253541360aa1b8152905190819003600b0190206000906103af906103b4565b6109b4610df2565b6000546001600160a01b03908116911614610a04576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516a13d513d2d15397d253541360aa1b8152905190819003600b0190206106fb90825b610a32610df2565b6000546001600160a01b03908116911614610a82576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b60008281526001602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917f3eb532562a19423f49e2e3b30790b23d00c625f3ee37c7359d03688bf7111f6c9190a35050565b604080517026a0a923a4a72fa1a0a621aaa620aa27a960791b815290519081900360110190206000906103af906103b4565b604080516815d2125511531254d560ba1b815290519081900360090190206000906103af906103b4565b610b3f610df2565b6000546001600160a01b03908116911614610b8f576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516d4f544f4b454e5f464143544f525960901b8152905190819003600e0190206106fb9082610a2a565b610bc4610df2565b6000546001600160a01b03908116911614610c14576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080516a13505491d25397d413d3d360aa1b8152905190819003600b0190206106fb9082610a2a565b610c46610df2565b6000546001600160a01b03908116911614610c96576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b604080517026a0a923a4a72fa1a0a621aaa620aa27a960791b815290519081900360110190206106fb9082610a2a565b60408051722624a8aaa4a220aa24a7a72fa6a0a720a3a2a960691b815290519081900360130190206000906103af906103b4565b610d02610df2565b6000546001600160a01b03908116911614610d52576040805162461bcd60e51b8152602060048201819052602482015260008051602061132b833981519152604482015290519081900360640190fd5b6001600160a01b038116610d975760405162461bcd60e51b81526004018080602001828103825260268152602001806113056026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b61050180610e048339019056fe608060405234801561001057600080fd5b50610023336001600160e01b0361002816565b61005d565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6104958061006c6000396000f3fe60806040526004361061004a5760003560e01c8063025313a21461008e5780633659cfe6146100bf5780634f1ef286146100f45780635c60da1b14610174578063f1739cae14610189575b60006100546101bc565b90506001600160a01b03811661006957600080fd5b60405136600082376000803683855af43d806000843e81801561008a578184f35b8184fd5b34801561009a57600080fd5b506100a36101df565b604080516001600160a01b039092168252519081900360200190f35b3480156100cb57600080fd5b506100f2600480360360208110156100e257600080fd5b50356001600160a01b0316610215565b005b6100f26004803603604081101561010a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013557600080fd5b82018360208201111561014757600080fd5b8035906020019184600183028401116401000000008311171561016957600080fd5b509092509050610246565b34801561018057600080fd5b506100a36101bc565b34801561019557600080fd5b506100f2600480360360208110156101ac57600080fd5b50356001600160a01b03166102ed565b600080604051808061043d60239139604051908190036023019020549392505050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a0190205490565b61021d6101df565b6001600160a01b0316336001600160a01b03161461023a57600080fd5b61024381610379565b50565b61024e6101df565b6001600160a01b0316336001600160a01b03161461026b57600080fd5b61027483610215565b6000306001600160a01b0316348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102d4576040519150601f19603f3d011682016040523d82523d6000602084013e6102d9565b606091505b50509050806102e757600080fd5b50505050565b6102f56101df565b6001600160a01b0316336001600160a01b03161461031257600080fd5b6001600160a01b03811661032557600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961034e6101df565b604080516001600160a01b03928316815291841660208301528051918290030190a1610243816103e5565b60006103836101bc565b9050816001600160a01b0316816001600160a01b031614156103a457600080fd5b6103ad8261041a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6000604051808061043d6023913960405190819003602301902092909255505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6ea2646970667358221220f2afd0d88ce5ca2e4e38002b51bde27c9952caa825a64af50a818c922bbe776864736f6c634300060a00334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122035264fbdb520b45e8f5bd57e641078ca8e7ab35ff00bb18a7f4471f851df33a264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x142 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x92EEFE9B GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD01F63F5 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xD01F63F5 EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0xD94F323E EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0xE7CF7841 EQ PUSH2 0x306 JUMPI DUP1 PUSH4 0xE9F2E8BE EQ PUSH2 0x32C JUMPI DUP1 PUSH4 0xEE8A4632 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x35A JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x92EEFE9B EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0xA8DE41D5 EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0xB508AC99 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0xCA446DD9 EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0xCF28493F EQ PUSH2 0x2D0 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x75486342 EQ PUSH2 0x1EC JUMPI DUP1 PUSH4 0x7ADBF973 EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x833B1FCE EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x854CFF2F EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x248 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x1FFAF0DB EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x21F8A721 EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x2B6BFEAA EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x3018205F EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x38F92FC7 EQ PUSH2 0x1BE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14F PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3CF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14F PUSH2 0x646 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x671 JUMP JUMPDEST PUSH2 0x1B4 PUSH2 0x6FE JUMP JUMPDEST PUSH2 0x14F PUSH2 0x7A0 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x14F PUSH2 0x849 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x870 JUMP JUMPDEST PUSH2 0x14F PUSH2 0x8F0 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8FF JUMP JUMPDEST PUSH2 0x14F PUSH2 0x980 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9AC JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA2A JUMP JUMPDEST PUSH2 0x14F PUSH2 0xADB JUMP JUMPDEST PUSH2 0x14F PUSH2 0xB0D JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB37 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x31C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBBC JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC3E JUMP JUMPDEST PUSH2 0x14F PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH14 0x4F544F4B454E5F464143544F5259 PUSH1 0x90 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xE ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x427 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x432 DUP4 PUSH2 0x3B4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5DC JUMPI PUSH1 0x60 ADDRESS PUSH2 0x44D PUSH2 0x8F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x44 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x485CC955 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x4AA SWAP1 PUSH2 0xDF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x4C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP PUSH2 0x4D3 DUP6 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP7 SWAP1 PUSH32 0x1EB35CB4B5BBB23D152F3B4016A5A46C37A07AE930ED0956ABA951E231142438 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0x24 DUP4 ADD SWAP4 DUP5 MSTORE DUP6 MLOAD PUSH1 0x44 DUP5 ADD MSTORE DUP6 MLOAD SWAP2 DUP6 AND SWAP4 PUSH4 0x4F1EF286 SWAP4 DUP10 SWAP4 DUP9 SWAP4 SWAP3 SWAP2 PUSH1 0x64 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x570 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x558 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x59D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP PUSH2 0x641 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD DUP4 SWAP3 DUP4 AND SWAP2 PUSH4 0x3659CFE6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x627 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x63B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x21A7A72A2927A62622A9 PUSH1 0xB1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x679 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x6C9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH19 0x2624A8AAA4A220AA24A7A72FA6A0A720A3A2A9 PUSH1 0x69 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x706 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x756 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13505491D25397D413D3D3 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x7D4 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x824 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0x4F5241434C45 PUSH1 0xD0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x6 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0x4F5241434C45 PUSH1 0xD0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x6 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x878 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x8C8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH9 0x15D2125511531254D5 PUSH1 0xBA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x9 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x907 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x957 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x21A7A72A2927A62622A9 PUSH1 0xB1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0x3CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13D513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x9B4 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA04 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13D513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 JUMPDEST PUSH2 0xA32 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA82 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 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 0x3EB532562A19423F49E2E3B30790B23D00C625F3EE37C7359D03688BF7111F6C SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH17 0x26A0A923A4A72FA1A0A621AAA620AA27A9 PUSH1 0x79 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x11 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH9 0x15D2125511531254D5 PUSH1 0xBA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x9 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0xB3F PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xB8F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH14 0x4F544F4B454E5F464143544F5259 PUSH1 0x90 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xE ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH2 0xBC4 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xC14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH11 0x13505491D25397D413D3D3 PUSH1 0xAA SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xB ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH2 0xC46 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xC96 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH17 0x26A0A923A4A72FA1A0A621AAA620AA27A9 PUSH1 0x79 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x11 ADD SWAP1 KECCAK256 PUSH2 0x6FB SWAP1 DUP3 PUSH2 0xA2A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH19 0x2624A8AAA4A220AA24A7A72FA6A0A720A3A2A9 PUSH1 0x69 SHL DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x3AF SWAP1 PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0xD02 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xD52 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x132B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1305 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 CALLER SWAP1 JUMP JUMPDEST PUSH2 0x501 DUP1 PUSH2 0xE04 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x28 AND JUMP JUMPDEST PUSH2 0x5D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x495 DUP1 PUSH2 0x6C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x25313A2 EQ PUSH2 0x8E JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xF1739CAE EQ PUSH2 0x189 JUMPI JUMPDEST PUSH1 0x0 PUSH2 0x54 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLDATASIZE PUSH1 0x0 DUP3 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL RETURNDATASIZE DUP1 PUSH1 0x0 DUP5 RETURNDATACOPY DUP2 DUP1 ISZERO PUSH2 0x8A JUMPI DUP2 DUP5 RETURN JUMPDEST DUP2 DUP5 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x246 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x21D PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x23A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243 DUP2 PUSH2 0x379 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x274 DUP4 PUSH2 0x215 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLVALUE DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2D4 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 0x2D9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2F5 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x5A3E66EFAA1E445EBD894728A69D6959842EA1E97BD79B892797106E270EFCD9 PUSH2 0x34E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 PUSH2 0x243 DUP2 PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x383 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AD DUP3 PUSH2 0x41A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE POP POP JUMP INVALID PUSH16 0x72672E7A657070656C696E6F732E7072 PUSH16 0x78792E696D706C656D656E746174696F PUSH15 0xA2646970667358221220F2AFD0D88C 0xE5 0xCA 0x2E 0x4E CODESIZE STOP 0x2B MLOAD 0xBD 0xE2 PUSH29 0x9952CAA825A64AF50A818C922BBE776864736F6C634300060A00334F77 PUSH15 0x61626C653A206E6577206F776E6572 KECCAK256 PUSH10 0x7320746865207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x6573734F776E61626C653A2063616C6C657220 PUSH10 0x73206E6F742074686520 PUSH16 0x776E6572A26469706673582212203526 0x4F 0xBD 0xB5 KECCAK256 0xB4 0x5E DUP16 JUMPDEST 0xD5 PUSH31 0x641078CA8E7AB35FF00BB18A7F4471F851DF33A264736F6C634300060A0033 ",
+ "sourceMap": "285:6686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1809:110;;;:::i;:::-;;;;-1:-1:-1;;;;;1809:110:0;;;;;;;;;;;;;;5603:103;;;;;;;;;;;;;;;;-1:-1:-1;5603:103:0;;:::i;6275:694::-;;;;;;;;;;;;;;;;-1:-1:-1;6275:694:0;;;;;;-1:-1:-1;;;;;6275:694:0;;:::i;:::-;;2212:103;;;:::i;5081:148::-;;;;;;;;;;;;;;;;-1:-1:-1;5081:148:0;-1:-1:-1;;;;;5081:148:0;;:::i;1717:145:48:-;;;:::i;2412:104:0:-;;;:::i;5378:99::-;;;;;;;;;;;;;;;;-1:-1:-1;5378:99:0;-1:-1:-1;;;;;5378:99:0;;:::i;3063:95::-;;;:::i;3913:111::-;;;;;;;;;;;;;;;;-1:-1:-1;3913:111:0;-1:-1:-1;;;;;3913:111:0;;:::i;1094:77:48:-;;;:::i;4185:115:0:-;;;;;;;;;;;;;;;;-1:-1:-1;4185:115:0;-1:-1:-1;;;;;4185:115:0;;:::i;1602:104::-;;;:::i;3341:116::-;;;;;;;;;;;;;;;;-1:-1:-1;3341:116:0;-1:-1:-1;;;;;3341:116:0;;:::i;5895:156::-;;;;;;;;;;;;;;;;-1:-1:-1;5895:156:0;;;;;;-1:-1:-1;;;;;5895:156:0;;:::i;2625:116::-;;;:::i;2014:101::-;;;:::i;3627:128::-;;;;;;;;;;;;;;;;-1:-1:-1;3627:128:0;-1:-1:-1;;;;;3627:128:0;;:::i;4461:116::-;;;;;;;;;;;;;;;;-1:-1:-1;4461:116:0;-1:-1:-1;;;;;4461:116:0;;:::i;4756:140::-;;;;;;;;;;;;;;;;-1:-1:-1;4756:140:0;-1:-1:-1;;;;;4756:140:0;;:::i;2854:120::-;;;:::i;2011:240:48:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:48;-1:-1:-1;;;;;2011:240:48;;:::i;1809:110:0:-;504:27;;;-1:-1:-1;;;504:27:0;;;;;;;;;;;;1860:7;;1886:26;;:10;:26::i;:::-;1879:33;;1809:110;:::o;5603:103::-;5658:7;5684:15;;;:9;:15;;;;;;-1:-1:-1;;;;;5684:15:0;;5603:103::o;6275:694::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;6356:28:0::1;6403:15;6414:3;6403:10;:15::i;:::-;6356:64:::0;-1:-1:-1;;;;;;6435:26:0;::::1;6431:532;;6477:19;6562:4;6569:7;:5;:7::i;:::-;6499:78;::::0;;-1:-1:-1;;;;;6499:78:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;6499:78:0::1;-1:-1:-1::0;;;6499:78:0::1;::::0;;6624:30;;6499:78;;-1:-1:-1;;;6624:30:0::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6591:63;;6668:31;6679:3;6692:5;6668:10;:31::i;:::-;6718:33;::::0;-1:-1:-1;;;;;6718:33:0;::::1;::::0;6731:3;;6718:33:::1;::::0;;;::::1;6765:43;::::0;;-1:-1:-1;;;6765:43:0;;-1:-1:-1;;;;;6765:43:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;:22;;::::1;::::0;::::1;::::0;6788:11;;6801:6;;6765:43;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;6765:43:0::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6431:532;;;;;6924:28;::::0;;-1:-1:-1;;;6924:28:0;;-1:-1:-1;;;;;6924:28:0;;::::1;;::::0;::::1;::::0;;;6897:12;;6924:15;::::1;::::0;::::1;::::0;:28;;;;;6839:30:::1;::::0;6924:28;;;;;;;6839:30;6924:15;:28;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6431:532;;1367:1:48;6275:694:0::0;;:::o;2212:103::-;695:23;;;-1:-1:-1;;;695:23:0;;;;;;;;;;;;2260:7;;2286:22;;:10;:22::i;5081:148::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;1019:32:0::1;::::0;;-1:-1:-1;;;1019:32:0;;;;;;;;::::1;::::0;;;5170:52:::1;::::0;5202:19;5170:10:::1;:52::i;:::-;5081:148:::0;:::o;1717:145:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:48;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;-1:-1:-1;;;;;;1836:19:48::1;::::0;;1717:145::o;2412:104:0:-;791:24;;;-1:-1:-1;;;791:24:0;;;;;;;;;;;;2460:7;;2486:23;;:10;:23::i;5378:99::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;1115:19:0::1;::::0;;-1:-1:-1;;;1115:19:0;;;;;;;;::::1;::::0;;;5443:27:::1;::::0;5462:7;5443:10:::1;:27::i;3063:95::-:0;1115:19;;;-1:-1:-1;;;1115:19:0;;;;;;;;;;;;3107:7;;3133:18;;:10;:18::i;3913:111::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;601:22:0::1;::::0;;-1:-1:-1;;;601:22:0;;;;;;;;::::1;::::0;;;3984:33:::1;::::0;4006:10;3984::::1;:33::i;1094:77:48:-:0;1132:7;1158:6;-1:-1:-1;;;;;1158:6:48;1094:77;:::o;4185:115:0:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;695:23:0::1;::::0;;-1:-1:-1;;;695:23:0;;;;;;;;::::1;::::0;;;4258:35:::1;::::0;4281:11;4258:10:::1;:35::i;1602:104::-:0;401:24;;;-1:-1:-1;;;401:24:0;;;;;;;;;;;;1650:7;;1676:23;;:10;:23::i;3341:116::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;401:24:0::1;::::0;;-1:-1:-1;;;401:24:0;;;;;;;;::::1;::::0;;;3414:36:::1;::::0;3438:11;5895:156;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;5974:15:0::1;::::0;;;:9:::1;:15;::::0;;;;;:26;;-1:-1:-1;;;;;;5974:26:0::1;-1:-1:-1::0;;;;;5974:26:0;::::1;::::0;;::::1;::::0;;;6016:28;;5974:26;;:15;;6016:28:::1;::::0;5974:15;6016:28:::1;5895:156:::0;;:::o;2625:116::-;900:30;;;-1:-1:-1;;;900:30:0;;;;;;;;;;;;2679:7;;2705:29;;:10;:29::i;2014:101::-;601:22;;;-1:-1:-1;;;601:22:0;;;;;;;;;;;;2061:7;;2087:21;;:10;:21::i;3627:128::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;504:27:0::1;::::0;;-1:-1:-1;;;504:27:0;;;;;;;;::::1;::::0;;;3706:42:::1;::::0;3733:14;3706:10:::1;:42::i;4461:116::-:0;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;791:24:0::1;::::0;;-1:-1:-1;;;791:24:0;;;;;;;;::::1;::::0;;;4534:36:::1;::::0;4558:11;4534:10:::1;:36::i;4756:140::-:0;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;900:30:0::1;::::0;;-1:-1:-1;;;900:30:0;;;;;;;;::::1;::::0;;;4841:48:::1;::::0;4871:17;4841:10:::1;:48::i;2854:120::-:0;1019:32;;;-1:-1:-1;;;1019:32:0;;;;;;;;;;;;2910:7;;2936:31;;:10;:31::i;2011:240:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:22:48;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:48::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:48;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;-1:-1:-1;;;;;;2227:17:48::1;-1:-1:-1::0;;;;;2227:17:48;;;::::1;::::0;;;::::1;::::0;;2011:240::o;623:104:46:-;710:10;623:104;:::o;-1:-1:-1:-;;;;;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "getAddress(bytes32)": "21f8a721",
+ "getController()": "3018205f",
+ "getLiquidationManager()": "ee8a4632",
+ "getMarginCalculator()": "cf28493f",
+ "getMarginPool()": "75486342",
+ "getOracle()": "833b1fce",
+ "getOtokenFactory()": "1ffaf0db",
+ "getOtokenImpl()": "a8de41d5",
+ "getWhitelist()": "d01f63f5",
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "setAddress(bytes32,address)": "ca446dd9",
+ "setController(address)": "92eefe9b",
+ "setLiquidationManager(address)": "38f92fc7",
+ "setMarginCalculator(address)": "e9f2e8be",
+ "setMarginPool(address)": "e7cf7841",
+ "setOracle(address)": "7adbf973",
+ "setOtokenFactory(address)": "d94f323e",
+ "setOtokenImpl(address)": "b508ac99",
+ "setWhitelist(address)": "854cff2f",
+ "transferOwnership(address)": "f2fde38b",
+ "updateImpl(bytes32,address)": "2b6bfeaa"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"add\",\"type\":\"address\"}],\"name\":\"AddressAdded\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarginCalculator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarginPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWhitelist\",\"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\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidationManager\",\"type\":\"address\"}],\"name\":\"setLiquidationManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_marginCalculator\",\"type\":\"address\"}],\"name\":\"setMarginCalculator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_marginPool\",\"type\":\"address\"}],\"name\":\"setMarginPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otokenFactory\",\"type\":\"address\"}],\"name\":\"setOtokenFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otokenImpl\",\"type\":\"address\"}],\"name\":\"setOtokenImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_whitelist\",\"type\":\"address\"}],\"name\":\"setWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"updateImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"getAddress(bytes32)\":{\"params\":{\"_key\":\"key address\"},\"returns\":{\"_0\":\"address\"}},\"getController()\":{\"returns\":{\"_0\":\"Controller address\"}},\"getLiquidationManager()\":{\"returns\":{\"_0\":\"LiquidationManager address\"}},\"getMarginCalculator()\":{\"returns\":{\"_0\":\"MarginCalculator address\"}},\"getMarginPool()\":{\"returns\":{\"_0\":\"MarginPool address\"}},\"getOracle()\":{\"returns\":{\"_0\":\"Oracle address\"}},\"getOtokenFactory()\":{\"returns\":{\"_0\":\"OtokenFactory address\"}},\"getOtokenImpl()\":{\"returns\":{\"_0\":\"Otoken implementation address\"}},\"getWhitelist()\":{\"returns\":{\"_0\":\"Whitelist address\"}},\"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.\"},\"setAddress(bytes32,address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_address\":\"address\",\"_key\":\"key\"}},\"setController(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_controller\":\"Controller address\"}},\"setLiquidationManager(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_liquidationManager\":\"LiquidationManager address\"}},\"setMarginCalculator(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_marginCalculator\":\"MarginCalculator address\"}},\"setMarginPool(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_marginPool\":\"MarginPool address\"}},\"setOracle(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_oracle\":\"Oracle address\"}},\"setOtokenFactory(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_otokenFactory\":\"OtokenFactory address\"}},\"setOtokenImpl(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_otokenImpl\":\"Otoken implementation address\"}},\"setWhitelist(address)\":{\"details\":\"can only be called by the addressbook owner\",\"params\":{\"_whitelist\":\"Whitelist address\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateImpl(bytes32,address)\":{\"details\":\"function to update the implementation of a specific component of the protocol\",\"params\":{\"_id\":\"id of the contract to be updated\",\"_newAddress\":\"address of the new implementation*\"}}},\"stateVariables\":{\"CONTROLLER\":{\"details\":\"Controller key\"},\"LIQUIDATION_MANAGER\":{\"details\":\"LiquidationManager key\"},\"MARGIN_CALCULATOR\":{\"details\":\"MarginCalculator key\"},\"MARGIN_POOL\":{\"details\":\"MarginPool key\"},\"ORACLE\":{\"details\":\"Oracle key\"},\"OTOKEN_FACTORY\":{\"details\":\"OtokenFactory key\"},\"OTOKEN_IMPL\":{\"details\":\"Otoken implementation key\"},\"WHITELIST\":{\"details\":\"Whitelist key\"},\"addresses\":{\"details\":\"mapping between key and address\"}},\"title\":\"AddressBook Module\"},\"userdoc\":{\"methods\":{\"getAddress(bytes32)\":{\"notice\":\"return an address for specific key\"},\"getController()\":{\"notice\":\"return Controller address\"},\"getLiquidationManager()\":{\"notice\":\"return LiquidationManager address\"},\"getMarginCalculator()\":{\"notice\":\"return MarginCalculator address\"},\"getMarginPool()\":{\"notice\":\"return MarginPool address\"},\"getOracle()\":{\"notice\":\"return Oracle address\"},\"getOtokenFactory()\":{\"notice\":\"return oTokenFactory address\"},\"getOtokenImpl()\":{\"notice\":\"return Otoken implementation address\"},\"getWhitelist()\":{\"notice\":\"return Whitelist address\"},\"setAddress(bytes32,address)\":{\"notice\":\"set a specific address for a specific key\"},\"setController(address)\":{\"notice\":\"set Controller address\"},\"setLiquidationManager(address)\":{\"notice\":\"set LiquidationManager address\"},\"setMarginCalculator(address)\":{\"notice\":\"set MarginCalculator address\"},\"setMarginPool(address)\":{\"notice\":\"set MarginPool address\"},\"setOracle(address)\":{\"notice\":\"set Oracle address\"},\"setOtokenFactory(address)\":{\"notice\":\"set OtokenFactory address\"},\"setOtokenImpl(address)\":{\"notice\":\"set Otoken implementation address\"},\"setWhitelist(address)\":{\"notice\":\"set Whitelist address\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/core/AddressBook.sol\":\"AddressBook\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/AddressBook.sol\":{\"keccak256\":\"0x3e8f90db8b7a745d4878a6747d4a6815d485e31132771a5e163ff51e5e9f6491\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://67df2d86693efe162ac7a91aec091068cb42bffdd8973687410015470a16f3f1\",\"dweb:/ipfs/QmSs1fuVSjDEaZRGgv8JGoouReWUfwut2rGGVoF1U18e9B\"]},\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]},\"contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol\":{\"keccak256\":\"0x1f32caffdf76f9ddf1848d394e63dfafb7d5327df56b645e08666b07f3797a44\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://31289a72ebeb94c37960c5a5fe680ae2eeffa2a2bf3a968d7ec448cdd2d21865\",\"dweb:/ipfs/QmTYcfxKTdNMbKeveJV8Xv7RhR4bHxjUZWsTTRGmJcug49\"]},\"contracts/packages/oz/upgradeability/Proxy.sol\":{\"keccak256\":\"0x90f189968a3dece9fea91aec114ba65748fcb3baec2da20bf6e70a4fda78f416\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://df9dc9929a264be0da59941145895fd152aad7eb7766ba4adf74105b7bf1e080\",\"dweb:/ipfs/QmQQZDkW77NwK3waeh95aZzD1uM1DNgXJaVtxRx8hW4eL6\"]},\"contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol\":{\"keccak256\":\"0x762536e1e1f155354c34d4a227195c0cfdc77742e371aaa5b061e79a7b863401\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://48d898dc4c054f5d1da814f7ef0d538f7bc58a02ff338b48773819e61f9bf7fa\",\"dweb:/ipfs/QmRnKjmVtsVvVk5W6GEh3J2VkDoUpBPyUxWCuKPNw4rcPd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/Controller.sol": {
+ "Controller": {
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "accountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isSet",
+ "type": "bool"
+ }
+ ],
+ "name": "AccountOperatorUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "CallExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isRestricted",
+ "type": "bool"
+ }
+ ],
+ "name": "CallRestricted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "accountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "CollateralAssetDeposited",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "AccountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "CollateralAssetWithdrawed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "donator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Donated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldFullPauser",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newFullPauser",
+ "type": "address"
+ }
+ ],
+ "name": "FullPauserUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "accountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "LongOtokenDeposited",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "AccountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "LongOtokenWithdrawed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "cap",
+ "type": "uint256"
+ }
+ ],
+ "name": "NakedCapUpdated",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldPartialPauser",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newPartialPauser",
+ "type": "address"
+ }
+ ],
+ "name": "PartialPauserUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "redeemer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "collateralAsset",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "otokenBurned",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "payout",
+ "type": "uint256"
+ }
+ ],
+ "name": "Redeem",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "AccountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "ShortOtokenBurned",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "AccountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "ShortOtokenMinted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isPaused",
+ "type": "bool"
+ }
+ ],
+ "name": "SystemFullyPaused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isPaused",
+ "type": "bool"
+ }
+ ],
+ "name": "SystemPartiallyPaused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "liquidator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "vaultOwner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "auctionPrice",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "auctionStartingRound",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "collateralPayout",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "debtAmount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ }
+ ],
+ "name": "VaultLiquidated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "accountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "VaultOpened",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "accountOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oTokenAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "payout",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "VaultSettled",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "addressbook",
+ "outputs": [
+ {
+ "internalType": "contract AddressBookInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "calculator",
+ "outputs": [
+ {
+ "internalType": "contract MarginCalculatorInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "callRestricted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiry",
+ "type": "uint256"
+ }
+ ],
+ "name": "canSettleAssets",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "donate",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "fullPauser",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_accountOwner",
+ "type": "address"
+ }
+ ],
+ "name": "getAccountVaultCounter",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getConfiguration",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getNakedCap",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getNakedPoolBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "getPayout",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getProceed",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVault",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVaultWithDetails",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "hasExpired",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_roundId",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLiquidatable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "name": "isOperator",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "isSettlementAllowed",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs[]",
+ "name": "_actions",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "operate",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "partialPauser",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "pool",
+ "outputs": [
+ {
+ "internalType": "contract MarginPoolInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "refreshConfiguration",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "_isRestricted",
+ "type": "bool"
+ }
+ ],
+ "name": "setCallRestriction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_fullPauser",
+ "type": "address"
+ }
+ ],
+ "name": "setFullPauser",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_cap",
+ "type": "uint256"
+ }
+ ],
+ "name": "setNakedCap",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isOperator",
+ "type": "bool"
+ }
+ ],
+ "name": "setOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_partialPauser",
+ "type": "address"
+ }
+ ],
+ "name": "setPartialPauser",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "_fullyPaused",
+ "type": "bool"
+ }
+ ],
+ "name": "setSystemFullyPaused",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "_partiallyPaused",
+ "type": "bool"
+ }
+ ],
+ "name": "setSystemPartiallyPaused",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultId",
+ "type": "uint256"
+ }
+ ],
+ "name": "sync",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "systemFullyPaused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "systemPartiallyPaused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "whitelist",
+ "outputs": [
+ {
+ "internalType": "contract WhitelistInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {
+ "contracts/libs/MarginVault.sol": {
+ "MarginVault": [
+ {
+ "length": 20,
+ "start": 10727
+ },
+ {
+ "length": 20,
+ "start": 11496
+ },
+ {
+ "length": 20,
+ "start": 12358
+ },
+ {
+ "length": 20,
+ "start": 13115
+ },
+ {
+ "length": 20,
+ "start": 13979
+ },
+ {
+ "length": 20,
+ "start": 14738
+ },
+ {
+ "length": 20,
+ "start": 17804
+ },
+ {
+ "length": 20,
+ "start": 17975
+ }
+ ]
+ }
+ },
+ "object": "608060405234801561001057600080fd5b50615d8f80620000216000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063b617f0c611610130578063ce3e39c0116100b8578063eaa33e141161007c578063eaa33e1414610479578063eab7775b1461049b578063ef4fcafa146104a3578063f2fde38b146104b6578063f77bc88b146104c957610232565b8063ce3e39c014610418578063d66dd43e14610420578063d99d13f514610433578063e69d849d14610453578063e723406c1461046657610232565b8063c220101d116100ff578063c220101d146103c4578063c644d3a2146103d7578063caa6d21a146103ea578063cab2e805146103fd578063cdee058a1461041057610232565b8063b617f0c614610378578063b6363cf21461038b578063bc463a3d1461039e578063beca75d7146103b157610232565b80636bd50cef116101be5780638da5cb5b116101825780638da5cb5b1461032b57806393e59dc1146103335780639daafbe81461033b5780639db938911461035d5780639f677ed91461036557610232565b80636bd50cef146102f35780636c0c3b991461030b57806370dc320c14610313578063715018a61461031b5780637dc0d1d01461032357610232565b8063485cc95511610205578063485cc95514610292578063558a7297146102a5578063565eea19146102b8578063573c473e146102d857806364681083146102eb57610232565b806314b93faf1461023757806316f0115b1461026057806329729d88146102755780632eb1c3a71461027d575b600080fd5b61024a610245366004614e73565b6104dc565b60405161025791906153c0565b60405180910390f35b6102686104f3565b60405161025791906152f7565b610268610502565b61029061028b366004614f63565b610511565b005b6102906102a0366004614e3b565b6105c6565b6102906102b3366004614f36565b6106de565b6102cb6102c6366004614f63565b610797565b6040516102579190615cd5565b6102906102e63660046150f8565b610849565b610290610900565b6102fb61093f565b6040516102579493929190615374565b61024a610964565b610268610974565b610290610983565b610268610a02565b610268610a11565b610268610a21565b61034e610349366004614f63565b610a30565b60405161025793929190615c5d565b610268610cc9565b6102906103733660046150f8565b610cd8565b610290610386366004614fc2565b610d84565b61024a610399366004614e3b565b610e16565b6102906103ac366004614e03565b610e44565b6102906103bf366004614e03565b610f29565b6102cb6103d2366004614f63565b61100e565b6102cb6103e5366004614e03565b6110cf565b6102cb6103f8366004614e03565b6110ea565b61029061040b3660046150f8565b611105565b61024a6111bc565b6102686111cc565b6102cb61042e366004614e03565b6111db565b610446610441366004614f63565b6111f6565b6040516102579190615c28565b610290610461366004614f63565b611457565b61024a610474366004614e03565b611500565b61048c610487366004614f8e565b61152f565b604051610257939291906153cb565b61024a611556565b6102906104b1366004614f63565b611566565b6102906104c4366004614e03565b6115d9565b61024a6104d7366004614e03565b611690565b60006104ea8585858561170c565b95945050505050565b60cd546001600160a01b031681565b60cf546001600160a01b031681565b6105196118a1565b6065546001600160a01b0390811691161461054f5760405162461bcd60e51b8152600401610546906158a3565b60405180910390fd5b6000811161056f5760405162461bcd60e51b81526004016105469061575f565b6001600160a01b038216600081815260d5602052604090819020839055517f6ff730ba70e34bd5ca823424bd15ab869cadc6bad079b527c71bde444ad6402b906105ba908490615cd5565b60405180910390a25050565b600054610100900460ff16806105df57506105df6118a5565b806105ed575060005460ff16155b6106095760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff16158015610634576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03831661065a5760405162461bcd60e51b81526004016105469061580c565b6001600160a01b0382166106805760405162461bcd60e51b815260040161054690615bd4565b610689826118ab565b610691611940565b60c980546001600160a01b0319166001600160a01b0385161790556106b46119d0565b60cf805460ff60b01b1916600160b01b17905580156106d9576000805461ff00191690555b505050565b33600090815260d2602090815260408083206001600160a01b038616845290915290205460ff16151581151514156107285760405162461bcd60e51b815260040161054690615af2565b33600081815260d2602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f1ae45540b0875932452da603b351ce2f1758258ba1345e79f8fc94f044cb07879061078b9085906153c0565b60405180910390a35050565b60cc54604051630478409360e41b8152600091610840916305f5e100916108349186916001600160a01b0316906347840930906107d8908a906004016152f7565b60206040518083038186803b1580156107f057600080fd5b505afa158015610804573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108289190615166565b9063ffffffff611c2b16565b9063ffffffff611c6516565b90505b92915050565b60ce546001600160a01b031633146108735760405162461bcd60e51b81526004016105469061553f565b60cf5460ff600160a01b90910416151581151514156108a45760405162461bcd60e51b815260040161054690615af2565b60cf805460ff60a01b1916600160a01b831515810291909117918290556040517f531c3d7229f510a8da00a0f5792686958cdd9c8a120c3c030a6053cd66b68556926108f59260ff910416906153c0565b60405180910390a150565b6109086118a1565b6065546001600160a01b039081169116146109355760405162461bcd60e51b8152600401610546906158a3565b61093d6119d0565b565b60ca5460cb5460cc5460cd546001600160a01b03938416949284169391821692911690565b60cf54600160b01b900460ff1681565b60c9546001600160a01b031681565b61098b6118a1565b6065546001600160a01b039081169116146109b85760405162461bcd60e51b8152600401610546906158a3565b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60cb546001600160a01b031681565b6065546001600160a01b03165b90565b60ca546001600160a01b031681565b610a38614bb9565b6001600160a01b038316600081815260d160209081526040808320868452825280832084845260d3835281842087855283528184205494845260d483528184208785528352818420548251825460e09581028201860190945260c081018481529596879693959094929391928692849290918491840182828015610ae557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ac7575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610b4757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b29575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610ba957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b8b575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610c0157602002820191906000526020600020905b815481526020019060010190808311610bed575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610c5957602002820191906000526020600020905b815481526020019060010190808311610c45575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610cb157602002820191906000526020600020905b815481526020019060010190808311610c9d575b50505050508152505092509250925092509250925092565b60ce546001600160a01b031681565b60cf546001600160a01b03163314610d025760405162461bcd60e51b81526004016105469061577c565b60cf5460ff600160a81b9091041615158115151415610d335760405162461bcd60e51b815260040161054690615af2565b60cf805460ff60a81b1916600160a81b831515810291909117918290556040517f4f1d0445688d95c99ca9fc036f551b205fd18ff26a4443b1979c16d1ba66b535926108f59260ff910416906153c0565b60975460ff16610da65760405162461bcd60e51b815260040161054690615b9d565b6097805460ff19169055610db8611ca7565b6000806000610dc684611cd1565b9250925092508215610e0357610ddc8282611f87565b6001600160a01b038216600090815260d46020908152604080832084845290915290204290555b50506097805460ff191660011790555050565b6001600160a01b03918216600090815260d26020908152604080832093909416825291909152205460ff1690565b610e4c6118a1565b6065546001600160a01b03908116911614610e795760405162461bcd60e51b8152600401610546906158a3565b6001600160a01b038116610e9f5760405162461bcd60e51b815260040161054690615679565b60ce546001600160a01b0382811691161415610ecd5760405162461bcd60e51b815260040161054690615af2565b60ce546040516001600160a01b038084169216907f1440312dbc326ddc21bfa95078324bf5aaf6899e8a27cba3057c60adfc84e40b90600090a360ce80546001600160a01b0319166001600160a01b0392909216919091179055565b610f316118a1565b6065546001600160a01b03908116911614610f5e5760405162461bcd60e51b8152600401610546906158a3565b6001600160a01b038116610f845760405162461bcd60e51b8152600401610546906155af565b60cf546001600160a01b0382811691161415610fb25760405162461bcd60e51b815260040161054690615af2565b60cf546040516001600160a01b038084169216907f44f3e9e7b454118e9fcb2e3026396f57ca21d7bd7dcabd31d7f986806422f4df90600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611018614bb9565b60006110248585610a30565b5060cc5460405163cd43fbfb60e01b815292945090925060009182916001600160a01b03169063cd43fbfb906110609087908790600401615c3b565b604080518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af919061517e565b91509150806110c5576000945050505050610843565b5095945050505050565b6001600160a01b0316600090815260d5602052604090205490565b6001600160a01b0316600090815260d0602052604090205490565b61110d6118a1565b6065546001600160a01b0390811691161461113a5760405162461bcd60e51b8152600401610546906158a3565b60cf5460ff600160b01b909104161515811515141561116b5760405162461bcd60e51b815260040161054690615af2565b60cf805460ff60b01b1916600160b01b831515810291909117918290556040517f26d614575a4c104c181c87003d4bb00cc7ade00d5b47bf8775171c12a376b255926108f59260ff910416906153c0565b60cf54600160a01b900460ff1681565b60cc546001600160a01b031681565b6001600160a01b0316600090815260d6602052604090205490565b6111fe614bb9565b6001600160a01b038316600090815260d1602090815260408083208584528252918290208251815460e09381028201840190945260c08101848152909391928492849184018282801561127a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161125c575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156112dc57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112be575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561133e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611320575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561139657602002820191906000526020600020905b815481526020019060010190808311611382575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156113ee57602002820191906000526020600020905b8154815260200190600101908083116113da575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561144657602002820191906000526020600020905b815481526020019060010190808311611432575b505050505081525050905092915050565b60cd5460405163dd2c99f760e01b81526001600160a01b039091169063dd2c99f79061148b90859033908690600401615350565b600060405180830381600087803b1580156114a557600080fd5b505af11580156114b9573d6000803e3d6000fd5b50505050816001600160a01b0316336001600160a01b03167f4dfff917e1fbb261a082e98cc7d43029621f6a6eb05ff3fef1510d5f1eb4857c8360405161078b9190615cd5565b60008060008060006115118661204d565b93509350935093506115258484848461170c565b9695505050505050565b6000806000806000806115438989896122b2565b919c909b50909950975050505050505050565b60cf54600160a81b900460ff1681565b60975460ff166115885760405162461bcd60e51b815260040161054690615b9d565b6097805460ff1916905561159a611ca7565b6115a48282611f87565b6001600160a01b03909116600090815260d460209081526040808320938352929052204290556097805460ff19166001179055565b6115e16118a1565b6065546001600160a01b0390811691161461160e5760405162461bcd60e51b8152600401610546906158a3565b6001600160a01b0381166116345760405162461bcd60e51b8152600401610546906154f9565b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190615166565b42101592915050565b60cb54604051635fdc714960e01b81526000916001600160a01b031690635fdc71499061173f9088908690600401615337565b60206040518083038186803b15801561175757600080fd5b505afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190615114565b8015611818575060cb54604051635fdc714960e01b81526001600160a01b0390911690635fdc7149906117c89087908690600401615337565b60206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190615114565b80156104ea575060cb54604051635fdc714960e01b81526001600160a01b0390911690635fdc7149906118519086908690600401615337565b60206040518083038186803b15801561186957600080fd5b505afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ea9190615114565b3390565b303b1590565b600054610100900460ff16806118c457506118c46118a5565b806118d2575060005460ff16155b6118ee5760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff16158015611919576000805460ff1961ff0019909116610100171660011790555b61192161238d565b61192a8261240f565b801561193c576000805461ff00191690555b5050565b600054610100900460ff168061195957506119596118a5565b80611967575060005460ff16155b6119835760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff161580156119ae576000805460ff1961ff0019909116610100171660011790555b6097805460ff1916600117905580156119cd576000805461ff00191690555b50565b60c960009054906101000a90046001600160a01b03166001600160a01b031663d01f63f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1e57600080fd5b505afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a569190614e1f565b60ca80546001600160a01b0319166001600160a01b0392831617905560c9546040805163419d8fe760e11b81529051919092169163833b1fce916004808301926020929190829003018186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614e1f565b60cb80546001600160a01b0319166001600160a01b0392831617905560c9546040805163cf28493f60e01b81529051919092169163cf28493f916004808301926020929190829003018186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190614e1f565b60cc80546001600160a01b0319166001600160a01b0392831617905560c95460408051633aa431a160e11b8152905191909216916375486342916004808301926020929190829003018186803b158015611bd157600080fd5b505afa158015611be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c099190614e1f565b60cd80546001600160a01b0319166001600160a01b0392909216919091179055565b600082611c3a57506000610843565b82820282848281611c4757fe5b04146108405760405162461bcd60e51b815260040161054690615845565b600061084083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124db565b60cf54600160a81b900460ff161561093d5760405162461bcd60e51b815260040161054690615c0c565b60008080808080805b8751811015611f7b57611ceb614bef565b888281518110611cf757fe5b60209081029190910101518051909150600781600a811115611d1557fe5b14158015611d2f5750600881600a811115611d2c57fe5b14155b8015611d475750600a81600a811115611d4457fe5b14155b8015611d5f5750600981600a811115611d5c57fe5b14155b15611dd5578315611dc25781602001516001600160a01b0316866001600160a01b031614611d9f5760405162461bcd60e51b8152600401610546906157d2565b81608001518514611dc25760405162461bcd60e51b8152600401610546906155e9565b6001935081608001519450816020015195505b600081600a811115611de357fe5b1415611dff57611dfa611df583612512565b6125ea565b611f71565b600381600a811115611e0d57fe5b1415611e2457611dfa611e1f836126d9565b6127b5565b600481600a811115611e3257fe5b1415611e4957611dfa611e4483612b06565b612ba5565b600581600a811115611e5757fe5b1415611e6e57611dfa611e69836126d9565b612df9565b600681600a811115611e7c57fe5b1415611e9357611dfa611e8e83612b06565b613157565b600181600a811115611ea157fe5b1415611eb857611dfa611eb38361345b565b6134b9565b600281600a811115611ec657fe5b1415611edd57611dfa611ed8836137a1565b6137ff565b600881600a811115611eeb57fe5b1415611f0257611dfa611efd83613a98565b613b2a565b600781600a811115611f1057fe5b1415611f2757611dfa611f2283613d79565b613e41565b600a81600a811115611f3557fe5b1415611f4c57611dfa611f478361429e565b6143b8565b600981600a811115611f5a57fe5b1415611f7157611f71611f6c83614837565b6148bc565b5050600101611cda565b50969195509350915050565b611f8f614bb9565b6000611f9b8484610a30565b5060cc5460405163cd43fbfb60e01b81529294509092506000916001600160a01b039091169063cd43fbfb90611fd79086908690600401615c3b565b604080518083038186803b158015611fee57600080fd5b505afa158015612002573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612026919061517e565b915050806120465760405162461bcd60e51b815260040161054690615412565b5050505050565b6000806000806000859050806001600160a01b031663af0968fc6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561209157600080fd5b505afa9250505080156120c1575060408051601f3d908101601f191682019092526120be91810190614ec3565b60015b61229757806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b1580156120fe57600080fd5b505afa158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190614e1f565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561216f57600080fd5b505afa158015612183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a79190614e1f565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b1580156121e057600080fd5b505afa1580156121f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122189190614e1f565b836001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561225157600080fd5b505afa158015612265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122899190615166565b9450945094509450506122ab565b5093985091965094509092506122ab915050565b9193509193565b6122ba614bb9565b60008060006122c7614bb9565b6000806122d48a8a610a30565b925092509250600080600060cc60009054906101000a90046001600160a01b03166001600160a01b031663a6c569078787878f6040518563ffffffff1660e01b81526004016123269493929190615c82565b60606040518083038186803b15801561233e57600080fd5b505afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123769190615130565b979f919e509c50959a509498505050505050505050565b600054610100900460ff16806123a657506123a66118a5565b806123b4575060005460ff16155b6123d05760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff161580156123fb576000805460ff1961ff0019909116610100171660011790555b80156119cd576000805461ff001916905550565b600054610100900460ff168061242857506124286118a5565b80612436575060005460ff16155b6124525760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff1615801561247d576000805460ff1961ff0019909116610100171660011790555b606580546001600160a01b0319166001600160a01b0384169081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3801561193c576000805461ff00191690555050565b600081836124fc5760405162461bcd60e51b815260040161054691906153e3565b50600083858161250857fe5b0495945050505050565b61251a614c50565b60008251600a81111561252957fe5b146125465760405162461bcd60e51b815260040161054690615623565b60208201516001600160a01b03166125705760405162461bcd60e51b8152600401610546906156b2565b60008260e00151516020141561259b578260e001518060200190518101906125989190615166565b90505b600281106125bb5760405162461bcd60e51b8152600401610546906154c0565b604080516060810182526020808601516001600160a01b03168252608090950151948101949094528301525090565b6125f26149af565b8051339061260082826149d9565b82516001600160a01b0316600090815260d0602052604081205461262b90600163ffffffff614a3a16565b9050808460200151146126505760405162461bcd60e51b8152600401610546906157b5565b83516001600160a01b03908116600090815260d060209081526040808320859055808801805189518616855260d384528285208786529093529281902091909155905186519151909291909116907f5d66689e2c864b4f21efd3988c0ce5dc8a197981b68e81ce73660e92394fe25f906126cb908590615cd5565b60405180910390a350505050565b6126e1614c7a565b60038251600a8111156126f057fe5b1480612708575060058251600a81111561270657fe5b145b6127245760405162461bcd60e51b8152600401610546906159f1565b60208201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615a0d565b6040518060c0016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b0316815260200183606001516001600160a01b031681526020018360c0015181526020018360a001518152509050919050565b6127bd6149af565b805133906127cb82826149d9565b6127dd83600001518460200151614a5f565b6127f95760405162461bcd60e51b815260040161054690615725565b60408301516001600160a01b031633148061282d575082600001516001600160a01b031683604001516001600160a01b0316145b6128495760405162461bcd60e51b81526004016105469061555b565b60ca5460608401516040516302328d7360e31b81526001600160a01b03909216916311946b989161287c916004016152f7565b60206040518083038186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190615114565b6128e85760405162461bcd60e51b815260040161054690615b63565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561292a57600080fd5b505afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190615166565b42106129805760405162461bcd60e51b8152600401610546906156ce565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a08701516080880151935163155bf27360e31b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463aadf9398946129f39490939092909190600401615cb1565b60006040518083038186803b158015612a0b57600080fd5b505af4158015612a1f573d6000803e3d6000fd5b505060cd54606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f79450612a6393909190600401615350565b600060405180830381600087803b158015612a7d57600080fd5b505af1158015612a91573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167f2607e210004cef0ad6b3e6aedb778bffb03c1586f8dcf55d49afffde210d8bb187602001518860a00151604051612af8929190615cde565b60405180910390a450505050565b612b0e614c7a565b60048251600a811115612b1d57fe5b1480612b35575060068251600a811115612b3357fe5b145b612b515760405162461bcd60e51b8152600401610546906158d8565b60208201516001600160a01b0316612b7b5760405162461bcd60e51b815260040161054690615469565b60408201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615960565b612bad6149af565b80513390612bbb82826149d9565b612bcd83600001518460200151614a5f565b612be95760405162461bcd60e51b815260040161054690615725565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c2b57600080fd5b505afa158015612c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c639190615166565b4210612c815760405162461bcd60e51b815260040161054690615a7f565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a08701516080880151935163951dd8d360e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463951dd8d394612cf49490939092909190600401615cb1565b60006040518083038186803b158015612d0c57600080fd5b505af4158015612d20573d6000803e3d6000fd5b505060cd54606087015160408089015160a08a0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a59450612d6493909190600401615350565b600060405180830381600087803b158015612d7e57600080fd5b505af1158015612d92573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167fbd023c53d293da163d185720d4274f4ddabc09d5304491a55abb296cc811d9fa87602001518860a00151604051612af8929190615cde565b612e016149af565b80513390612e0f82826149d9565b612e2183600001518460200151614a5f565b612e3d5760405162461bcd60e51b815260040161054690615725565b60408301516001600160a01b0316331480612e71575082600001516001600160a01b031683604001516001600160a01b0316145b612e8d5760405162461bcd60e51b81526004016105469061542f565b60ca54606084015160405163f9839d8960e01b81526001600160a01b039092169163f9839d8991612ec0916004016152f7565b60206040518083038186803b158015612ed857600080fd5b505afa158015612eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f109190615114565b612f2c5760405162461bcd60e51b815260040161054690615708565b6000612f4084600001518560200151610a30565b509150508060011415612fdf5760a084015160608501516001600160a01b0316600090815260d66020526040902054612f7e9163ffffffff614a3a16565b6060850180516001600160a01b03908116600090815260d6602081815260408084209690965584518416835260d58152858320549451909316825290915291909120541115612fdf5760405162461bcd60e51b815260040161054690615886565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a0870151608088015193516301f974ab60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__94637e5d2ac0946130529490939092909190600401615cb1565b60006040518083038186803b15801561306a57600080fd5b505af415801561307e573d6000803e3d6000fd5b505060cd54606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f794506130c293909190600401615350565b600060405180830381600087803b1580156130dc57600080fd5b505af11580156130f0573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167fbfab88b861f171b7db714f00e5966131253918d55ddba816c3eb94657d10239087602001518860a00151604051612af8929190615cde565b61315f6149af565b8051339061316d82826149d9565b61317f83600001518460200151614a5f565b61319b5760405162461bcd60e51b815260040161054690615725565b6131a3614bb9565b60006131b785600001518660200151610a30565b50915091506131c98260000151614a8c565b1561327c57600082600001516000815181106131e157fe5b60200260200101519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561322457600080fd5b505afa158015613238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325c9190615166565b421061327a5760405162461bcd60e51b815260040161054690615943565b505b80600114156132d45760a085015160608601516001600160a01b0316600090815260d660205260409020546132b69163ffffffff614aca16565b60608601516001600160a01b0316600090815260d660205260409020555b84516001600160a01b0316600090815260d16020908152604080832082890151845290915290819020606087015160a088015160808901519351630380bfdd60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463e02ff740946133479490939092909190600401615cb1565b60006040518083038186803b15801561335f57600080fd5b505af4158015613373573d6000803e3d6000fd5b505060cd5460608801516040808a015160a08b0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a594506133b793909190600401615350565b600060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b5050505084604001516001600160a01b031685600001516001600160a01b031686606001516001600160a01b03167ffe86f7694b6c54a528acbe27be61dd4a85e9a89aeef7f650a1b439045ccee5a488602001518960a0015160405161344c929190615cde565b60405180910390a45050505050565b613463614c7a565b60018251600a81111561347257fe5b1461348f5760405162461bcd60e51b815260040161054690615b0e565b60208201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615b47565b6134c16149af565b805133906134cf82826149d9565b6134e183600001518460200151614a5f565b6134fd5760405162461bcd60e51b815260040161054690615725565b60ca5460608401516040516302328d7360e31b81526001600160a01b03909216916311946b9891613530916004016152f7565b60206040518083038186803b15801561354857600080fd5b505afa15801561355c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135809190615114565b61359c5760405162461bcd60e51b81526004016105469061563f565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135de57600080fd5b505afa1580156135f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136169190615166565b42106136345760405162461bcd60e51b815260040161054690615828565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a08701516080880151935163ef682c1b60e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463ef682c1b946136a79490939092909190600401615cb1565b60006040518083038186803b1580156136bf57600080fd5b505af41580156136d3573d6000803e3d6000fd5b50505060408086015160a0870151915163051b0a4160e41b81526001600160a01b03851693506351b0a4109261370c9291600401615337565b600060405180830381600087803b15801561372657600080fd5b505af115801561373a573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167f4d7f96086c92b2f9a254ad21548b1c1f2d99502c7949508866349b96bb1a8d8a87602001518860a00151604051612af8929190615cde565b6137a9614c7a565b60028251600a8111156137b857fe5b146137d55760405162461bcd60e51b815260040161054690615a46565b60208201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615696565b6138076149af565b8051339061381582826149d9565b61382783600001518460200151614a5f565b6138435760405162461bcd60e51b815260040161054690615725565b60408301516001600160a01b0316331480613877575082600001516001600160a01b031683604001516001600160a01b0316145b6138935760405162461bcd60e51b81526004016105469061565c565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d557600080fd5b505afa1580156138e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390d9190615166565b421061392b5760405162461bcd60e51b8152600401610546906154a3565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a087015160808801519351637b5c283560e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__94637b5c28359461399e9490939092909190600401615cb1565b60006040518083038186803b1580156139b657600080fd5b505af41580156139ca573d6000803e3d6000fd5b50505060408086015160a087015191516356d878f760e01b81526001600160a01b03851693506356d878f792613a039291600401615337565b600060405180830381600087803b158015613a1d57600080fd5b505af1158015613a31573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167fdd96b18f26fd9950581b9fd821fa907fc318845fc4d220b825a7b19bfdd174e887602001518860a00151604051612af8929190615cde565b613aa0614ccb565b60088251600a811115613aaf57fe5b14613acc5760405162461bcd60e51b815260040161054690615b2a565b60408201516001600160a01b0316613af65760405162461bcd60e51b815260040161054690615742565b506040805160608082018352838301516001600160a01b0390811683529084015116602082015260a0909201519082015290565b602081015160ca546040516302328d7360e31b81526001600160a01b03909116906311946b9890613b5f9084906004016152f7565b60206040518083038186803b158015613b7757600080fd5b505afa158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615114565b613bcb5760405162461bcd60e51b815260040161054690615b80565b600080600080613bda8561204d565b935093509350935080421015613c025760405162461bcd60e51b815260040161054690615a29565b613c0e8383868461170c565b613c2a5760405162461bcd60e51b81526004016105469061597d565b6000613c3e87602001518860400151610797565b9050856001600160a01b03166356d878f73389604001516040518363ffffffff1660e01b8152600401613c72929190615337565b600060405180830381600087803b158015613c8c57600080fd5b505af1158015613ca0573d6000803e3d6000fd5b505060cd54895160405163fa93b2a560e01b81526001600160a01b03909216935063fa93b2a59250613cd9918991908690600401615350565b600060405180830381600087803b158015613cf357600080fd5b505af1158015613d07573d6000803e3d6000fd5b5050505086600001516001600160a01b0316336001600160a01b031688602001516001600160a01b03167f18fd144d7dbcbaa6f00fd47a84adc7dc3cc64a326ffa2dc7691a25e3837dba03888b6040015186604051613d689392919061539f565b60405180910390a450505050505050565b613d81614ccb565b60078251600a811115613d9057fe5b14613dad5760405162461bcd60e51b8152600401610546906159d4565b60208201516001600160a01b0316613dd75760405162461bcd60e51b8152600401610546906154dc565b60408201516001600160a01b0316613e015760405162461bcd60e51b815260040161054690615a9c565b604051806060016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b03168152509050919050565b80513390613e4f82826149d9565b613e6183600001518460200151614a5f565b613e7d5760405162461bcd60e51b815260040161054690615725565b613e85614bb9565b6000613e9985600001518660200151610a30565b5091509150600080613eae8460000151614a8c565b90506000613ebf8560200151614a8c565b90508180613eca5750805b613ee65760405162461bcd60e51b81526004016105469061599a565b81613f09578460200151600081518110613efc57fe5b6020026020010151613f1f565b84518051600090613f1657fe5b60200260200101515b92508015613fd35760008560200151600081518110613f3a57fe5b60200260200101519050806001600160a01b03166356d878f760cd60009054906101000a90046001600160a01b03168860800151600081518110613f7a57fe5b60200260200101516040518363ffffffff1660e01b8152600401613f9f929190615337565b600060405180830381600087803b158015613fb957600080fd5b505af1158015613fcd573d6000803e3d6000fd5b50505050505b5050600080600080613fe48561204d565b93509350935093508042101561400c5760405162461bcd60e51b8152600401610546906156eb565b6140188383868461170c565b6140345760405162461bcd60e51b81526004016105469061597d565b60cc5460405163cd43fbfb60e01b815260009182916001600160a01b039091169063cd43fbfb9061406b908c908c90600401615c3b565b604080518083038186803b15801561408257600080fd5b505afa158015614096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ba919061517e565b91509150806140db5760405162461bcd60e51b815260040161054690615606565b60d160008d600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008d6020015181526020019081526020016000206000808201600061412a9190614ceb565b614138600183016000614ceb565b614146600283016000614ceb565b614154600383016000614ceb565b614162600483016000614ceb565b614170600583016000614ceb565b505087600114156141be576001600160a01b038616600090815260d660205260409020546141a4908363ffffffff614aca16565b6001600160a01b038716600090815260d660205260409020555b60cd546040808e0151905163fa93b2a560e01b81526001600160a01b039092169163fa93b2a5916141f6918a91908790600401615350565b600060405180830381600087803b15801561421057600080fd5b505af1158015614224573d6000803e3d6000fd5b5050505060008c60200151905060008d60400151905089896001600160a01b03168f600001516001600160a01b03167f522cda7dd0677ee4c9512efd8aa92af93de64b4c2fe2f8bfe7a9234a655a9bf58488876040516142869392919061539f565b60405180910390a45050505050505050505050505050565b6142a6614d09565b600a8251600a8111156142b557fe5b146142d25760405162461bcd60e51b81526004016105469061544c565b60208201516001600160a01b03166142fc5760405162461bcd60e51b8152600401610546906155cc565b60408201516001600160a01b03166143265760405162461bcd60e51b815260040161054690615486565b8160e001515160201461434b5760405162461bcd60e51b815260040161054690615a62565b60008260e001518060200190518101906143659190615166565b90506040518060a0016040528084602001516001600160a01b0316815260200184604001516001600160a01b03168152602001846080015181526020018460a00151815260200182815250915050919050565b6143c06149af565b6143d281600001518260400151614a5f565b6143ee5760405162461bcd60e51b815260040161054690615725565b6143f6614bb9565b60008060006144128560000151866040015187608001516122b2565b9350935093509350826144375760405162461bcd60e51b815260040161054690615ab9565b60006144586305f5e100610834858960600151611c2b90919063ffffffff16565b9050600061448b8760600151876060015160008151811061447557fe5b6020026020010151614aca90919063ffffffff16565b11156144c557816144a7828760a0015160008151811061447557fe5b10156144c55760405162461bcd60e51b815260040161054690615798565b845180516000906144d257fe5b60200260200101516001600160a01b03166356d878f73388606001516040518363ffffffff1660e01b815260040161450b929190615337565b600060405180830381600087803b15801561452557600080fd5b505af1158015614539573d6000803e3d6000fd5b505087516001600160a01b0316600090815260d160209081526040808320818c0151845290915280822090890151805173__$f483377b159a5ea0e3632e216689e4fd4e$__955063e02ff74094509192909161459157fe5b60200260200101518460006040518563ffffffff1660e01b81526004016145bb9493929190615cb1565b60006040518083038186803b1580156145d357600080fd5b505af41580156145e7573d6000803e3d6000fd5b505087516001600160a01b0316600090815260d160209081526040808320818c0151845290915281208851805173__$f483377b159a5ea0e3632e216689e4fd4e$__9550637b5c283594509192909161463c57fe5b6020026020010151896060015160006040518563ffffffff1660e01b815260040161466a9493929190615cb1565b60006040518083038186803b15801561468257600080fd5b505af4158015614696573d6000803e3d6000fd5b505050506146ea8160d6600088604001516000815181106146b357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054614aca90919063ffffffff16565b60d6600087604001516000815181106146ff57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060cd60009054906101000a90046001600160a01b03166001600160a01b031663fa93b2a5866040015160008151811061476057fe5b60200260200101518860200151846040518463ffffffff1660e01b815260040161478c93929190615350565b600060405180830381600087803b1580156147a657600080fd5b505af11580156147ba573d6000803e3d6000fd5b5050505085600001516001600160a01b031686602001516001600160a01b0316336001600160a01b03167f93e59ec97820bb1ed9fb6ddc10619d1574e803b1f79b937414feb8f6b7051f9d868a60800151868c606001518d60400151604051614827959493929190615cec565b60405180910390a4505050505050565b61483f614d4a565b60098251600a81111561484e57fe5b1461486b5760405162461bcd60e51b8152600401610546906157ef565b60408201516001600160a01b03166148955760405162461bcd60e51b8152600401610546906159b7565b50604080518082018252908201516001600160a01b0316815260e090910151602082015290565b6148c46149af565b805160cf54600160b01b900460ff16156148fd576148e181614b0c565b6148fd5760405162461bcd60e51b815260040161054690615bf0565b815160208301516040516309c23da560e41b81526001600160a01b0390921691639c23da50916149329133919060040161530b565b600060405180830381600087803b15801561494c57600080fd5b505af1158015614960573d6000803e3d6000fd5b5050505081600001516001600160a01b0316336001600160a01b03167f8750bdaf6e88201790ee2765fea3ac73b514a52658c818723a30de91029ad000846020015160405161078b91906153e3565b60cf54600160a01b900460ff161561093d5760405162461bcd60e51b815260040161054690615ad6565b806001600160a01b0316826001600160a01b03161480614a1e57506001600160a01b03808216600090815260d2602090815260408083209386168352929052205460ff165b61193c5760405162461bcd60e51b8152600401610546906153f6565b6000828201838110156108405760405162461bcd60e51b815260040161054690615578565b600080821180156108405750506001600160a01b0391909116600090815260d06020526040902054101590565b6000808251118015610843575060006001600160a01b031682600081518110614ab157fe5b60200260200101516001600160a01b0316141592915050565b600061084083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b8d565b60ca546040516351572a2d60e11b81526000916001600160a01b03169063a2ae545a90614b3d9085906004016152f7565b60206040518083038186803b158015614b5557600080fd5b505afa158015614b69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190615114565b60008184841115614bb15760405162461bcd60e51b815260040161054691906153e3565b505050900390565b6040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101008101909152806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6040518060c0016040528060006001600160a01b031681526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b50805460008255906000526020600020908101906119cd9190614d62565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b60408051808201909152600081526060602082015290565b610a1e91905b80821115614d7c5760008155600101614d68565b5090565b803561084381615d36565b600082601f830112614d9b578081fd5b813567ffffffffffffffff811115614db1578182fd5b614dc4601f8201601f1916602001615d0f565b9150808252836020828501011115614ddb57600080fd5b8060208401602084013760009082016020015292915050565b8035600b811061084357600080fd5b600060208284031215614e14578081fd5b813561084081615d36565b600060208284031215614e30578081fd5b815161084081615d36565b60008060408385031215614e4d578081fd5b8235614e5881615d36565b91506020830135614e6881615d36565b809150509250929050565b60008060008060808587031215614e88578182fd5b8435614e9381615d36565b93506020850135614ea381615d36565b92506040850135614eb381615d36565b9396929550929360600135925050565b60008060008060008060c08789031215614edb578182fd5b8651614ee681615d36565b6020880151909650614ef781615d36565b6040880151909550614f0881615d36565b80945050606087015192506080870151915060a0870151614f2881615d4b565b809150509295509295509295565b60008060408385031215614f48578182fd5b8235614f5381615d36565b91506020830135614e6881615d4b565b60008060408385031215614f75578182fd5b8235614f8081615d36565b946020939093013593505050565b600080600060608486031215614fa2578283fd5b8335614fad81615d36565b95602085013595506040909401359392505050565b60006020808385031215614fd4578182fd5b823567ffffffffffffffff80821115614feb578384fd5b81850186601f820112614ffc578485fd5b803592508183111561500c578485fd5b6150198485850201615d0f565b83815284810190828601875b868110156150e9578135850161010080601f19838f03011215615046578a8bfd5b61504f81615d0f565b61505b8e8c8501614df4565b815261506a8e60408501614d80565b8b820152606061507c8f828601614d80565b604083015261508e8f60808601614d80565b818301525060a0830135608082015260c083013560a082015260e083013560c082015281830135898111156150c1578c8dfd5b6150cf8f8d83870101614d8b565b60e083015250865250509287019290870190600101615025565b50909998505050505050505050565b600060208284031215615109578081fd5b813561084081615d4b565b600060208284031215615125578081fd5b815161084081615d4b565b600080600060608486031215615144578081fd5b835161514f81615d4b565b602085015160409095015190969495509392505050565b600060208284031215615177578081fd5b5051919050565b60008060408385031215615190578182fd5b825191506020830151614e6881615d4b565b6000815180845260208085019450808401835b838110156151da5781516001600160a01b0316875295820195908201906001016151b5565b509495945050505050565b6000815180845260208085019450808401835b838110156151da578151875295820195908201906001016151f8565b60008151808452815b818110156152395760208185018101518683018201520161521d565b8181111561524a5782602083870101525b50601f01601f19169290920160200192915050565b6000815160c0845261527460c08501826151a2565b60208401519150848103602086015261528d81836151a2565b6040850151925085810360408701526152a681846151a2565b9150506060840151915084810360608601526152c281836151e5565b6080850151925085810360808701526152db81846151e5565b91505060a0840151915084810360a08601526104ea81836151e5565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009061532f90830184615214565b949350505050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082526108406020830184615214565b602080825260029082015261219b60f11b604082015260600190565b60208082526003908201526210cc4d60ea1b604082015260600190565b60208082526003908201526204332360ec1b604082015260600190565b60208082526003908201526208262760eb1b604082015260600190565b60208082526003908201526241313160e81b604082015260600190565b60208082526003908201526204132360ec1b604082015260600190565b60208082526003908201526221991b60e91b604082015260600190565b602080825260029082015261413360f01b604082015260600190565b60208082526003908201526220989b60e91b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260029082015261219960f11b604082015260600190565b60208082526003908201526221989b60e91b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526003908201526204331360ec1b604082015260600190565b60208082526003908201526241313960e81b604082015260600190565b60208082526003908201526243313360e81b604082015260600190565b60208082526003908201526221999960e91b604082015260600190565b602080825260029082015261413160f01b604082015260600190565b60208082526003908201526243323360e81b604082015260600190565b60208082526003908201526243323560e81b604082015260600190565b60208082526003908201526243313160e81b604082015260600190565b602080825260029082015261413760f01b604082015260600190565b602080825260029082015261209960f11b604082015260600190565b60208082526003908201526208662760eb1b604082015260600190565b60208082526003908201526243333160e81b604082015260600190565b60208082526003908201526243323160e81b604082015260600190565b60208082526003908201526243333560e81b604082015260600190565b602080825260039082015262104c4d60ea1b604082015260600190565b60208082526003908201526221999b60e91b604082015260600190565b602080825260029082015261433160f01b604082015260600190565b60208082526003908201526210cccd60ea1b604082015260600190565b60208082526003908201526243313560e81b604082015260600190565b60208082526003908201526221989960e91b604082015260600190565b60208082526003908201526220991960e91b604082015260600190565b602080825260029082015261433760f01b604082015260600190565b60208082526003908201526210cc8d60ea1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526003908201526243333760e81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526003908201526204131360ec1b604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526003908201526221991960e91b604082015260600190565b60208082526003908201526220989960e91b604082015260600190565b60208082526003908201526243323960e81b604082015260600190565b60208082526003908201526204333360ec1b604082015260600190565b60208082526003908201526241323360e81b604082015260600190565b60208082526003908201526241313560e81b604082015260600190565b602080825260029082015261082760f31b604082015260600190565b602080825260029082015261413960f01b604082015260600190565b60208082526003908201526208664760eb1b604082015260600190565b602080825260029082015261209b60f11b604082015260600190565b60208082526003908201526241323160e81b604082015260600190565b60208082526003908201526243313960e81b604082015260600190565b60208082526003908201526241313760e81b604082015260600190565b60208082526003908201526243333360e81b604082015260600190565b60208082526002908201526110cd60f21b604082015260600190565b602080825260029082015261433960f01b604082015260600190565b602080825260029082015261104d60f21b604082015260600190565b60208082526003908201526241313360e81b604082015260600190565b602080825260029082015261413560f01b604082015260600190565b60208082526003908201526243313760e81b604082015260600190565b60208082526003908201526243323760e81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260029082015261086760f31b604082015260600190565b602080825260029082015261433360f01b604082015260600190565b602080825260029082015261433560f01b604082015260600190565b600060208252610840602083018461525f565b600060408252615c4e604083018561525f565b90508260208301529392505050565b600060608252615c70606083018661525f565b60208301949094525060400152919050565b600060808252615c95608083018761525f565b6020830195909552506040810192909252606090910152919050565b9384526001600160a01b039290921660208401526040830152606082015260800190565b90815260200190565b918252602082015260400190565b948552602085019390935260408401919091526060830152608082015260a00190565b60405181810167ffffffffffffffff81118282101715615d2e57600080fd5b604052919050565b6001600160a01b03811681146119cd57600080fd5b80151581146119cd57600080fdfea26469706673582212209746c15bc3c78dac535b2cbbc1fb373707a2499c21e5dd2623e146874c70972e64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D8F DUP1 PUSH3 0x21 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 0x232 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB617F0C6 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0xCE3E39C0 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xEAA33E14 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xEAA33E14 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xEAB7775B EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0xEF4FCAFA EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xF77BC88B EQ PUSH2 0x4C9 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0xCE3E39C0 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0xD66DD43E EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xD99D13F5 EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0xE69D849D EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xE723406C EQ PUSH2 0x466 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0xC220101D GT PUSH2 0xFF JUMPI DUP1 PUSH4 0xC220101D EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0xC644D3A2 EQ PUSH2 0x3D7 JUMPI DUP1 PUSH4 0xCAA6D21A EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xCAB2E805 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0xCDEE058A EQ PUSH2 0x410 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0xB617F0C6 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0xB6363CF2 EQ PUSH2 0x38B JUMPI DUP1 PUSH4 0xBC463A3D EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0xBECA75D7 EQ PUSH2 0x3B1 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x6BD50CEF GT PUSH2 0x1BE JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x182 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x93E59DC1 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0x9DAAFBE8 EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0x9DB93891 EQ PUSH2 0x35D JUMPI DUP1 PUSH4 0x9F677ED9 EQ PUSH2 0x365 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x6BD50CEF EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x6C0C3B99 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0x70DC320C EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x31B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x323 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x485CC955 GT PUSH2 0x205 JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x558A7297 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x565EEA19 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x573C473E EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x64681083 EQ PUSH2 0x2EB JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x14B93FAF EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0x29729D88 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x2EB1C3A7 EQ PUSH2 0x27D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24A PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E73 JUMP JUMPDEST PUSH2 0x4DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x268 PUSH2 0x4F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x52F7 JUMP JUMPDEST PUSH2 0x268 PUSH2 0x502 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x28B CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x511 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x290 PUSH2 0x2A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E3B JUMP JUMPDEST PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F36 JUMP JUMPDEST PUSH2 0x6DE JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x797 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x2E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x849 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x900 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x93F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5374 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x964 JUMP JUMPDEST PUSH2 0x268 PUSH2 0x974 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x983 JUMP JUMPDEST PUSH2 0x268 PUSH2 0xA02 JUMP JUMPDEST PUSH2 0x268 PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x268 PUSH2 0xA21 JUMP JUMPDEST PUSH2 0x34E PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5C5D JUMP JUMPDEST PUSH2 0x268 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x373 CALLDATASIZE PUSH1 0x4 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0xCD8 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x386 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FC2 JUMP JUMPDEST PUSH2 0xD84 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x399 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E3B JUMP JUMPDEST PUSH2 0xE16 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x3AC CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0xE44 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x3BF CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0xF29 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x3D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x100E JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x3E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x10CF JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x3F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x10EA JUMP JUMPDEST PUSH2 0x290 PUSH2 0x40B CALLDATASIZE PUSH1 0x4 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x1105 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x11BC JUMP JUMPDEST PUSH2 0x268 PUSH2 0x11CC JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x11DB JUMP JUMPDEST PUSH2 0x446 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x11F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x5C28 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x1457 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x1500 JUMP JUMPDEST PUSH2 0x48C PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F8E JUMP JUMPDEST PUSH2 0x152F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53CB JUMP JUMPDEST PUSH2 0x24A PUSH2 0x1556 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x1566 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x4C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x15D9 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x4D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x1690 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA DUP6 DUP6 DUP6 DUP6 PUSH2 0x170C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x519 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x54F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x56F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x575F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x6FF730BA70E34BD5CA823424BD15AB869CADC6BAD079B527C71BDE444AD6402B SWAP1 PUSH2 0x5BA SWAP1 DUP5 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x5DF JUMPI POP PUSH2 0x5DF PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x5ED JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x609 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x634 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x580C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x680 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5BD4 JUMP JUMPDEST PUSH2 0x689 DUP3 PUSH2 0x18AB JUMP JUMPDEST PUSH2 0x691 PUSH2 0x1940 JUMP JUMPDEST PUSH1 0xC9 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 PUSH2 0x6B4 PUSH2 0x19D0 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xB0 SHL NOT AND PUSH1 0x1 PUSH1 0xB0 SHL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO OR SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0x1AE45540B0875932452DA603B351CE2F1758258BA1345E79F8FC94F044CB0787 SWAP1 PUSH2 0x78B SWAP1 DUP6 SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0x4784093 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x840 SWAP2 PUSH4 0x5F5E100 SWAP2 PUSH2 0x834 SWAP2 DUP7 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x47840930 SWAP1 PUSH2 0x7D8 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x804 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x828 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C2B AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C65 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x873 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x553F JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0xFF PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x531C3D7229F510A8DA00A0F5792686958CDD9C8A120C3C030A6053CD66B68556 SWAP3 PUSH2 0x8F5 SWAP3 PUSH1 0xFF SWAP2 DIV AND SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x908 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x935 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH2 0x93D PUSH2 0x19D0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0xCB SLOAD PUSH1 0xCC SLOAD PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND SWAP5 SWAP3 DUP5 AND SWAP4 SWAP2 DUP3 AND SWAP3 SWAP2 AND SWAP1 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x98B PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x9B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xCB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xA38 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE PUSH1 0xD3 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP8 DUP6 MSTORE DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD SWAP5 DUP5 MSTORE PUSH1 0xD4 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP8 DUP6 MSTORE DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD DUP3 SLOAD PUSH1 0xE0 SWAP6 DUP2 MUL DUP3 ADD DUP7 ADD SWAP1 SWAP5 MSTORE PUSH1 0xC0 DUP2 ADD DUP5 DUP2 MSTORE SWAP6 SWAP7 DUP8 SWAP7 SWAP4 SWAP6 SWAP1 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP7 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xAE5 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 0xAC7 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD 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 0xB47 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 0xB29 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD 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 0xBA9 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 0xB8B JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD 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 0xC01 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xBED JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD 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 0xC59 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC45 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD 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 0xCB1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC9D JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x577C JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0xFF PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 SWAP2 DIV AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xA8 SHL NOT AND PUSH1 0x1 PUSH1 0xA8 SHL DUP4 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4F1D0445688D95C99CA9FC036F551B205FD18FF26A4443B1979C16D1BA66B535 SWAP3 PUSH2 0x8F5 SWAP3 PUSH1 0xFF SWAP2 DIV AND SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0xFF AND PUSH2 0xDA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B9D JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xDB8 PUSH2 0x1CA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xDC6 DUP5 PUSH2 0x1CD1 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0xE03 JUMPI PUSH2 0xDDC DUP3 DUP3 PUSH2 0x1F87 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST POP POP PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xE4C PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xE79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5679 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xECD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x1440312DBC326DDC21BFA95078324BF5AAF6899E8A27CBA3057C60ADFC84E40B SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0xCE 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 PUSH2 0xF31 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xF5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x55AF JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xFB2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x44F3E9E7B454118E9FCB2E3026396F57CA21D7BD7DCABD31D7F986806422F4DF SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0xCF 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 0x1018 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1024 DUP6 DUP6 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0xCD43FBFB PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xCD43FBFB SWAP1 PUSH2 0x1060 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1077 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x108B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10AF SWAP2 SWAP1 PUSH2 0x517E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 PUSH2 0x10C5 JUMPI PUSH1 0x0 SWAP5 POP POP POP POP POP PUSH2 0x843 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x110D PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x113A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0xFF PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 SWAP2 DIV AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0x116B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xB0 SHL NOT AND PUSH1 0x1 PUSH1 0xB0 SHL DUP4 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x26D614575A4C104C181C87003D4BB00CC7ADE00D5B47BF8775171C12A376B255 SWAP3 PUSH2 0x8F5 SWAP3 PUSH1 0xFF SWAP2 DIV AND SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x11FE PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0xE0 SWAP4 DUP2 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0xC0 DUP2 ADD DUP5 DUP2 MSTORE SWAP1 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x127A 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 0x125C JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD 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 0x12DC 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 0x12BE JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD 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 0x133E 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 0x1320 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD 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 0x1396 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1382 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD 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 0x13EE JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x13DA JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD 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 0x1446 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1432 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xDD2C99F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDD2C99F7 SWAP1 PUSH2 0x148B SWAP1 DUP6 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14B9 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 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x4DFFF917E1FBB261A082E98CC7D43029621F6A6EB05FF3FEF1510D5F1EB4857C DUP4 PUSH1 0x40 MLOAD PUSH2 0x78B SWAP2 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1511 DUP7 PUSH2 0x204D JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x1525 DUP5 DUP5 DUP5 DUP5 PUSH2 0x170C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1543 DUP10 DUP10 DUP10 PUSH2 0x22B2 JUMP JUMPDEST SWAP2 SWAP13 SWAP1 SWAP12 POP SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0xFF AND PUSH2 0x1588 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B9D JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x159A PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x15A4 DUP3 DUP3 PUSH2 0x1F87 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x15E1 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x160E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1634 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54F9 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x65 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 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP 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 0x5166 JUMP JUMPDEST TIMESTAMP LT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCB SLOAD PUSH1 0x40 MLOAD PUSH4 0x5FDC7149 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5FDC7149 SWAP1 PUSH2 0x173F SWAP1 DUP9 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x176B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x178F SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1818 JUMPI POP PUSH1 0xCB SLOAD PUSH1 0x40 MLOAD PUSH4 0x5FDC7149 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FDC7149 SWAP1 PUSH2 0x17C8 SWAP1 DUP8 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1818 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4EA JUMPI POP PUSH1 0xCB SLOAD PUSH1 0x40 MLOAD PUSH4 0x5FDC7149 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FDC7149 SWAP1 PUSH2 0x1851 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1869 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x187D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4EA SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x18C4 JUMPI POP PUSH2 0x18C4 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x18D2 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x18EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1919 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x1921 PUSH2 0x238D JUMP JUMPDEST PUSH2 0x192A DUP3 PUSH2 0x240F JUMP JUMPDEST DUP1 ISZERO PUSH2 0x193C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1959 JUMPI POP PUSH2 0x1959 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x1967 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1983 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x19AE JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0xC9 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 0xD01F63F5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A32 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A56 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0xC9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x419D8FE7 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x833B1FCE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE7 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0xC9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xCF28493F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xCF28493F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B78 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0xC9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3AA431A1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x75486342 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C09 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCD 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 DUP3 PUSH2 0x1C3A JUMPI POP PUSH1 0x0 PUSH2 0x843 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1C47 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5845 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x840 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x24DB JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5C0C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x1F7B JUMPI PUSH2 0x1CEB PUSH2 0x4BEF JUMP JUMPDEST DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1CF7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x7 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D15 JUMPI INVALID JUMPDEST EQ ISZERO DUP1 ISZERO PUSH2 0x1D2F JUMPI POP PUSH1 0x8 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D2C JUMPI INVALID JUMPDEST EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D47 JUMPI POP PUSH1 0xA DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D44 JUMPI INVALID JUMPDEST EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D5F JUMPI POP PUSH1 0x9 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D5C JUMPI INVALID JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x1DD5 JUMPI DUP4 ISZERO PUSH2 0x1DC2 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x57D2 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP6 EQ PUSH2 0x1DC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x55E9 JUMP JUMPDEST PUSH1 0x1 SWAP4 POP DUP2 PUSH1 0x80 ADD MLOAD SWAP5 POP DUP2 PUSH1 0x20 ADD MLOAD SWAP6 POP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1DE3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1DFF JUMPI PUSH2 0x1DFA PUSH2 0x1DF5 DUP4 PUSH2 0x2512 JUMP JUMPDEST PUSH2 0x25EA JUMP JUMPDEST PUSH2 0x1F71 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E0D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E24 JUMPI PUSH2 0x1DFA PUSH2 0x1E1F DUP4 PUSH2 0x26D9 JUMP JUMPDEST PUSH2 0x27B5 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E32 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E49 JUMPI PUSH2 0x1DFA PUSH2 0x1E44 DUP4 PUSH2 0x2B06 JUMP JUMPDEST PUSH2 0x2BA5 JUMP JUMPDEST PUSH1 0x5 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E57 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E6E JUMPI PUSH2 0x1DFA PUSH2 0x1E69 DUP4 PUSH2 0x26D9 JUMP JUMPDEST PUSH2 0x2DF9 JUMP JUMPDEST PUSH1 0x6 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E7C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E93 JUMPI PUSH2 0x1DFA PUSH2 0x1E8E DUP4 PUSH2 0x2B06 JUMP JUMPDEST PUSH2 0x3157 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1EA1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1EB8 JUMPI PUSH2 0x1DFA PUSH2 0x1EB3 DUP4 PUSH2 0x345B JUMP JUMPDEST PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1EC6 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1EDD JUMPI PUSH2 0x1DFA PUSH2 0x1ED8 DUP4 PUSH2 0x37A1 JUMP JUMPDEST PUSH2 0x37FF JUMP JUMPDEST PUSH1 0x8 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1EEB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F02 JUMPI PUSH2 0x1DFA PUSH2 0x1EFD DUP4 PUSH2 0x3A98 JUMP JUMPDEST PUSH2 0x3B2A JUMP JUMPDEST PUSH1 0x7 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1F10 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F27 JUMPI PUSH2 0x1DFA PUSH2 0x1F22 DUP4 PUSH2 0x3D79 JUMP JUMPDEST PUSH2 0x3E41 JUMP JUMPDEST PUSH1 0xA DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1F35 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F4C JUMPI PUSH2 0x1DFA PUSH2 0x1F47 DUP4 PUSH2 0x429E JUMP JUMPDEST PUSH2 0x43B8 JUMP JUMPDEST PUSH1 0x9 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1F5A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F71 JUMPI PUSH2 0x1F71 PUSH2 0x1F6C DUP4 PUSH2 0x4837 JUMP JUMPDEST PUSH2 0x48BC JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1CDA JUMP JUMPDEST POP SWAP7 SWAP2 SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1F8F PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9B DUP5 DUP5 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0xCD43FBFB PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCD43FBFB SWAP1 PUSH2 0x1FD7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2002 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2026 SWAP2 SWAP1 PUSH2 0x517E JUMP JUMPDEST SWAP2 POP POP DUP1 PUSH2 0x2046 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5412 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAF0968FC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2091 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x20C1 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x20BE SWAP2 DUP2 ADD SWAP1 PUSH2 0x4EC3 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x2297 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAABAECD6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2112 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2136 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7158DA7C 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x216F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2183 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21A7 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D69BC8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2218 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2289 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP POP PUSH2 0x22AB JUMP JUMPDEST POP SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP PUSH2 0x22AB SWAP2 POP POP JUMP JUMPDEST SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH2 0x22BA PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x22C7 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x22D4 DUP11 DUP11 PUSH2 0xA30 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xCC 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 0xA6C56907 DUP8 DUP8 DUP8 DUP16 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2326 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5C82 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x233E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2352 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2376 SWAP2 SWAP1 PUSH2 0x5130 JUMP JUMPDEST SWAP8 SWAP16 SWAP2 SWAP15 POP SWAP13 POP SWAP6 SWAP11 POP SWAP5 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x23A6 JUMPI POP PUSH2 0x23A6 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x23B4 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x23D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x23FB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x2428 JUMPI POP PUSH2 0x2428 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x2436 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2452 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x247D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x65 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 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 DUP1 ISZERO PUSH2 0x193C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x24FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP2 SWAP1 PUSH2 0x53E3 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2508 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x251A PUSH2 0x4C50 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2529 JUMPI INVALID JUMPDEST EQ PUSH2 0x2546 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5623 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2570 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x56B2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ ISZERO PUSH2 0x259B JUMPI DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2598 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x25BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x25F2 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x2600 DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x262B SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x4A3A AND JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD MLOAD EQ PUSH2 0x2650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x57B5 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE DUP1 DUP9 ADD DUP1 MLOAD DUP10 MLOAD DUP7 AND DUP6 MSTORE PUSH1 0xD3 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP8 DUP7 MSTORE SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP7 MLOAD SWAP2 MLOAD SWAP1 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x5D66689E2C864B4F21EFD3988C0CE5DC8A197981B68E81CE73660E92394FE25F SWAP1 PUSH2 0x26CB SWAP1 DUP6 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0x26E1 PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x3 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x26F0 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x2708 JUMPI POP PUSH1 0x5 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2706 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0x2724 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x59F1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A0D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x27BD PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x27CB DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x27DD DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x27F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x282D JUMPI POP DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x2849 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x555B JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x2328D73 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x11946B98 SWAP2 PUSH2 0x287C SWAP2 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28CC SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x28E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B63 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x292A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x293E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2962 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x2980 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x56CE JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x155BF273 PUSH1 0xE3 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0xAADF9398 SWAP5 PUSH2 0x29F3 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2A1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH1 0xA0 DUP11 ADD MLOAD SWAP2 MLOAD PUSH4 0xDD2C99F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xDD2C99F7 SWAP5 POP PUSH2 0x2A63 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A91 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2607E210004CEF0AD6B3E6AEDB778BFFB03C1586F8DCF55D49AFFFDE210D8BB1 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2B0E PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x4 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2B1D JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x2B35 JUMPI POP PUSH1 0x6 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2B33 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58D8 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B7B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5469 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5960 JUMP JUMPDEST PUSH2 0x2BAD PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x2BBB DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x2BCD DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x2BE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C63 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x2C81 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x951DD8D3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0x951DD8D3 SWAP5 PUSH2 0x2CF4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2D20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH1 0xA0 DUP11 ADD MLOAD SWAP2 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xFA93B2A5 SWAP5 POP PUSH2 0x2D64 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBD023C53D293DA163D185720D4274F4DDABC09D5304491A55ABB296CC811D9FA DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x2E01 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x2E0F DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x2E21 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x2E3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2E71 JUMPI POP DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x2E8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x542F JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0xF9839D89 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF9839D89 SWAP2 PUSH2 0x2EC0 SWAP2 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2ED8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F10 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x2F2C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5708 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F40 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xA30 JUMP JUMPDEST POP SWAP2 POP POP DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x2FDF JUMPI PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2F7E SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x4A3A AND JUMP JUMPDEST PUSH1 0x60 DUP6 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP7 SWAP1 SWAP7 SSTORE DUP5 MLOAD DUP5 AND DUP4 MSTORE PUSH1 0xD5 DUP2 MSTORE DUP6 DUP4 KECCAK256 SLOAD SWAP5 MLOAD SWAP1 SWAP4 AND DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD GT ISZERO PUSH2 0x2FDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5886 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x1F974AB PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0x7E5D2AC0 SWAP5 PUSH2 0x3052 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x306A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x307E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH1 0xA0 DUP11 ADD MLOAD SWAP2 MLOAD PUSH4 0xDD2C99F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xDD2C99F7 SWAP5 POP PUSH2 0x30C2 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBFAB88B861F171B7DB714F00E5966131253918D55DDBA816C3EB94657D102390 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x315F PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x316D DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x317F DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x319B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH2 0x31A3 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B7 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0xA30 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x31C9 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x4A8C JUMP JUMPDEST ISZERO PUSH2 0x327C JUMPI PUSH1 0x0 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x31E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x325C SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x327A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5943 JUMP JUMPDEST POP JUMPDEST DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x32D4 JUMPI PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x32B6 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x4ACA AND JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP10 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0x80 DUP10 ADD MLOAD SWAP4 MLOAD PUSH4 0x380BFDD PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0xE02FF740 SWAP5 PUSH2 0x3347 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x335F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 DUP1 DUP11 ADD MLOAD PUSH1 0xA0 DUP12 ADD MLOAD SWAP2 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xFA93B2A5 SWAP5 POP PUSH2 0x33B7 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFE86F7694B6C54A528ACBE27BE61DD4A85E9A89AEEF7F650A1B439045CCEE5A4 DUP9 PUSH1 0x20 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x344C SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3463 PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x1 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x3472 JUMPI INVALID JUMPDEST EQ PUSH2 0x348F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B0E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B47 JUMP JUMPDEST PUSH2 0x34C1 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x34CF DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x34E1 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x34FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x2328D73 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x11946B98 SWAP2 PUSH2 0x3530 SWAP2 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x355C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3580 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x359C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x35DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x35F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3616 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x3634 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5828 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0xEF682C1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0xEF682C1B SWAP5 PUSH2 0x36A7 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x36BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x36D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 DUP1 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD SWAP2 MLOAD PUSH4 0x51B0A41 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x51B0A410 SWAP3 PUSH2 0x370C SWAP3 SWAP2 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3726 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x373A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x4D7F96086C92B2F9A254AD21548B1C1F2D99502C7949508866349B96BB1A8D8A DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x37A9 PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x2 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x37B8 JUMPI INVALID JUMPDEST EQ PUSH2 0x37D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A46 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5696 JUMP JUMPDEST PUSH2 0x3807 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x3815 DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x3827 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x3843 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x3877 JUMPI POP DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x3893 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x565C JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x390D SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x392B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54A3 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x7B5C2835 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0x7B5C2835 SWAP5 PUSH2 0x399E SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x39CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 DUP1 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD SWAP2 MLOAD PUSH4 0x56D878F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x56D878F7 SWAP3 PUSH2 0x3A03 SWAP3 SWAP2 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3A1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A31 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDD96B18F26FD9950581B9FD821FA907FC318845FC4D220B825A7B19BFDD174E8 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x3AA0 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x8 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x3AAF JUMPI INVALID JUMPDEST EQ PUSH2 0x3ACC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B2A JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3AF6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5742 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP4 MSTORE DUP4 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP5 ADD MLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0xCA SLOAD PUSH1 0x40 MLOAD PUSH4 0x2328D73 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x11946B98 SWAP1 PUSH2 0x3B5F SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BAF SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x3BCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B80 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3BDA DUP6 PUSH2 0x204D JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x3C02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A29 JUMP JUMPDEST PUSH2 0x3C0E DUP4 DUP4 DUP7 DUP5 PUSH2 0x170C JUMP JUMPDEST PUSH2 0x3C2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x597D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C3E DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD PUSH2 0x797 JUMP JUMPDEST SWAP1 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 CALLER DUP10 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3C72 SWAP3 SWAP2 SWAP1 PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD DUP10 MLOAD PUSH1 0x40 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0xFA93B2A5 SWAP3 POP PUSH2 0x3CD9 SWAP2 DUP10 SWAP2 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3CF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3D07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x18FD144D7DBCBAA6F00FD47A84ADC7DC3CC64A326FFA2DC7691A25E3837DBA03 DUP9 DUP12 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x40 MLOAD PUSH2 0x3D68 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x539F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3D81 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x7 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x3D90 JUMPI INVALID JUMPDEST EQ PUSH2 0x3DAD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3DD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54DC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3E01 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x3E4F DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x3E61 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x3E7D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH2 0x3E85 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E99 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0xA30 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x3EAE DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x4A8C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EBF DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4A8C JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x3ECA JUMPI POP DUP1 JUMPDEST PUSH2 0x3EE6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x599A JUMP JUMPDEST DUP2 PUSH2 0x3F09 JUMPI DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3EFC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F1F JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x3F16 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP3 POP DUP1 ISZERO PUSH2 0x3FD3 JUMPI PUSH1 0x0 DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3F3A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 PUSH1 0xCD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x80 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3F7A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3F9F SWAP3 SWAP2 SWAP1 PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3FB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3FCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3FE4 DUP6 PUSH2 0x204D JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x400C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x56EB JUMP JUMPDEST PUSH2 0x4018 DUP4 DUP4 DUP7 DUP5 PUSH2 0x170C JUMP JUMPDEST PUSH2 0x4034 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x597D JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0xCD43FBFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCD43FBFB SWAP1 PUSH2 0x406B SWAP1 DUP13 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4082 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4096 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x40BA SWAP2 SWAP1 PUSH2 0x517E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 PUSH2 0x40DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5606 JUMP JUMPDEST PUSH1 0xD1 PUSH1 0x0 DUP14 PUSH1 0x0 ADD MLOAD 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 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP1 DUP3 ADD PUSH1 0x0 PUSH2 0x412A SWAP2 SWAP1 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4138 PUSH1 0x1 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4146 PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4154 PUSH1 0x3 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4162 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4170 PUSH1 0x5 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST POP POP DUP8 PUSH1 0x1 EQ ISZERO PUSH2 0x41BE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x41A4 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x4ACA AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 DUP15 ADD MLOAD SWAP1 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xFA93B2A5 SWAP2 PUSH2 0x41F6 SWAP2 DUP11 SWAP2 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4210 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4224 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 DUP13 PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 DUP14 PUSH1 0x40 ADD MLOAD SWAP1 POP DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP16 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x522CDA7DD0677EE4C9512EFD8AA92AF93DE64B4C2FE2F8BFE7A9234A655A9BF5 DUP5 DUP9 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4286 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x539F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x42A6 PUSH2 0x4D09 JUMP JUMPDEST PUSH1 0xA DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x42B5 JUMPI INVALID JUMPDEST EQ PUSH2 0x42D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x544C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x55CC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4326 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5486 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ PUSH2 0x434B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A62 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x4365 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x43C0 PUSH2 0x49AF JUMP JUMPDEST PUSH2 0x43D2 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x43EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH2 0x43F6 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4412 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x22B2 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 PUSH2 0x4437 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4458 PUSH4 0x5F5E100 PUSH2 0x834 DUP6 DUP10 PUSH1 0x60 ADD MLOAD PUSH2 0x1C2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x448B DUP8 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4475 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4ACA SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x44C5 JUMPI DUP2 PUSH2 0x44A7 DUP3 DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4475 JUMPI INVALID JUMPDEST LT ISZERO PUSH2 0x44C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5798 JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x44D2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 CALLER DUP9 PUSH1 0x60 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450B SWAP3 SWAP2 SWAP1 PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4539 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 DUP13 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SWAP1 DUP10 ADD MLOAD DUP1 MLOAD PUSH20 0x0 SWAP6 POP PUSH4 0xE02FF740 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x4591 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH1 0x0 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x45BB SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x45D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x45E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 DUP13 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP9 MLOAD DUP1 MLOAD PUSH20 0x0 SWAP6 POP PUSH4 0x7B5C2835 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x463C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x60 ADD MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x466A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x46EA DUP2 PUSH1 0xD6 PUSH1 0x0 DUP9 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x46B3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 SLOAD PUSH2 0x4ACA SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xD6 PUSH1 0x0 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x46FF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 DUP2 SWAP1 SSTORE POP PUSH1 0xCD 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 0xFA93B2A5 DUP7 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4760 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x478C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x47A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x47BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x93E59EC97820BB1ED9FB6DDC10619D1574E803B1F79B937414FEB8F6B7051F9D DUP7 DUP11 PUSH1 0x80 ADD MLOAD DUP7 DUP13 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x4827 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5CEC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x483F PUSH2 0x4D4A JUMP JUMPDEST PUSH1 0x9 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x484E JUMPI INVALID JUMPDEST EQ PUSH2 0x486B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x57EF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4895 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x59B7 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE SWAP1 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x48C4 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x48FD JUMPI PUSH2 0x48E1 DUP2 PUSH2 0x4B0C JUMP JUMPDEST PUSH2 0x48FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5BF0 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x9C23DA5 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x9C23DA50 SWAP2 PUSH2 0x4932 SWAP2 CALLER SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x530B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x494C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4960 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8750BDAF6E88201790EE2765FEA3AC73B514A52658C818723A30DE91029AD000 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x78B SWAP2 SWAP1 PUSH2 0x53E3 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AD6 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x4A1E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x193C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x53F6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5578 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT DUP1 ISZERO PUSH2 0x840 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x843 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4AB1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x840 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x4B8D JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x40 MLOAD PUSH4 0x51572A2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA2AE545A SWAP1 PUSH2 0x4B3D SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4B55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x843 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x4BB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP2 SWAP1 PUSH2 0x53E3 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE DUP1 PUSH1 0x0 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 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 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 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 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x19CD SWAP2 SWAP1 PUSH2 0x4D62 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 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 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xA1E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4D7C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4D68 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x843 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4D9B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4DB1 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x4DC4 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x5D0F JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x4DDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xB DUP2 LT PUSH2 0x843 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E14 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x840 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E30 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x840 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4E4D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4E58 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4E68 DUP2 PUSH2 0x5D36 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4E88 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4E93 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x4EA3 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4EB3 DUP2 PUSH2 0x5D36 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 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4EDB JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH2 0x4EE6 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x4EF7 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH2 0x4F08 DUP2 PUSH2 0x5D36 JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x4F28 DUP2 PUSH2 0x5D4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F48 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4F53 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4E68 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F75 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4F80 DUP2 PUSH2 0x5D36 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 0x4FA2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4FAD DUP2 PUSH2 0x5D36 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 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4FD4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4FEB JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x4FFC JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x500C JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5019 DUP5 DUP6 DUP6 MUL ADD PUSH2 0x5D0F JUMP JUMPDEST DUP4 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP3 DUP7 ADD DUP8 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x50E9 JUMPI DUP2 CALLDATALOAD DUP6 ADD PUSH2 0x100 DUP1 PUSH1 0x1F NOT DUP4 DUP16 SUB ADD SLT ISZERO PUSH2 0x5046 JUMPI DUP11 DUP12 REVERT JUMPDEST PUSH2 0x504F DUP2 PUSH2 0x5D0F JUMP JUMPDEST PUSH2 0x505B DUP15 DUP13 DUP6 ADD PUSH2 0x4DF4 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x506A DUP15 PUSH1 0x40 DUP6 ADD PUSH2 0x4D80 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE PUSH1 0x60 PUSH2 0x507C DUP16 DUP3 DUP7 ADD PUSH2 0x4D80 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x508E DUP16 PUSH1 0x80 DUP7 ADD PUSH2 0x4D80 JUMP JUMPDEST DUP2 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE DUP2 DUP4 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0x50C1 JUMPI DUP13 DUP14 REVERT JUMPDEST PUSH2 0x50CF DUP16 DUP14 DUP4 DUP8 ADD ADD PUSH2 0x4D8B JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP DUP7 MSTORE POP POP SWAP3 DUP8 ADD SWAP3 SWAP1 DUP8 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5025 JUMP JUMPDEST POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5109 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x840 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5125 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x840 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5144 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x514F DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5177 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5190 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x51DA 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 0x51B5 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x51DA JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x51F8 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5239 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x521D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x524A JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0xC0 DUP5 MSTORE PUSH2 0x5274 PUSH1 0xC0 DUP6 ADD DUP3 PUSH2 0x51A2 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP DUP5 DUP2 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x528D DUP2 DUP4 PUSH2 0x51A2 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP3 POP DUP6 DUP2 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x52A6 DUP2 DUP5 PUSH2 0x51A2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x60 DUP5 ADD MLOAD SWAP2 POP DUP5 DUP2 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x52C2 DUP2 DUP4 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD SWAP3 POP DUP6 DUP2 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x52DB DUP2 DUP5 PUSH2 0x51E5 JUMP JUMPDEST SWAP2 POP POP PUSH1 0xA0 DUP5 ADD MLOAD SWAP2 POP DUP5 DUP2 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x4EA DUP2 DUP4 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 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 0x532F SWAP1 DUP4 ADD DUP5 PUSH2 0x5214 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x840 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5214 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x219B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x10CC4D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x43323 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x82627 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413131 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41323 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x21991B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4133 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x20989B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2199 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x21989B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x43313 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413139 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433133 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x219999 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4131 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433233 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433235 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433131 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4137 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2099 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x86627 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433331 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433231 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433335 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x104C4D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x21999B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4331 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x10CCCD PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433135 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x219899 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209919 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4337 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x10CC8D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433337 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41313 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x195B881A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x219919 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209899 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433239 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x43333 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413233 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413135 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x827 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4139 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x86647 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x209B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413231 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433139 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413137 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433333 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x10CD PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4339 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x104D PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413133 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4135 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433137 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433237 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x867 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4333 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4335 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x840 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x525F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x5C4E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x525F JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x5C70 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x525F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x40 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 MSTORE PUSH2 0x5C95 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x525F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE POP PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5D2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 CHAINID 0xC1 JUMPDEST 0xC3 0xC7 DUP14 0xAC MSTORE8 JUMPDEST 0x2C 0xBB 0xC1 0xFB CALLDATACOPY CALLDATACOPY SMOD LOG2 0x49 SWAP13 0x21 0xE5 0xDD 0x26 0x23 0xE1 CHAINID DUP8 0x4C PUSH17 0x972E64736F6C634300060A003300000000 ",
+ "sourceMap": "2837:42321:1:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {
+ "contracts/libs/MarginVault.sol": {
+ "MarginVault": [
+ {
+ "length": 20,
+ "start": 10694
+ },
+ {
+ "length": 20,
+ "start": 11463
+ },
+ {
+ "length": 20,
+ "start": 12325
+ },
+ {
+ "length": 20,
+ "start": 13082
+ },
+ {
+ "length": 20,
+ "start": 13946
+ },
+ {
+ "length": 20,
+ "start": 14705
+ },
+ {
+ "length": 20,
+ "start": 17771
+ },
+ {
+ "length": 20,
+ "start": 17942
+ }
+ ]
+ }
+ },
+ "object": "608060405234801561001057600080fd5b50600436106102325760003560e01c8063b617f0c611610130578063ce3e39c0116100b8578063eaa33e141161007c578063eaa33e1414610479578063eab7775b1461049b578063ef4fcafa146104a3578063f2fde38b146104b6578063f77bc88b146104c957610232565b8063ce3e39c014610418578063d66dd43e14610420578063d99d13f514610433578063e69d849d14610453578063e723406c1461046657610232565b8063c220101d116100ff578063c220101d146103c4578063c644d3a2146103d7578063caa6d21a146103ea578063cab2e805146103fd578063cdee058a1461041057610232565b8063b617f0c614610378578063b6363cf21461038b578063bc463a3d1461039e578063beca75d7146103b157610232565b80636bd50cef116101be5780638da5cb5b116101825780638da5cb5b1461032b57806393e59dc1146103335780639daafbe81461033b5780639db938911461035d5780639f677ed91461036557610232565b80636bd50cef146102f35780636c0c3b991461030b57806370dc320c14610313578063715018a61461031b5780637dc0d1d01461032357610232565b8063485cc95511610205578063485cc95514610292578063558a7297146102a5578063565eea19146102b8578063573c473e146102d857806364681083146102eb57610232565b806314b93faf1461023757806316f0115b1461026057806329729d88146102755780632eb1c3a71461027d575b600080fd5b61024a610245366004614e73565b6104dc565b60405161025791906153c0565b60405180910390f35b6102686104f3565b60405161025791906152f7565b610268610502565b61029061028b366004614f63565b610511565b005b6102906102a0366004614e3b565b6105c6565b6102906102b3366004614f36565b6106de565b6102cb6102c6366004614f63565b610797565b6040516102579190615cd5565b6102906102e63660046150f8565b610849565b610290610900565b6102fb61093f565b6040516102579493929190615374565b61024a610964565b610268610974565b610290610983565b610268610a02565b610268610a11565b610268610a21565b61034e610349366004614f63565b610a30565b60405161025793929190615c5d565b610268610cc9565b6102906103733660046150f8565b610cd8565b610290610386366004614fc2565b610d84565b61024a610399366004614e3b565b610e16565b6102906103ac366004614e03565b610e44565b6102906103bf366004614e03565b610f29565b6102cb6103d2366004614f63565b61100e565b6102cb6103e5366004614e03565b6110cf565b6102cb6103f8366004614e03565b6110ea565b61029061040b3660046150f8565b611105565b61024a6111bc565b6102686111cc565b6102cb61042e366004614e03565b6111db565b610446610441366004614f63565b6111f6565b6040516102579190615c28565b610290610461366004614f63565b611457565b61024a610474366004614e03565b611500565b61048c610487366004614f8e565b61152f565b604051610257939291906153cb565b61024a611556565b6102906104b1366004614f63565b611566565b6102906104c4366004614e03565b6115d9565b61024a6104d7366004614e03565b611690565b60006104ea8585858561170c565b95945050505050565b60cd546001600160a01b031681565b60cf546001600160a01b031681565b6105196118a1565b6065546001600160a01b0390811691161461054f5760405162461bcd60e51b8152600401610546906158a3565b60405180910390fd5b6000811161056f5760405162461bcd60e51b81526004016105469061575f565b6001600160a01b038216600081815260d5602052604090819020839055517f6ff730ba70e34bd5ca823424bd15ab869cadc6bad079b527c71bde444ad6402b906105ba908490615cd5565b60405180910390a25050565b600054610100900460ff16806105df57506105df6118a5565b806105ed575060005460ff16155b6106095760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff16158015610634576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03831661065a5760405162461bcd60e51b81526004016105469061580c565b6001600160a01b0382166106805760405162461bcd60e51b815260040161054690615bd4565b610689826118ab565b610691611940565b60c980546001600160a01b0319166001600160a01b0385161790556106b46119d0565b60cf805460ff60b01b1916600160b01b17905580156106d9576000805461ff00191690555b505050565b33600090815260d2602090815260408083206001600160a01b038616845290915290205460ff16151581151514156107285760405162461bcd60e51b815260040161054690615af2565b33600081815260d2602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f1ae45540b0875932452da603b351ce2f1758258ba1345e79f8fc94f044cb07879061078b9085906153c0565b60405180910390a35050565b60cc54604051630478409360e41b8152600091610840916305f5e100916108349186916001600160a01b0316906347840930906107d8908a906004016152f7565b60206040518083038186803b1580156107f057600080fd5b505afa158015610804573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108289190615166565b9063ffffffff611c2b16565b9063ffffffff611c6516565b90505b92915050565b60ce546001600160a01b031633146108735760405162461bcd60e51b81526004016105469061553f565b60cf5460ff600160a01b90910416151581151514156108a45760405162461bcd60e51b815260040161054690615af2565b60cf805460ff60a01b1916600160a01b831515810291909117918290556040517f531c3d7229f510a8da00a0f5792686958cdd9c8a120c3c030a6053cd66b68556926108f59260ff910416906153c0565b60405180910390a150565b6109086118a1565b6065546001600160a01b039081169116146109355760405162461bcd60e51b8152600401610546906158a3565b61093d6119d0565b565b60ca5460cb5460cc5460cd546001600160a01b03938416949284169391821692911690565b60cf54600160b01b900460ff1681565b60c9546001600160a01b031681565b61098b6118a1565b6065546001600160a01b039081169116146109b85760405162461bcd60e51b8152600401610546906158a3565b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60cb546001600160a01b031681565b6065546001600160a01b03165b90565b60ca546001600160a01b031681565b610a38614bb9565b6001600160a01b038316600081815260d160209081526040808320868452825280832084845260d3835281842087855283528184205494845260d483528184208785528352818420548251825460e09581028201860190945260c081018481529596879693959094929391928692849290918491840182828015610ae557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ac7575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610b4757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b29575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610ba957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b8b575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610c0157602002820191906000526020600020905b815481526020019060010190808311610bed575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610c5957602002820191906000526020600020905b815481526020019060010190808311610c45575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610cb157602002820191906000526020600020905b815481526020019060010190808311610c9d575b50505050508152505092509250925092509250925092565b60ce546001600160a01b031681565b60cf546001600160a01b03163314610d025760405162461bcd60e51b81526004016105469061577c565b60cf5460ff600160a81b9091041615158115151415610d335760405162461bcd60e51b815260040161054690615af2565b60cf805460ff60a81b1916600160a81b831515810291909117918290556040517f4f1d0445688d95c99ca9fc036f551b205fd18ff26a4443b1979c16d1ba66b535926108f59260ff910416906153c0565b60975460ff16610da65760405162461bcd60e51b815260040161054690615b9d565b6097805460ff19169055610db8611ca7565b6000806000610dc684611cd1565b9250925092508215610e0357610ddc8282611f87565b6001600160a01b038216600090815260d46020908152604080832084845290915290204290555b50506097805460ff191660011790555050565b6001600160a01b03918216600090815260d26020908152604080832093909416825291909152205460ff1690565b610e4c6118a1565b6065546001600160a01b03908116911614610e795760405162461bcd60e51b8152600401610546906158a3565b6001600160a01b038116610e9f5760405162461bcd60e51b815260040161054690615679565b60ce546001600160a01b0382811691161415610ecd5760405162461bcd60e51b815260040161054690615af2565b60ce546040516001600160a01b038084169216907f1440312dbc326ddc21bfa95078324bf5aaf6899e8a27cba3057c60adfc84e40b90600090a360ce80546001600160a01b0319166001600160a01b0392909216919091179055565b610f316118a1565b6065546001600160a01b03908116911614610f5e5760405162461bcd60e51b8152600401610546906158a3565b6001600160a01b038116610f845760405162461bcd60e51b8152600401610546906155af565b60cf546001600160a01b0382811691161415610fb25760405162461bcd60e51b815260040161054690615af2565b60cf546040516001600160a01b038084169216907f44f3e9e7b454118e9fcb2e3026396f57ca21d7bd7dcabd31d7f986806422f4df90600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611018614bb9565b60006110248585610a30565b5060cc5460405163cd43fbfb60e01b815292945090925060009182916001600160a01b03169063cd43fbfb906110609087908790600401615c3b565b604080518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af919061517e565b91509150806110c5576000945050505050610843565b5095945050505050565b6001600160a01b0316600090815260d5602052604090205490565b6001600160a01b0316600090815260d0602052604090205490565b61110d6118a1565b6065546001600160a01b0390811691161461113a5760405162461bcd60e51b8152600401610546906158a3565b60cf5460ff600160b01b909104161515811515141561116b5760405162461bcd60e51b815260040161054690615af2565b60cf805460ff60b01b1916600160b01b831515810291909117918290556040517f26d614575a4c104c181c87003d4bb00cc7ade00d5b47bf8775171c12a376b255926108f59260ff910416906153c0565b60cf54600160a01b900460ff1681565b60cc546001600160a01b031681565b6001600160a01b0316600090815260d6602052604090205490565b6111fe614bb9565b6001600160a01b038316600090815260d1602090815260408083208584528252918290208251815460e09381028201840190945260c08101848152909391928492849184018282801561127a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161125c575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156112dc57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112be575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561133e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611320575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561139657602002820191906000526020600020905b815481526020019060010190808311611382575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156113ee57602002820191906000526020600020905b8154815260200190600101908083116113da575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561144657602002820191906000526020600020905b815481526020019060010190808311611432575b505050505081525050905092915050565b60cd5460405163dd2c99f760e01b81526001600160a01b039091169063dd2c99f79061148b90859033908690600401615350565b600060405180830381600087803b1580156114a557600080fd5b505af11580156114b9573d6000803e3d6000fd5b50505050816001600160a01b0316336001600160a01b03167f4dfff917e1fbb261a082e98cc7d43029621f6a6eb05ff3fef1510d5f1eb4857c8360405161078b9190615cd5565b60008060008060006115118661204d565b93509350935093506115258484848461170c565b9695505050505050565b6000806000806000806115438989896122b2565b919c909b50909950975050505050505050565b60cf54600160a81b900460ff1681565b60975460ff166115885760405162461bcd60e51b815260040161054690615b9d565b6097805460ff1916905561159a611ca7565b6115a48282611f87565b6001600160a01b03909116600090815260d460209081526040808320938352929052204290556097805460ff19166001179055565b6115e16118a1565b6065546001600160a01b0390811691161461160e5760405162461bcd60e51b8152600401610546906158a3565b6001600160a01b0381166116345760405162461bcd60e51b8152600401610546906154f9565b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190615166565b42101592915050565b60cb54604051635fdc714960e01b81526000916001600160a01b031690635fdc71499061173f9088908690600401615337565b60206040518083038186803b15801561175757600080fd5b505afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190615114565b8015611818575060cb54604051635fdc714960e01b81526001600160a01b0390911690635fdc7149906117c89087908690600401615337565b60206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190615114565b80156104ea575060cb54604051635fdc714960e01b81526001600160a01b0390911690635fdc7149906118519086908690600401615337565b60206040518083038186803b15801561186957600080fd5b505afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ea9190615114565b3390565b303b1590565b600054610100900460ff16806118c457506118c46118a5565b806118d2575060005460ff16155b6118ee5760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff16158015611919576000805460ff1961ff0019909116610100171660011790555b61192161238d565b61192a8261240f565b801561193c576000805461ff00191690555b5050565b600054610100900460ff168061195957506119596118a5565b80611967575060005460ff16155b6119835760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff161580156119ae576000805460ff1961ff0019909116610100171660011790555b6097805460ff1916600117905580156119cd576000805461ff00191690555b50565b60c960009054906101000a90046001600160a01b03166001600160a01b031663d01f63f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1e57600080fd5b505afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a569190614e1f565b60ca80546001600160a01b0319166001600160a01b0392831617905560c9546040805163419d8fe760e11b81529051919092169163833b1fce916004808301926020929190829003018186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614e1f565b60cb80546001600160a01b0319166001600160a01b0392831617905560c9546040805163cf28493f60e01b81529051919092169163cf28493f916004808301926020929190829003018186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190614e1f565b60cc80546001600160a01b0319166001600160a01b0392831617905560c95460408051633aa431a160e11b8152905191909216916375486342916004808301926020929190829003018186803b158015611bd157600080fd5b505afa158015611be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c099190614e1f565b60cd80546001600160a01b0319166001600160a01b0392909216919091179055565b600082611c3a57506000610843565b82820282848281611c4757fe5b04146108405760405162461bcd60e51b815260040161054690615845565b600061084083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124db565b60cf54600160a81b900460ff161561093d5760405162461bcd60e51b815260040161054690615c0c565b60008080808080805b8751811015611f7b57611ceb614bef565b888281518110611cf757fe5b60209081029190910101518051909150600781600a811115611d1557fe5b14158015611d2f5750600881600a811115611d2c57fe5b14155b8015611d475750600a81600a811115611d4457fe5b14155b8015611d5f5750600981600a811115611d5c57fe5b14155b15611dd5578315611dc25781602001516001600160a01b0316866001600160a01b031614611d9f5760405162461bcd60e51b8152600401610546906157d2565b81608001518514611dc25760405162461bcd60e51b8152600401610546906155e9565b6001935081608001519450816020015195505b600081600a811115611de357fe5b1415611dff57611dfa611df583612512565b6125ea565b611f71565b600381600a811115611e0d57fe5b1415611e2457611dfa611e1f836126d9565b6127b5565b600481600a811115611e3257fe5b1415611e4957611dfa611e4483612b06565b612ba5565b600581600a811115611e5757fe5b1415611e6e57611dfa611e69836126d9565b612df9565b600681600a811115611e7c57fe5b1415611e9357611dfa611e8e83612b06565b613157565b600181600a811115611ea157fe5b1415611eb857611dfa611eb38361345b565b6134b9565b600281600a811115611ec657fe5b1415611edd57611dfa611ed8836137a1565b6137ff565b600881600a811115611eeb57fe5b1415611f0257611dfa611efd83613a98565b613b2a565b600781600a811115611f1057fe5b1415611f2757611dfa611f2283613d79565b613e41565b600a81600a811115611f3557fe5b1415611f4c57611dfa611f478361429e565b6143b8565b600981600a811115611f5a57fe5b1415611f7157611f71611f6c83614837565b6148bc565b5050600101611cda565b50969195509350915050565b611f8f614bb9565b6000611f9b8484610a30565b5060cc5460405163cd43fbfb60e01b81529294509092506000916001600160a01b039091169063cd43fbfb90611fd79086908690600401615c3b565b604080518083038186803b158015611fee57600080fd5b505afa158015612002573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612026919061517e565b915050806120465760405162461bcd60e51b815260040161054690615412565b5050505050565b6000806000806000859050806001600160a01b031663af0968fc6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561209157600080fd5b505afa9250505080156120c1575060408051601f3d908101601f191682019092526120be91810190614ec3565b60015b61229757806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b1580156120fe57600080fd5b505afa158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190614e1f565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561216f57600080fd5b505afa158015612183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a79190614e1f565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b1580156121e057600080fd5b505afa1580156121f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122189190614e1f565b836001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561225157600080fd5b505afa158015612265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122899190615166565b9450945094509450506122ab565b5093985091965094509092506122ab915050565b9193509193565b6122ba614bb9565b60008060006122c7614bb9565b6000806122d48a8a610a30565b925092509250600080600060cc60009054906101000a90046001600160a01b03166001600160a01b031663a6c569078787878f6040518563ffffffff1660e01b81526004016123269493929190615c82565b60606040518083038186803b15801561233e57600080fd5b505afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123769190615130565b979f919e509c50959a509498505050505050505050565b600054610100900460ff16806123a657506123a66118a5565b806123b4575060005460ff16155b6123d05760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff161580156123fb576000805460ff1961ff0019909116610100171660011790555b80156119cd576000805461ff001916905550565b600054610100900460ff168061242857506124286118a5565b80612436575060005460ff16155b6124525760405162461bcd60e51b8152600401610546906158f5565b600054610100900460ff1615801561247d576000805460ff1961ff0019909116610100171660011790555b606580546001600160a01b0319166001600160a01b0384169081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3801561193c576000805461ff00191690555050565b600081836124fc5760405162461bcd60e51b815260040161054691906153e3565b50600083858161250857fe5b0495945050505050565b61251a614c50565b60008251600a81111561252957fe5b146125465760405162461bcd60e51b815260040161054690615623565b60208201516001600160a01b03166125705760405162461bcd60e51b8152600401610546906156b2565b60008260e00151516020141561259b578260e001518060200190518101906125989190615166565b90505b600281106125bb5760405162461bcd60e51b8152600401610546906154c0565b604080516060810182526020808601516001600160a01b03168252608090950151948101949094528301525090565b6125f26149af565b8051339061260082826149d9565b82516001600160a01b0316600090815260d0602052604081205461262b90600163ffffffff614a3a16565b9050808460200151146126505760405162461bcd60e51b8152600401610546906157b5565b83516001600160a01b03908116600090815260d060209081526040808320859055808801805189518616855260d384528285208786529093529281902091909155905186519151909291909116907f5d66689e2c864b4f21efd3988c0ce5dc8a197981b68e81ce73660e92394fe25f906126cb908590615cd5565b60405180910390a350505050565b6126e1614c7a565b60038251600a8111156126f057fe5b1480612708575060058251600a81111561270657fe5b145b6127245760405162461bcd60e51b8152600401610546906159f1565b60208201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615a0d565b6040518060c0016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b0316815260200183606001516001600160a01b031681526020018360c0015181526020018360a001518152509050919050565b6127bd6149af565b805133906127cb82826149d9565b6127dd83600001518460200151614a5f565b6127f95760405162461bcd60e51b815260040161054690615725565b60408301516001600160a01b031633148061282d575082600001516001600160a01b031683604001516001600160a01b0316145b6128495760405162461bcd60e51b81526004016105469061555b565b60ca5460608401516040516302328d7360e31b81526001600160a01b03909216916311946b989161287c916004016152f7565b60206040518083038186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190615114565b6128e85760405162461bcd60e51b815260040161054690615b63565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561292a57600080fd5b505afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190615166565b42106129805760405162461bcd60e51b8152600401610546906156ce565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a08701516080880151935163155bf27360e31b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463aadf9398946129f39490939092909190600401615cb1565b60006040518083038186803b158015612a0b57600080fd5b505af4158015612a1f573d6000803e3d6000fd5b505060cd54606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f79450612a6393909190600401615350565b600060405180830381600087803b158015612a7d57600080fd5b505af1158015612a91573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167f2607e210004cef0ad6b3e6aedb778bffb03c1586f8dcf55d49afffde210d8bb187602001518860a00151604051612af8929190615cde565b60405180910390a450505050565b612b0e614c7a565b60048251600a811115612b1d57fe5b1480612b35575060068251600a811115612b3357fe5b145b612b515760405162461bcd60e51b8152600401610546906158d8565b60208201516001600160a01b0316612b7b5760405162461bcd60e51b815260040161054690615469565b60408201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615960565b612bad6149af565b80513390612bbb82826149d9565b612bcd83600001518460200151614a5f565b612be95760405162461bcd60e51b815260040161054690615725565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c2b57600080fd5b505afa158015612c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c639190615166565b4210612c815760405162461bcd60e51b815260040161054690615a7f565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a08701516080880151935163951dd8d360e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463951dd8d394612cf49490939092909190600401615cb1565b60006040518083038186803b158015612d0c57600080fd5b505af4158015612d20573d6000803e3d6000fd5b505060cd54606087015160408089015160a08a0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a59450612d6493909190600401615350565b600060405180830381600087803b158015612d7e57600080fd5b505af1158015612d92573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167fbd023c53d293da163d185720d4274f4ddabc09d5304491a55abb296cc811d9fa87602001518860a00151604051612af8929190615cde565b612e016149af565b80513390612e0f82826149d9565b612e2183600001518460200151614a5f565b612e3d5760405162461bcd60e51b815260040161054690615725565b60408301516001600160a01b0316331480612e71575082600001516001600160a01b031683604001516001600160a01b0316145b612e8d5760405162461bcd60e51b81526004016105469061542f565b60ca54606084015160405163f9839d8960e01b81526001600160a01b039092169163f9839d8991612ec0916004016152f7565b60206040518083038186803b158015612ed857600080fd5b505afa158015612eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f109190615114565b612f2c5760405162461bcd60e51b815260040161054690615708565b6000612f4084600001518560200151610a30565b509150508060011415612fdf5760a084015160608501516001600160a01b0316600090815260d66020526040902054612f7e9163ffffffff614a3a16565b6060850180516001600160a01b03908116600090815260d6602081815260408084209690965584518416835260d58152858320549451909316825290915291909120541115612fdf5760405162461bcd60e51b815260040161054690615886565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a0870151608088015193516301f974ab60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__94637e5d2ac0946130529490939092909190600401615cb1565b60006040518083038186803b15801561306a57600080fd5b505af415801561307e573d6000803e3d6000fd5b505060cd54606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f794506130c293909190600401615350565b600060405180830381600087803b1580156130dc57600080fd5b505af11580156130f0573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167fbfab88b861f171b7db714f00e5966131253918d55ddba816c3eb94657d10239087602001518860a00151604051612af8929190615cde565b61315f6149af565b8051339061316d82826149d9565b61317f83600001518460200151614a5f565b61319b5760405162461bcd60e51b815260040161054690615725565b6131a3614bb9565b60006131b785600001518660200151610a30565b50915091506131c98260000151614a8c565b1561327c57600082600001516000815181106131e157fe5b60200260200101519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561322457600080fd5b505afa158015613238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325c9190615166565b421061327a5760405162461bcd60e51b815260040161054690615943565b505b80600114156132d45760a085015160608601516001600160a01b0316600090815260d660205260409020546132b69163ffffffff614aca16565b60608601516001600160a01b0316600090815260d660205260409020555b84516001600160a01b0316600090815260d16020908152604080832082890151845290915290819020606087015160a088015160808901519351630380bfdd60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463e02ff740946133479490939092909190600401615cb1565b60006040518083038186803b15801561335f57600080fd5b505af4158015613373573d6000803e3d6000fd5b505060cd5460608801516040808a015160a08b0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a594506133b793909190600401615350565b600060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b5050505084604001516001600160a01b031685600001516001600160a01b031686606001516001600160a01b03167ffe86f7694b6c54a528acbe27be61dd4a85e9a89aeef7f650a1b439045ccee5a488602001518960a0015160405161344c929190615cde565b60405180910390a45050505050565b613463614c7a565b60018251600a81111561347257fe5b1461348f5760405162461bcd60e51b815260040161054690615b0e565b60208201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615b47565b6134c16149af565b805133906134cf82826149d9565b6134e183600001518460200151614a5f565b6134fd5760405162461bcd60e51b815260040161054690615725565b60ca5460608401516040516302328d7360e31b81526001600160a01b03909216916311946b9891613530916004016152f7565b60206040518083038186803b15801561354857600080fd5b505afa15801561355c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135809190615114565b61359c5760405162461bcd60e51b81526004016105469061563f565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135de57600080fd5b505afa1580156135f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136169190615166565b42106136345760405162461bcd60e51b815260040161054690615828565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a08701516080880151935163ef682c1b60e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9463ef682c1b946136a79490939092909190600401615cb1565b60006040518083038186803b1580156136bf57600080fd5b505af41580156136d3573d6000803e3d6000fd5b50505060408086015160a0870151915163051b0a4160e41b81526001600160a01b03851693506351b0a4109261370c9291600401615337565b600060405180830381600087803b15801561372657600080fd5b505af115801561373a573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167f4d7f96086c92b2f9a254ad21548b1c1f2d99502c7949508866349b96bb1a8d8a87602001518860a00151604051612af8929190615cde565b6137a9614c7a565b60028251600a8111156137b857fe5b146137d55760405162461bcd60e51b815260040161054690615a46565b60208201516001600160a01b031661274e5760405162461bcd60e51b815260040161054690615696565b6138076149af565b8051339061381582826149d9565b61382783600001518460200151614a5f565b6138435760405162461bcd60e51b815260040161054690615725565b60408301516001600160a01b0316331480613877575082600001516001600160a01b031683604001516001600160a01b0316145b6138935760405162461bcd60e51b81526004016105469061565c565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d557600080fd5b505afa1580156138e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390d9190615166565b421061392b5760405162461bcd60e51b8152600401610546906154a3565b83516001600160a01b0316600090815260d16020908152604080832082880151845290915290819020606086015160a087015160808801519351637b5c283560e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__94637b5c28359461399e9490939092909190600401615cb1565b60006040518083038186803b1580156139b657600080fd5b505af41580156139ca573d6000803e3d6000fd5b50505060408086015160a087015191516356d878f760e01b81526001600160a01b03851693506356d878f792613a039291600401615337565b600060405180830381600087803b158015613a1d57600080fd5b505af1158015613a31573d6000803e3d6000fd5b5050505083604001516001600160a01b031684600001516001600160a01b031685606001516001600160a01b03167fdd96b18f26fd9950581b9fd821fa907fc318845fc4d220b825a7b19bfdd174e887602001518860a00151604051612af8929190615cde565b613aa0614ccb565b60088251600a811115613aaf57fe5b14613acc5760405162461bcd60e51b815260040161054690615b2a565b60408201516001600160a01b0316613af65760405162461bcd60e51b815260040161054690615742565b506040805160608082018352838301516001600160a01b0390811683529084015116602082015260a0909201519082015290565b602081015160ca546040516302328d7360e31b81526001600160a01b03909116906311946b9890613b5f9084906004016152f7565b60206040518083038186803b158015613b7757600080fd5b505afa158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615114565b613bcb5760405162461bcd60e51b815260040161054690615b80565b600080600080613bda8561204d565b935093509350935080421015613c025760405162461bcd60e51b815260040161054690615a29565b613c0e8383868461170c565b613c2a5760405162461bcd60e51b81526004016105469061597d565b6000613c3e87602001518860400151610797565b9050856001600160a01b03166356d878f73389604001516040518363ffffffff1660e01b8152600401613c72929190615337565b600060405180830381600087803b158015613c8c57600080fd5b505af1158015613ca0573d6000803e3d6000fd5b505060cd54895160405163fa93b2a560e01b81526001600160a01b03909216935063fa93b2a59250613cd9918991908690600401615350565b600060405180830381600087803b158015613cf357600080fd5b505af1158015613d07573d6000803e3d6000fd5b5050505086600001516001600160a01b0316336001600160a01b031688602001516001600160a01b03167f18fd144d7dbcbaa6f00fd47a84adc7dc3cc64a326ffa2dc7691a25e3837dba03888b6040015186604051613d689392919061539f565b60405180910390a450505050505050565b613d81614ccb565b60078251600a811115613d9057fe5b14613dad5760405162461bcd60e51b8152600401610546906159d4565b60208201516001600160a01b0316613dd75760405162461bcd60e51b8152600401610546906154dc565b60408201516001600160a01b0316613e015760405162461bcd60e51b815260040161054690615a9c565b604051806060016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b03168152509050919050565b80513390613e4f82826149d9565b613e6183600001518460200151614a5f565b613e7d5760405162461bcd60e51b815260040161054690615725565b613e85614bb9565b6000613e9985600001518660200151610a30565b5091509150600080613eae8460000151614a8c565b90506000613ebf8560200151614a8c565b90508180613eca5750805b613ee65760405162461bcd60e51b81526004016105469061599a565b81613f09578460200151600081518110613efc57fe5b6020026020010151613f1f565b84518051600090613f1657fe5b60200260200101515b92508015613fd35760008560200151600081518110613f3a57fe5b60200260200101519050806001600160a01b03166356d878f760cd60009054906101000a90046001600160a01b03168860800151600081518110613f7a57fe5b60200260200101516040518363ffffffff1660e01b8152600401613f9f929190615337565b600060405180830381600087803b158015613fb957600080fd5b505af1158015613fcd573d6000803e3d6000fd5b50505050505b5050600080600080613fe48561204d565b93509350935093508042101561400c5760405162461bcd60e51b8152600401610546906156eb565b6140188383868461170c565b6140345760405162461bcd60e51b81526004016105469061597d565b60cc5460405163cd43fbfb60e01b815260009182916001600160a01b039091169063cd43fbfb9061406b908c908c90600401615c3b565b604080518083038186803b15801561408257600080fd5b505afa158015614096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ba919061517e565b91509150806140db5760405162461bcd60e51b815260040161054690615606565b60d160008d600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008d6020015181526020019081526020016000206000808201600061412a9190614ceb565b614138600183016000614ceb565b614146600283016000614ceb565b614154600383016000614ceb565b614162600483016000614ceb565b614170600583016000614ceb565b505087600114156141be576001600160a01b038616600090815260d660205260409020546141a4908363ffffffff614aca16565b6001600160a01b038716600090815260d660205260409020555b60cd546040808e0151905163fa93b2a560e01b81526001600160a01b039092169163fa93b2a5916141f6918a91908790600401615350565b600060405180830381600087803b15801561421057600080fd5b505af1158015614224573d6000803e3d6000fd5b5050505060008c60200151905060008d60400151905089896001600160a01b03168f600001516001600160a01b03167f522cda7dd0677ee4c9512efd8aa92af93de64b4c2fe2f8bfe7a9234a655a9bf58488876040516142869392919061539f565b60405180910390a45050505050505050505050505050565b6142a6614d09565b600a8251600a8111156142b557fe5b146142d25760405162461bcd60e51b81526004016105469061544c565b60208201516001600160a01b03166142fc5760405162461bcd60e51b8152600401610546906155cc565b60408201516001600160a01b03166143265760405162461bcd60e51b815260040161054690615486565b8160e001515160201461434b5760405162461bcd60e51b815260040161054690615a62565b60008260e001518060200190518101906143659190615166565b90506040518060a0016040528084602001516001600160a01b0316815260200184604001516001600160a01b03168152602001846080015181526020018460a00151815260200182815250915050919050565b6143c06149af565b6143d281600001518260400151614a5f565b6143ee5760405162461bcd60e51b815260040161054690615725565b6143f6614bb9565b60008060006144128560000151866040015187608001516122b2565b9350935093509350826144375760405162461bcd60e51b815260040161054690615ab9565b60006144586305f5e100610834858960600151611c2b90919063ffffffff16565b9050600061448b8760600151876060015160008151811061447557fe5b6020026020010151614aca90919063ffffffff16565b11156144c557816144a7828760a0015160008151811061447557fe5b10156144c55760405162461bcd60e51b815260040161054690615798565b845180516000906144d257fe5b60200260200101516001600160a01b03166356d878f73388606001516040518363ffffffff1660e01b815260040161450b929190615337565b600060405180830381600087803b15801561452557600080fd5b505af1158015614539573d6000803e3d6000fd5b505087516001600160a01b0316600090815260d160209081526040808320818c0151845290915280822090890151805173__$f483377b159a5ea0e3632e216689e4fd4e$__955063e02ff74094509192909161459157fe5b60200260200101518460006040518563ffffffff1660e01b81526004016145bb9493929190615cb1565b60006040518083038186803b1580156145d357600080fd5b505af41580156145e7573d6000803e3d6000fd5b505087516001600160a01b0316600090815260d160209081526040808320818c0151845290915281208851805173__$f483377b159a5ea0e3632e216689e4fd4e$__9550637b5c283594509192909161463c57fe5b6020026020010151896060015160006040518563ffffffff1660e01b815260040161466a9493929190615cb1565b60006040518083038186803b15801561468257600080fd5b505af4158015614696573d6000803e3d6000fd5b505050506146ea8160d6600088604001516000815181106146b357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054614aca90919063ffffffff16565b60d6600087604001516000815181106146ff57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060cd60009054906101000a90046001600160a01b03166001600160a01b031663fa93b2a5866040015160008151811061476057fe5b60200260200101518860200151846040518463ffffffff1660e01b815260040161478c93929190615350565b600060405180830381600087803b1580156147a657600080fd5b505af11580156147ba573d6000803e3d6000fd5b5050505085600001516001600160a01b031686602001516001600160a01b0316336001600160a01b03167f93e59ec97820bb1ed9fb6ddc10619d1574e803b1f79b937414feb8f6b7051f9d868a60800151868c606001518d60400151604051614827959493929190615cec565b60405180910390a4505050505050565b61483f614d4a565b60098251600a81111561484e57fe5b1461486b5760405162461bcd60e51b8152600401610546906157ef565b60408201516001600160a01b03166148955760405162461bcd60e51b8152600401610546906159b7565b50604080518082018252908201516001600160a01b0316815260e090910151602082015290565b6148c46149af565b805160cf54600160b01b900460ff16156148fd576148e181614b0c565b6148fd5760405162461bcd60e51b815260040161054690615bf0565b815160208301516040516309c23da560e41b81526001600160a01b0390921691639c23da50916149329133919060040161530b565b600060405180830381600087803b15801561494c57600080fd5b505af1158015614960573d6000803e3d6000fd5b5050505081600001516001600160a01b0316336001600160a01b03167f8750bdaf6e88201790ee2765fea3ac73b514a52658c818723a30de91029ad000846020015160405161078b91906153e3565b60cf54600160a01b900460ff161561093d5760405162461bcd60e51b815260040161054690615ad6565b806001600160a01b0316826001600160a01b03161480614a1e57506001600160a01b03808216600090815260d2602090815260408083209386168352929052205460ff165b61193c5760405162461bcd60e51b8152600401610546906153f6565b6000828201838110156108405760405162461bcd60e51b815260040161054690615578565b600080821180156108405750506001600160a01b0391909116600090815260d06020526040902054101590565b6000808251118015610843575060006001600160a01b031682600081518110614ab157fe5b60200260200101516001600160a01b0316141592915050565b600061084083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b8d565b60ca546040516351572a2d60e11b81526000916001600160a01b03169063a2ae545a90614b3d9085906004016152f7565b60206040518083038186803b158015614b5557600080fd5b505afa158015614b69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190615114565b60008184841115614bb15760405162461bcd60e51b815260040161054691906153e3565b505050900390565b6040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101008101909152806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6040518060c0016040528060006001600160a01b031681526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b50805460008255906000526020600020908101906119cd9190614d62565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b60408051808201909152600081526060602082015290565b610a1e91905b80821115614d7c5760008155600101614d68565b5090565b803561084381615d36565b600082601f830112614d9b578081fd5b813567ffffffffffffffff811115614db1578182fd5b614dc4601f8201601f1916602001615d0f565b9150808252836020828501011115614ddb57600080fd5b8060208401602084013760009082016020015292915050565b8035600b811061084357600080fd5b600060208284031215614e14578081fd5b813561084081615d36565b600060208284031215614e30578081fd5b815161084081615d36565b60008060408385031215614e4d578081fd5b8235614e5881615d36565b91506020830135614e6881615d36565b809150509250929050565b60008060008060808587031215614e88578182fd5b8435614e9381615d36565b93506020850135614ea381615d36565b92506040850135614eb381615d36565b9396929550929360600135925050565b60008060008060008060c08789031215614edb578182fd5b8651614ee681615d36565b6020880151909650614ef781615d36565b6040880151909550614f0881615d36565b80945050606087015192506080870151915060a0870151614f2881615d4b565b809150509295509295509295565b60008060408385031215614f48578182fd5b8235614f5381615d36565b91506020830135614e6881615d4b565b60008060408385031215614f75578182fd5b8235614f8081615d36565b946020939093013593505050565b600080600060608486031215614fa2578283fd5b8335614fad81615d36565b95602085013595506040909401359392505050565b60006020808385031215614fd4578182fd5b823567ffffffffffffffff80821115614feb578384fd5b81850186601f820112614ffc578485fd5b803592508183111561500c578485fd5b6150198485850201615d0f565b83815284810190828601875b868110156150e9578135850161010080601f19838f03011215615046578a8bfd5b61504f81615d0f565b61505b8e8c8501614df4565b815261506a8e60408501614d80565b8b820152606061507c8f828601614d80565b604083015261508e8f60808601614d80565b818301525060a0830135608082015260c083013560a082015260e083013560c082015281830135898111156150c1578c8dfd5b6150cf8f8d83870101614d8b565b60e083015250865250509287019290870190600101615025565b50909998505050505050505050565b600060208284031215615109578081fd5b813561084081615d4b565b600060208284031215615125578081fd5b815161084081615d4b565b600080600060608486031215615144578081fd5b835161514f81615d4b565b602085015160409095015190969495509392505050565b600060208284031215615177578081fd5b5051919050565b60008060408385031215615190578182fd5b825191506020830151614e6881615d4b565b6000815180845260208085019450808401835b838110156151da5781516001600160a01b0316875295820195908201906001016151b5565b509495945050505050565b6000815180845260208085019450808401835b838110156151da578151875295820195908201906001016151f8565b60008151808452815b818110156152395760208185018101518683018201520161521d565b8181111561524a5782602083870101525b50601f01601f19169290920160200192915050565b6000815160c0845261527460c08501826151a2565b60208401519150848103602086015261528d81836151a2565b6040850151925085810360408701526152a681846151a2565b9150506060840151915084810360608601526152c281836151e5565b6080850151925085810360808701526152db81846151e5565b91505060a0840151915084810360a08601526104ea81836151e5565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009061532f90830184615214565b949350505050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082526108406020830184615214565b602080825260029082015261219b60f11b604082015260600190565b60208082526003908201526210cc4d60ea1b604082015260600190565b60208082526003908201526204332360ec1b604082015260600190565b60208082526003908201526208262760eb1b604082015260600190565b60208082526003908201526241313160e81b604082015260600190565b60208082526003908201526204132360ec1b604082015260600190565b60208082526003908201526221991b60e91b604082015260600190565b602080825260029082015261413360f01b604082015260600190565b60208082526003908201526220989b60e91b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260029082015261219960f11b604082015260600190565b60208082526003908201526221989b60e91b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526003908201526204331360ec1b604082015260600190565b60208082526003908201526241313960e81b604082015260600190565b60208082526003908201526243313360e81b604082015260600190565b60208082526003908201526221999960e91b604082015260600190565b602080825260029082015261413160f01b604082015260600190565b60208082526003908201526243323360e81b604082015260600190565b60208082526003908201526243323560e81b604082015260600190565b60208082526003908201526243313160e81b604082015260600190565b602080825260029082015261413760f01b604082015260600190565b602080825260029082015261209960f11b604082015260600190565b60208082526003908201526208662760eb1b604082015260600190565b60208082526003908201526243333160e81b604082015260600190565b60208082526003908201526243323160e81b604082015260600190565b60208082526003908201526243333560e81b604082015260600190565b602080825260039082015262104c4d60ea1b604082015260600190565b60208082526003908201526221999b60e91b604082015260600190565b602080825260029082015261433160f01b604082015260600190565b60208082526003908201526210cccd60ea1b604082015260600190565b60208082526003908201526243313560e81b604082015260600190565b60208082526003908201526221989960e91b604082015260600190565b60208082526003908201526220991960e91b604082015260600190565b602080825260029082015261433760f01b604082015260600190565b60208082526003908201526210cc8d60ea1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526003908201526243333760e81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526003908201526204131360ec1b604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526003908201526221991960e91b604082015260600190565b60208082526003908201526220989960e91b604082015260600190565b60208082526003908201526243323960e81b604082015260600190565b60208082526003908201526204333360ec1b604082015260600190565b60208082526003908201526241323360e81b604082015260600190565b60208082526003908201526241313560e81b604082015260600190565b602080825260029082015261082760f31b604082015260600190565b602080825260029082015261413960f01b604082015260600190565b60208082526003908201526208664760eb1b604082015260600190565b602080825260029082015261209b60f11b604082015260600190565b60208082526003908201526241323160e81b604082015260600190565b60208082526003908201526243313960e81b604082015260600190565b60208082526003908201526241313760e81b604082015260600190565b60208082526003908201526243333360e81b604082015260600190565b60208082526002908201526110cd60f21b604082015260600190565b602080825260029082015261433960f01b604082015260600190565b602080825260029082015261104d60f21b604082015260600190565b60208082526003908201526241313360e81b604082015260600190565b602080825260029082015261413560f01b604082015260600190565b60208082526003908201526243313760e81b604082015260600190565b60208082526003908201526243323760e81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260029082015261086760f31b604082015260600190565b602080825260029082015261433360f01b604082015260600190565b602080825260029082015261433560f01b604082015260600190565b600060208252610840602083018461525f565b600060408252615c4e604083018561525f565b90508260208301529392505050565b600060608252615c70606083018661525f565b60208301949094525060400152919050565b600060808252615c95608083018761525f565b6020830195909552506040810192909252606090910152919050565b9384526001600160a01b039290921660208401526040830152606082015260800190565b90815260200190565b918252602082015260400190565b948552602085019390935260408401919091526060830152608082015260a00190565b60405181810167ffffffffffffffff81118282101715615d2e57600080fd5b604052919050565b6001600160a01b03811681146119cd57600080fd5b80151581146119cd57600080fdfea26469706673582212209746c15bc3c78dac535b2cbbc1fb373707a2499c21e5dd2623e146874c70972e64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x232 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB617F0C6 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0xCE3E39C0 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xEAA33E14 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xEAA33E14 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xEAB7775B EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0xEF4FCAFA EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xF77BC88B EQ PUSH2 0x4C9 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0xCE3E39C0 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0xD66DD43E EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xD99D13F5 EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0xE69D849D EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xE723406C EQ PUSH2 0x466 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0xC220101D GT PUSH2 0xFF JUMPI DUP1 PUSH4 0xC220101D EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0xC644D3A2 EQ PUSH2 0x3D7 JUMPI DUP1 PUSH4 0xCAA6D21A EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xCAB2E805 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0xCDEE058A EQ PUSH2 0x410 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0xB617F0C6 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0xB6363CF2 EQ PUSH2 0x38B JUMPI DUP1 PUSH4 0xBC463A3D EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0xBECA75D7 EQ PUSH2 0x3B1 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x6BD50CEF GT PUSH2 0x1BE JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x182 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x93E59DC1 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0x9DAAFBE8 EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0x9DB93891 EQ PUSH2 0x35D JUMPI DUP1 PUSH4 0x9F677ED9 EQ PUSH2 0x365 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x6BD50CEF EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x6C0C3B99 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0x70DC320C EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x31B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x323 JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x485CC955 GT PUSH2 0x205 JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x558A7297 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x565EEA19 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x573C473E EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x64681083 EQ PUSH2 0x2EB JUMPI PUSH2 0x232 JUMP JUMPDEST DUP1 PUSH4 0x14B93FAF EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0x29729D88 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x2EB1C3A7 EQ PUSH2 0x27D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24A PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E73 JUMP JUMPDEST PUSH2 0x4DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x268 PUSH2 0x4F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x52F7 JUMP JUMPDEST PUSH2 0x268 PUSH2 0x502 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x28B CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x511 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x290 PUSH2 0x2A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E3B JUMP JUMPDEST PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F36 JUMP JUMPDEST PUSH2 0x6DE JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x797 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x2E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x849 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x900 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x93F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5374 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x964 JUMP JUMPDEST PUSH2 0x268 PUSH2 0x974 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x983 JUMP JUMPDEST PUSH2 0x268 PUSH2 0xA02 JUMP JUMPDEST PUSH2 0x268 PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x268 PUSH2 0xA21 JUMP JUMPDEST PUSH2 0x34E PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5C5D JUMP JUMPDEST PUSH2 0x268 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x373 CALLDATASIZE PUSH1 0x4 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0xCD8 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x386 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FC2 JUMP JUMPDEST PUSH2 0xD84 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x399 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E3B JUMP JUMPDEST PUSH2 0xE16 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x3AC CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0xE44 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x3BF CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0xF29 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x3D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x100E JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x3E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x10CF JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x3F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x10EA JUMP JUMPDEST PUSH2 0x290 PUSH2 0x40B CALLDATASIZE PUSH1 0x4 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x1105 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x11BC JUMP JUMPDEST PUSH2 0x268 PUSH2 0x11CC JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x11DB JUMP JUMPDEST PUSH2 0x446 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x11F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x5C28 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x1457 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x1500 JUMP JUMPDEST PUSH2 0x48C PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F8E JUMP JUMPDEST PUSH2 0x152F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x257 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53CB JUMP JUMPDEST PUSH2 0x24A PUSH2 0x1556 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F63 JUMP JUMPDEST PUSH2 0x1566 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x4C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x15D9 JUMP JUMPDEST PUSH2 0x24A PUSH2 0x4D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E03 JUMP JUMPDEST PUSH2 0x1690 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA DUP6 DUP6 DUP6 DUP6 PUSH2 0x170C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x519 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x54F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x56F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x575F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x6FF730BA70E34BD5CA823424BD15AB869CADC6BAD079B527C71BDE444AD6402B SWAP1 PUSH2 0x5BA SWAP1 DUP5 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x5DF JUMPI POP PUSH2 0x5DF PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x5ED JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x609 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x634 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x580C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x680 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5BD4 JUMP JUMPDEST PUSH2 0x689 DUP3 PUSH2 0x18AB JUMP JUMPDEST PUSH2 0x691 PUSH2 0x1940 JUMP JUMPDEST PUSH1 0xC9 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 PUSH2 0x6B4 PUSH2 0x19D0 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xB0 SHL NOT AND PUSH1 0x1 PUSH1 0xB0 SHL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO OR SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0x1AE45540B0875932452DA603B351CE2F1758258BA1345E79F8FC94F044CB0787 SWAP1 PUSH2 0x78B SWAP1 DUP6 SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0x4784093 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x840 SWAP2 PUSH4 0x5F5E100 SWAP2 PUSH2 0x834 SWAP2 DUP7 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x47840930 SWAP1 PUSH2 0x7D8 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x804 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x828 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C2B AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C65 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x873 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x553F JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0xFF PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x531C3D7229F510A8DA00A0F5792686958CDD9C8A120C3C030A6053CD66B68556 SWAP3 PUSH2 0x8F5 SWAP3 PUSH1 0xFF SWAP2 DIV AND SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x908 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x935 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH2 0x93D PUSH2 0x19D0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0xCB SLOAD PUSH1 0xCC SLOAD PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND SWAP5 SWAP3 DUP5 AND SWAP4 SWAP2 DUP3 AND SWAP3 SWAP2 AND SWAP1 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x98B PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x9B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xCB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xA38 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE PUSH1 0xD3 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP8 DUP6 MSTORE DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD SWAP5 DUP5 MSTORE PUSH1 0xD4 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP8 DUP6 MSTORE DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD DUP3 SLOAD PUSH1 0xE0 SWAP6 DUP2 MUL DUP3 ADD DUP7 ADD SWAP1 SWAP5 MSTORE PUSH1 0xC0 DUP2 ADD DUP5 DUP2 MSTORE SWAP6 SWAP7 DUP8 SWAP7 SWAP4 SWAP6 SWAP1 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP7 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xAE5 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 0xAC7 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD 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 0xB47 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 0xB29 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD 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 0xBA9 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 0xB8B JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD 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 0xC01 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xBED JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD 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 0xC59 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC45 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD 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 0xCB1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC9D JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x577C JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0xFF PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 SWAP2 DIV AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xA8 SHL NOT AND PUSH1 0x1 PUSH1 0xA8 SHL DUP4 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4F1D0445688D95C99CA9FC036F551B205FD18FF26A4443B1979C16D1BA66B535 SWAP3 PUSH2 0x8F5 SWAP3 PUSH1 0xFF SWAP2 DIV AND SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0xFF AND PUSH2 0xDA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B9D JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xDB8 PUSH2 0x1CA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xDC6 DUP5 PUSH2 0x1CD1 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0xE03 JUMPI PUSH2 0xDDC DUP3 DUP3 PUSH2 0x1F87 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST POP POP PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xE4C PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xE79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5679 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xECD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x1440312DBC326DDC21BFA95078324BF5AAF6899E8A27CBA3057C60ADFC84E40B SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0xCE 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 PUSH2 0xF31 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xF5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x55AF JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xFB2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x44F3E9E7B454118E9FCB2E3026396F57CA21D7BD7DCABD31D7F986806422F4DF SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0xCF 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 0x1018 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1024 DUP6 DUP6 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0xCD43FBFB PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xCD43FBFB SWAP1 PUSH2 0x1060 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1077 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x108B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10AF SWAP2 SWAP1 PUSH2 0x517E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 PUSH2 0x10C5 JUMPI PUSH1 0x0 SWAP5 POP POP POP POP POP PUSH2 0x843 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x110D PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x113A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0xFF PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 SWAP2 DIV AND ISZERO ISZERO DUP2 ISZERO ISZERO EQ ISZERO PUSH2 0x116B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AF2 JUMP JUMPDEST PUSH1 0xCF DUP1 SLOAD PUSH1 0xFF PUSH1 0xB0 SHL NOT AND PUSH1 0x1 PUSH1 0xB0 SHL DUP4 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x26D614575A4C104C181C87003D4BB00CC7ADE00D5B47BF8775171C12A376B255 SWAP3 PUSH2 0x8F5 SWAP3 PUSH1 0xFF SWAP2 DIV AND SWAP1 PUSH2 0x53C0 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x11FE PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0xE0 SWAP4 DUP2 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0xC0 DUP2 ADD DUP5 DUP2 MSTORE SWAP1 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x127A 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 0x125C JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD 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 0x12DC 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 0x12BE JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD 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 0x133E 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 0x1320 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD 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 0x1396 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1382 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD 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 0x13EE JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x13DA JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD 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 0x1446 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1432 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xDD2C99F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDD2C99F7 SWAP1 PUSH2 0x148B SWAP1 DUP6 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14B9 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 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x4DFFF917E1FBB261A082E98CC7D43029621F6A6EB05FF3FEF1510D5F1EB4857C DUP4 PUSH1 0x40 MLOAD PUSH2 0x78B SWAP2 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1511 DUP7 PUSH2 0x204D JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x1525 DUP5 DUP5 DUP5 DUP5 PUSH2 0x170C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1543 DUP10 DUP10 DUP10 PUSH2 0x22B2 JUMP JUMPDEST SWAP2 SWAP13 SWAP1 SWAP12 POP SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0xFF AND PUSH2 0x1588 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B9D JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x159A PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x15A4 DUP3 DUP3 PUSH2 0x1F87 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x15E1 PUSH2 0x18A1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x160E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1634 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54F9 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x65 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 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP 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 0x5166 JUMP JUMPDEST TIMESTAMP LT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCB SLOAD PUSH1 0x40 MLOAD PUSH4 0x5FDC7149 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5FDC7149 SWAP1 PUSH2 0x173F SWAP1 DUP9 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x176B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x178F SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1818 JUMPI POP PUSH1 0xCB SLOAD PUSH1 0x40 MLOAD PUSH4 0x5FDC7149 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FDC7149 SWAP1 PUSH2 0x17C8 SWAP1 DUP8 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1818 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4EA JUMPI POP PUSH1 0xCB SLOAD PUSH1 0x40 MLOAD PUSH4 0x5FDC7149 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FDC7149 SWAP1 PUSH2 0x1851 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1869 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x187D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4EA SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x18C4 JUMPI POP PUSH2 0x18C4 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x18D2 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x18EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1919 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x1921 PUSH2 0x238D JUMP JUMPDEST PUSH2 0x192A DUP3 PUSH2 0x240F JUMP JUMPDEST DUP1 ISZERO PUSH2 0x193C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1959 JUMPI POP PUSH2 0x1959 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x1967 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1983 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x19AE JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0xC9 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 0xD01F63F5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A32 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A56 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0xC9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x419D8FE7 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x833B1FCE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE7 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0xC9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xCF28493F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xCF28493F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B78 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0xC9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3AA431A1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x75486342 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C09 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST PUSH1 0xCD 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 DUP3 PUSH2 0x1C3A JUMPI POP PUSH1 0x0 PUSH2 0x843 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1C47 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5845 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x840 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x24DB JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5C0C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x1F7B JUMPI PUSH2 0x1CEB PUSH2 0x4BEF JUMP JUMPDEST DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1CF7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x7 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D15 JUMPI INVALID JUMPDEST EQ ISZERO DUP1 ISZERO PUSH2 0x1D2F JUMPI POP PUSH1 0x8 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D2C JUMPI INVALID JUMPDEST EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D47 JUMPI POP PUSH1 0xA DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D44 JUMPI INVALID JUMPDEST EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D5F JUMPI POP PUSH1 0x9 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1D5C JUMPI INVALID JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x1DD5 JUMPI DUP4 ISZERO PUSH2 0x1DC2 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x57D2 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP6 EQ PUSH2 0x1DC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x55E9 JUMP JUMPDEST PUSH1 0x1 SWAP4 POP DUP2 PUSH1 0x80 ADD MLOAD SWAP5 POP DUP2 PUSH1 0x20 ADD MLOAD SWAP6 POP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1DE3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1DFF JUMPI PUSH2 0x1DFA PUSH2 0x1DF5 DUP4 PUSH2 0x2512 JUMP JUMPDEST PUSH2 0x25EA JUMP JUMPDEST PUSH2 0x1F71 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E0D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E24 JUMPI PUSH2 0x1DFA PUSH2 0x1E1F DUP4 PUSH2 0x26D9 JUMP JUMPDEST PUSH2 0x27B5 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E32 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E49 JUMPI PUSH2 0x1DFA PUSH2 0x1E44 DUP4 PUSH2 0x2B06 JUMP JUMPDEST PUSH2 0x2BA5 JUMP JUMPDEST PUSH1 0x5 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E57 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E6E JUMPI PUSH2 0x1DFA PUSH2 0x1E69 DUP4 PUSH2 0x26D9 JUMP JUMPDEST PUSH2 0x2DF9 JUMP JUMPDEST PUSH1 0x6 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1E7C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E93 JUMPI PUSH2 0x1DFA PUSH2 0x1E8E DUP4 PUSH2 0x2B06 JUMP JUMPDEST PUSH2 0x3157 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1EA1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1EB8 JUMPI PUSH2 0x1DFA PUSH2 0x1EB3 DUP4 PUSH2 0x345B JUMP JUMPDEST PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1EC6 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1EDD JUMPI PUSH2 0x1DFA PUSH2 0x1ED8 DUP4 PUSH2 0x37A1 JUMP JUMPDEST PUSH2 0x37FF JUMP JUMPDEST PUSH1 0x8 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1EEB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F02 JUMPI PUSH2 0x1DFA PUSH2 0x1EFD DUP4 PUSH2 0x3A98 JUMP JUMPDEST PUSH2 0x3B2A JUMP JUMPDEST PUSH1 0x7 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1F10 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F27 JUMPI PUSH2 0x1DFA PUSH2 0x1F22 DUP4 PUSH2 0x3D79 JUMP JUMPDEST PUSH2 0x3E41 JUMP JUMPDEST PUSH1 0xA DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1F35 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F4C JUMPI PUSH2 0x1DFA PUSH2 0x1F47 DUP4 PUSH2 0x429E JUMP JUMPDEST PUSH2 0x43B8 JUMP JUMPDEST PUSH1 0x9 DUP2 PUSH1 0xA DUP2 GT ISZERO PUSH2 0x1F5A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1F71 JUMPI PUSH2 0x1F71 PUSH2 0x1F6C DUP4 PUSH2 0x4837 JUMP JUMPDEST PUSH2 0x48BC JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1CDA JUMP JUMPDEST POP SWAP7 SWAP2 SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1F8F PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9B DUP5 DUP5 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0xCD43FBFB PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCD43FBFB SWAP1 PUSH2 0x1FD7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2002 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2026 SWAP2 SWAP1 PUSH2 0x517E JUMP JUMPDEST SWAP2 POP POP DUP1 PUSH2 0x2046 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5412 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAF0968FC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2091 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x20C1 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x20BE SWAP2 DUP2 ADD SWAP1 PUSH2 0x4EC3 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x2297 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAABAECD6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2112 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2136 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7158DA7C 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x216F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2183 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21A7 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D69BC8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2218 SWAP2 SWAP1 PUSH2 0x4E1F JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2289 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP POP PUSH2 0x22AB JUMP JUMPDEST POP SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP PUSH2 0x22AB SWAP2 POP POP JUMP JUMPDEST SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH2 0x22BA PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x22C7 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x22D4 DUP11 DUP11 PUSH2 0xA30 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xCC 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 0xA6C56907 DUP8 DUP8 DUP8 DUP16 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2326 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5C82 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x233E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2352 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2376 SWAP2 SWAP1 PUSH2 0x5130 JUMP JUMPDEST SWAP8 SWAP16 SWAP2 SWAP15 POP SWAP13 POP SWAP6 SWAP11 POP SWAP5 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x23A6 JUMPI POP PUSH2 0x23A6 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x23B4 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x23D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x23FB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x2428 JUMPI POP PUSH2 0x2428 PUSH2 0x18A5 JUMP JUMPDEST DUP1 PUSH2 0x2436 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2452 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58F5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x247D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x65 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 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 DUP1 ISZERO PUSH2 0x193C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x24FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP2 SWAP1 PUSH2 0x53E3 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2508 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x251A PUSH2 0x4C50 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2529 JUMPI INVALID JUMPDEST EQ PUSH2 0x2546 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5623 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2570 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x56B2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ ISZERO PUSH2 0x259B JUMPI DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2598 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x25BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x25F2 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x2600 DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x262B SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x4A3A AND JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD MLOAD EQ PUSH2 0x2650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x57B5 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE DUP1 DUP9 ADD DUP1 MLOAD DUP10 MLOAD DUP7 AND DUP6 MSTORE PUSH1 0xD3 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP8 DUP7 MSTORE SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP7 MLOAD SWAP2 MLOAD SWAP1 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x5D66689E2C864B4F21EFD3988C0CE5DC8A197981B68E81CE73660E92394FE25F SWAP1 PUSH2 0x26CB SWAP1 DUP6 SWAP1 PUSH2 0x5CD5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0x26E1 PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x3 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x26F0 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x2708 JUMPI POP PUSH1 0x5 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2706 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0x2724 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x59F1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A0D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x27BD PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x27CB DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x27DD DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x27F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x282D JUMPI POP DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x2849 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x555B JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x2328D73 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x11946B98 SWAP2 PUSH2 0x287C SWAP2 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28CC SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x28E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B63 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x292A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x293E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2962 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x2980 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x56CE JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x155BF273 PUSH1 0xE3 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0xAADF9398 SWAP5 PUSH2 0x29F3 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2A1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH1 0xA0 DUP11 ADD MLOAD SWAP2 MLOAD PUSH4 0xDD2C99F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xDD2C99F7 SWAP5 POP PUSH2 0x2A63 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A91 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2607E210004CEF0AD6B3E6AEDB778BFFB03C1586F8DCF55D49AFFFDE210D8BB1 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2B0E PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x4 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2B1D JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x2B35 JUMPI POP PUSH1 0x6 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x2B33 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x58D8 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B7B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5469 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5960 JUMP JUMPDEST PUSH2 0x2BAD PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x2BBB DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x2BCD DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x2BE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C63 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x2C81 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x951DD8D3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0x951DD8D3 SWAP5 PUSH2 0x2CF4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2D20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH1 0xA0 DUP11 ADD MLOAD SWAP2 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xFA93B2A5 SWAP5 POP PUSH2 0x2D64 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBD023C53D293DA163D185720D4274F4DDABC09D5304491A55ABB296CC811D9FA DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x2E01 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x2E0F DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x2E21 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x2E3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2E71 JUMPI POP DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x2E8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x542F JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0xF9839D89 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF9839D89 SWAP2 PUSH2 0x2EC0 SWAP2 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2ED8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F10 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x2F2C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5708 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F40 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xA30 JUMP JUMPDEST POP SWAP2 POP POP DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x2FDF JUMPI PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2F7E SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x4A3A AND JUMP JUMPDEST PUSH1 0x60 DUP6 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP7 SWAP1 SWAP7 SSTORE DUP5 MLOAD DUP5 AND DUP4 MSTORE PUSH1 0xD5 DUP2 MSTORE DUP6 DUP4 KECCAK256 SLOAD SWAP5 MLOAD SWAP1 SWAP4 AND DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD GT ISZERO PUSH2 0x2FDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5886 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x1F974AB PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0x7E5D2AC0 SWAP5 PUSH2 0x3052 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x306A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x307E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH1 0xA0 DUP11 ADD MLOAD SWAP2 MLOAD PUSH4 0xDD2C99F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xDD2C99F7 SWAP5 POP PUSH2 0x30C2 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBFAB88B861F171B7DB714F00E5966131253918D55DDBA816C3EB94657D102390 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x315F PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x316D DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x317F DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x319B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH2 0x31A3 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B7 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0xA30 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x31C9 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x4A8C JUMP JUMPDEST ISZERO PUSH2 0x327C JUMPI PUSH1 0x0 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x31E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x325C SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x327A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5943 JUMP JUMPDEST POP JUMPDEST DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x32D4 JUMPI PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x32B6 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x4ACA AND JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP10 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0x80 DUP10 ADD MLOAD SWAP4 MLOAD PUSH4 0x380BFDD PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0xE02FF740 SWAP5 PUSH2 0x3347 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x335F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 DUP1 DUP11 ADD MLOAD PUSH1 0xA0 DUP12 ADD MLOAD SWAP2 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND SWAP6 POP PUSH4 0xFA93B2A5 SWAP5 POP PUSH2 0x33B7 SWAP4 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFE86F7694B6C54A528ACBE27BE61DD4A85E9A89AEEF7F650A1B439045CCEE5A4 DUP9 PUSH1 0x20 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x344C SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3463 PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x1 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x3472 JUMPI INVALID JUMPDEST EQ PUSH2 0x348F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B0E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B47 JUMP JUMPDEST PUSH2 0x34C1 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x34CF DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x34E1 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x34FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x2328D73 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x11946B98 SWAP2 PUSH2 0x3530 SWAP2 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x355C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3580 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x359C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x35DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x35F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3616 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x3634 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5828 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0xEF682C1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0xEF682C1B SWAP5 PUSH2 0x36A7 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x36BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x36D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 DUP1 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD SWAP2 MLOAD PUSH4 0x51B0A41 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x51B0A410 SWAP3 PUSH2 0x370C SWAP3 SWAP2 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3726 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x373A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x4D7F96086C92B2F9A254AD21548B1C1F2D99502C7949508866349B96BB1A8D8A DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x37A9 PUSH2 0x4C7A JUMP JUMPDEST PUSH1 0x2 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x37B8 JUMPI INVALID JUMPDEST EQ PUSH2 0x37D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A46 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5696 JUMP JUMPDEST PUSH2 0x3807 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x3815 DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x3827 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x3843 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x3877 JUMPI POP DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x3893 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x565C JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x390D SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x392B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54A3 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP3 DUP9 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x80 DUP9 ADD MLOAD SWAP4 MLOAD PUSH4 0x7B5C2835 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP5 PUSH4 0x7B5C2835 SWAP5 PUSH2 0x399E SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x39CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 DUP1 DUP7 ADD MLOAD PUSH1 0xA0 DUP8 ADD MLOAD SWAP2 MLOAD PUSH4 0x56D878F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x56D878F7 SWAP3 PUSH2 0x3A03 SWAP3 SWAP2 PUSH1 0x4 ADD PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3A1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A31 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDD96B18F26FD9950581B9FD821FA907FC318845FC4D220B825A7B19BFDD174E8 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2AF8 SWAP3 SWAP2 SWAP1 PUSH2 0x5CDE JUMP JUMPDEST PUSH2 0x3AA0 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x8 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x3AAF JUMPI INVALID JUMPDEST EQ PUSH2 0x3ACC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B2A JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3AF6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5742 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP4 MSTORE DUP4 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP5 ADD MLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0xCA SLOAD PUSH1 0x40 MLOAD PUSH4 0x2328D73 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x11946B98 SWAP1 PUSH2 0x3B5F SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BAF SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x3BCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5B80 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3BDA DUP6 PUSH2 0x204D JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x3C02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A29 JUMP JUMPDEST PUSH2 0x3C0E DUP4 DUP4 DUP7 DUP5 PUSH2 0x170C JUMP JUMPDEST PUSH2 0x3C2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x597D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C3E DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD PUSH2 0x797 JUMP JUMPDEST SWAP1 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 CALLER DUP10 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3C72 SWAP3 SWAP2 SWAP1 PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xCD SLOAD DUP10 MLOAD PUSH1 0x40 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0xFA93B2A5 SWAP3 POP PUSH2 0x3CD9 SWAP2 DUP10 SWAP2 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3CF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3D07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x18FD144D7DBCBAA6F00FD47A84ADC7DC3CC64A326FFA2DC7691A25E3837DBA03 DUP9 DUP12 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x40 MLOAD PUSH2 0x3D68 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x539F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3D81 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x7 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x3D90 JUMPI INVALID JUMPDEST EQ PUSH2 0x3DAD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3DD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x54DC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3E01 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD CALLER SWAP1 PUSH2 0x3E4F DUP3 DUP3 PUSH2 0x49D9 JUMP JUMPDEST PUSH2 0x3E61 DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x3E7D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH2 0x3E85 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E99 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0xA30 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x3EAE DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x4A8C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EBF DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4A8C JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x3ECA JUMPI POP DUP1 JUMPDEST PUSH2 0x3EE6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x599A JUMP JUMPDEST DUP2 PUSH2 0x3F09 JUMPI DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3EFC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F1F JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x3F16 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP3 POP DUP1 ISZERO PUSH2 0x3FD3 JUMPI PUSH1 0x0 DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3F3A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 PUSH1 0xCD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x80 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3F7A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3F9F SWAP3 SWAP2 SWAP1 PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3FB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3FCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3FE4 DUP6 PUSH2 0x204D JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x400C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x56EB JUMP JUMPDEST PUSH2 0x4018 DUP4 DUP4 DUP7 DUP5 PUSH2 0x170C JUMP JUMPDEST PUSH2 0x4034 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x597D JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH4 0xCD43FBFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCD43FBFB SWAP1 PUSH2 0x406B SWAP1 DUP13 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4082 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4096 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x40BA SWAP2 SWAP1 PUSH2 0x517E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 PUSH2 0x40DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5606 JUMP JUMPDEST PUSH1 0xD1 PUSH1 0x0 DUP14 PUSH1 0x0 ADD MLOAD 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 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP1 DUP3 ADD PUSH1 0x0 PUSH2 0x412A SWAP2 SWAP1 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4138 PUSH1 0x1 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4146 PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4154 PUSH1 0x3 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4162 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST PUSH2 0x4170 PUSH1 0x5 DUP4 ADD PUSH1 0x0 PUSH2 0x4CEB JUMP JUMPDEST POP POP DUP8 PUSH1 0x1 EQ ISZERO PUSH2 0x41BE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x41A4 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x4ACA AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 DUP15 ADD MLOAD SWAP1 MLOAD PUSH4 0xFA93B2A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xFA93B2A5 SWAP2 PUSH2 0x41F6 SWAP2 DUP11 SWAP2 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4210 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4224 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 DUP13 PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 DUP14 PUSH1 0x40 ADD MLOAD SWAP1 POP DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP16 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x522CDA7DD0677EE4C9512EFD8AA92AF93DE64B4C2FE2F8BFE7A9234A655A9BF5 DUP5 DUP9 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4286 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x539F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x42A6 PUSH2 0x4D09 JUMP JUMPDEST PUSH1 0xA DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x42B5 JUMPI INVALID JUMPDEST EQ PUSH2 0x42D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x544C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x55CC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4326 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5486 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ PUSH2 0x434B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5A62 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x4365 SWAP2 SWAP1 PUSH2 0x5166 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x43C0 PUSH2 0x49AF JUMP JUMPDEST PUSH2 0x43D2 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x4A5F JUMP JUMPDEST PUSH2 0x43EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5725 JUMP JUMPDEST PUSH2 0x43F6 PUSH2 0x4BB9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4412 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x22B2 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 PUSH2 0x4437 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4458 PUSH4 0x5F5E100 PUSH2 0x834 DUP6 DUP10 PUSH1 0x60 ADD MLOAD PUSH2 0x1C2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x448B DUP8 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4475 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4ACA SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x44C5 JUMPI DUP2 PUSH2 0x44A7 DUP3 DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4475 JUMPI INVALID JUMPDEST LT ISZERO PUSH2 0x44C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5798 JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x44D2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 CALLER DUP9 PUSH1 0x60 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450B SWAP3 SWAP2 SWAP1 PUSH2 0x5337 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4539 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 DUP13 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SWAP1 DUP10 ADD MLOAD DUP1 MLOAD PUSH20 0x0 SWAP6 POP PUSH4 0xE02FF740 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x4591 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH1 0x0 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x45BB SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x45D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x45E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 DUP13 ADD MLOAD DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP9 MLOAD DUP1 MLOAD PUSH20 0x0 SWAP6 POP PUSH4 0x7B5C2835 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x463C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x60 ADD MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x466A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5CB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x46EA DUP2 PUSH1 0xD6 PUSH1 0x0 DUP9 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x46B3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 SLOAD PUSH2 0x4ACA SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xD6 PUSH1 0x0 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x46FF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 DUP2 SWAP1 SSTORE POP PUSH1 0xCD 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 0xFA93B2A5 DUP7 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4760 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x478C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5350 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x47A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x47BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x93E59EC97820BB1ED9FB6DDC10619D1574E803B1F79B937414FEB8F6B7051F9D DUP7 DUP11 PUSH1 0x80 ADD MLOAD DUP7 DUP13 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x4827 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5CEC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x483F PUSH2 0x4D4A JUMP JUMPDEST PUSH1 0x9 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x484E JUMPI INVALID JUMPDEST EQ PUSH2 0x486B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x57EF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4895 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x59B7 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE SWAP1 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x48C4 PUSH2 0x49AF JUMP JUMPDEST DUP1 MLOAD PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x48FD JUMPI PUSH2 0x48E1 DUP2 PUSH2 0x4B0C JUMP JUMPDEST PUSH2 0x48FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5BF0 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x9C23DA5 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x9C23DA50 SWAP2 PUSH2 0x4932 SWAP2 CALLER SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x530B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x494C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4960 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8750BDAF6E88201790EE2765FEA3AC73B514A52658C818723A30DE91029AD000 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x78B SWAP2 SWAP1 PUSH2 0x53E3 JUMP JUMPDEST PUSH1 0xCF SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5AD6 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x4A1E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x193C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x53F6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP1 PUSH2 0x5578 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT DUP1 ISZERO PUSH2 0x840 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x843 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4AB1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x840 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x4B8D JUMP JUMPDEST PUSH1 0xCA SLOAD PUSH1 0x40 MLOAD PUSH4 0x51572A2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA2AE545A SWAP1 PUSH2 0x4B3D SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x52F7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4B55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x843 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x4BB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x546 SWAP2 SWAP1 PUSH2 0x53E3 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE DUP1 PUSH1 0x0 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 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 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 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 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x19CD SWAP2 SWAP1 PUSH2 0x4D62 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 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 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xA1E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4D7C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4D68 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x843 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4D9B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4DB1 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x4DC4 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x5D0F JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x4DDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xB DUP2 LT PUSH2 0x843 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E14 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x840 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E30 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x840 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4E4D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4E58 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4E68 DUP2 PUSH2 0x5D36 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4E88 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4E93 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x4EA3 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4EB3 DUP2 PUSH2 0x5D36 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 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4EDB JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH2 0x4EE6 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x4EF7 DUP2 PUSH2 0x5D36 JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH2 0x4F08 DUP2 PUSH2 0x5D36 JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x4F28 DUP2 PUSH2 0x5D4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F48 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4F53 DUP2 PUSH2 0x5D36 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4E68 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F75 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4F80 DUP2 PUSH2 0x5D36 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 0x4FA2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4FAD DUP2 PUSH2 0x5D36 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 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4FD4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4FEB JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x4FFC JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x500C JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5019 DUP5 DUP6 DUP6 MUL ADD PUSH2 0x5D0F JUMP JUMPDEST DUP4 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP3 DUP7 ADD DUP8 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x50E9 JUMPI DUP2 CALLDATALOAD DUP6 ADD PUSH2 0x100 DUP1 PUSH1 0x1F NOT DUP4 DUP16 SUB ADD SLT ISZERO PUSH2 0x5046 JUMPI DUP11 DUP12 REVERT JUMPDEST PUSH2 0x504F DUP2 PUSH2 0x5D0F JUMP JUMPDEST PUSH2 0x505B DUP15 DUP13 DUP6 ADD PUSH2 0x4DF4 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x506A DUP15 PUSH1 0x40 DUP6 ADD PUSH2 0x4D80 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE PUSH1 0x60 PUSH2 0x507C DUP16 DUP3 DUP7 ADD PUSH2 0x4D80 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x508E DUP16 PUSH1 0x80 DUP7 ADD PUSH2 0x4D80 JUMP JUMPDEST DUP2 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE DUP2 DUP4 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0x50C1 JUMPI DUP13 DUP14 REVERT JUMPDEST PUSH2 0x50CF DUP16 DUP14 DUP4 DUP8 ADD ADD PUSH2 0x4D8B JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP DUP7 MSTORE POP POP SWAP3 DUP8 ADD SWAP3 SWAP1 DUP8 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5025 JUMP JUMPDEST POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5109 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x840 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5125 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x840 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5144 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x514F DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5177 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5190 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x51DA 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 0x51B5 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x51DA JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x51F8 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5239 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x521D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x524A JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0xC0 DUP5 MSTORE PUSH2 0x5274 PUSH1 0xC0 DUP6 ADD DUP3 PUSH2 0x51A2 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP DUP5 DUP2 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x528D DUP2 DUP4 PUSH2 0x51A2 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP3 POP DUP6 DUP2 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x52A6 DUP2 DUP5 PUSH2 0x51A2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x60 DUP5 ADD MLOAD SWAP2 POP DUP5 DUP2 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x52C2 DUP2 DUP4 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD SWAP3 POP DUP6 DUP2 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x52DB DUP2 DUP5 PUSH2 0x51E5 JUMP JUMPDEST SWAP2 POP POP PUSH1 0xA0 DUP5 ADD MLOAD SWAP2 POP DUP5 DUP2 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x4EA DUP2 DUP4 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 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 0x532F SWAP1 DUP4 ADD DUP5 PUSH2 0x5214 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x840 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5214 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x219B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x10CC4D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x43323 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x82627 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413131 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41323 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x21991B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4133 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x20989B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2199 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x21989B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x43313 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413139 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433133 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x219999 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4131 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433233 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433235 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433131 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4137 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2099 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x86627 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433331 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433231 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433335 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x104C4D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x21999B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4331 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x10CCCD PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433135 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x219899 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209919 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4337 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x10CC8D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433337 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41313 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x195B881A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x219919 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209899 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433239 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x43333 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413233 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413135 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x827 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4139 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x86647 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x209B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413231 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433139 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413137 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433333 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x10CD PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4339 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x104D PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413133 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4135 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433137 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x433237 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x867 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4333 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4335 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x840 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x525F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x5C4E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x525F JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x5C70 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x525F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x40 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 MSTORE PUSH2 0x5C95 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x525F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE POP PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5D2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x19CD JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 CHAINID 0xC1 JUMPDEST 0xC3 0xC7 DUP14 0xAC MSTORE8 JUMPDEST 0x2C 0xBB 0xC1 0xFB CALLDATACOPY CALLDATACOPY SMOD LOG2 0x49 SWAP13 0x21 0xE5 0xDD 0x26 0x23 0xE1 CHAINID DUP8 0x4C PUSH17 0x972E64736F6C634300060A003300000000 ",
+ "sourceMap": "2837:42321:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21068:252;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3176:31;;;:::i;:::-;;;;;;;;3595:25;;;:::i;16018:205::-;;;;;;;;;:::i;:::-;;11577:384;;;;;;;;;:::i;15276:277::-;;;;;;;;;:::i;19963:174::-;;;;;;;;;:::i;:::-;;;;;;;;12671:268;;;;;;;;;:::i;15664:92::-;;;:::i;17987:270::-;;;:::i;:::-;;;;;;;;;;;3939:26;;;:::i;3006:39::-;;;:::i;1969:145:58:-;;;:::i;3092:29:1:-;;;:::i;1346:77:58:-;;;:::i;3051:35:1:-;;;:::i;22594:318::-;;;;;;;;;:::i;:::-;;;;;;;;;;3448:28;;;:::i;13206:233::-;;;;;;;;;:::i;16424:337::-;;;;;;;;;:::i;17535:136::-;;;;;;;;;:::i;14064:292::-;;;;;;;;;:::i;13616:262::-;;;;;;;;;:::i;18558:351::-;;;;;;;;;:::i;23057:109::-;;;;;;;;;:::i;21494:145::-;;;;;;;;;:::i;14650:217::-;;;;;;;;;:::i;3721:33::-;;;:::i;3127:43::-;;;:::i;23345:125::-;;;;;;;;;:::i;22161:151::-;;;;;;;;;:::i;:::-;;;;;;;;12204:175;;;;;;;;;:::i;20383:266::-;;;;;;;;;:::i;19286:386::-;;;;;;;;;:::i;:::-;;;;;;;;;;3820:29;;;:::i;17070:188::-;;;;;;;;;:::i;2263:240:58:-;;;;;;;;;:::i;21804:139:1:-;;;;;;;;;:::i;21068:252::-;21230:4;21253:60;21270:11;21283:7;21292:11;21305:7;21253:16;:60::i;:::-;21246:67;21068:252;-1:-1:-1;;;;;21068:252:1:o;3176:31::-;;;-1:-1:-1;;;;;3176:31:1;;:::o;3595:25::-;;;-1:-1:-1;;;;;3595:25:1;;:::o;16018:205::-;1560:12:58;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;;;;;;;;;16118:1:1::1;16111:4;:8;16103:24;;;;-1:-1:-1::0;;;16103:24:1::1;;;;;;;;;-1:-1:-1::0;;;;;16138:21:1;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;:28;;;16182:34;::::1;::::0;::::1;::::0;16162:4;;16182:34:::1;;;;;;;;;;16018:205:::0;;:::o;11577:384::-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;-1:-1:-1;;;;;11674:26:1;::::1;11666:41;;;;-1:-1:-1::0;;;11666:41:1::1;;;;;;;;;-1:-1:-1::0;;;;;11725:20:1;::::1;11717:35;;;;-1:-1:-1::0;;;11717:35:1::1;;;;;;;;;11763:22;11778:6;11763:14;:22::i;:::-;11795:34;:32;:34::i;:::-;11840:11;:48:::0;;-1:-1:-1;;;;;;11840:48:1::1;-1:-1:-1::0;;;;;11840:48:1;::::1;;::::0;;11898:24:::1;:22;:24::i;:::-;11933:14;:21:::0;;-1:-1:-1;;;;11933:21:1::1;-1:-1:-1::0;;;11933:21:1::1;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;11577:384:1;;;:::o;15276:277::-;15371:10;15361:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;15361:32:1;;;;;;;;;;;;:47;;;;;;;15353:62;;;;-1:-1:-1;;;15353:62:1;;;;;;;;;15436:10;15426:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;15426:32:1;;;;;;;;;;;:46;;-1:-1:-1;;15426:46:1;;;;;;;15488:58;;15426:32;;15436:10;15488:58;;;;15426:46;;15488:58;;;;;;;;;;15276:277;;:::o;19963:174::-;20063:10;;:40;;-1:-1:-1;;;20063:40:1;;20037:7;;20063:67;;20121:8;;20063:53;;20108:7;;-1:-1:-1;;;;;20063:10:1;;:31;;:40;;20095:7;;20063:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;:53;:44;:53;:::i;:::-;:57;:67;:57;:67;:::i;:::-;20056:74;;19963:174;;;;;:::o;12671:268::-;10031:13;;-1:-1:-1;;;;;10031:13:1;10017:10;:27;10009:42;;;;-1:-1:-1;;;10009:42:1;;;;;;;;;12773:21:::1;::::0;::::1;-1:-1:-1::0;;;12773:21:1;;::::1;;:41;;::::0;::::1;;;;12765:56;;;;-1:-1:-1::0;;;12765:56:1::1;;;;;;;;;12832:21;:40:::0;;-1:-1:-1;;;;12832:40:1::1;-1:-1:-1::0;;;12832:40:1;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;12888:44:::1;::::0;::::1;::::0;::::1;::::0;12832:40:::1;12910:21:::0;::::1;;::::0;12888:44:::1;;;;;;;;;;12671:268:::0;:::o;15664:92::-;1560:12:58;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;15725:24:1::1;:22;:24::i;:::-;15664:92::o:0;17987:270::-;18186:9;;18206:6;;18223:10;;18244:4;;-1:-1:-1;;;;;18186:9:1;;;;18206:6;;;;18223:10;;;;18244:4;;;17987:270::o;3939:26::-;;;-1:-1:-1;;;3939:26:1;;;;;:::o;3006:39::-;;;-1:-1:-1;;;;;3006:39:1;;:::o;1969:145:58:-;1560:12;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;2059:6:::1;::::0;2038:40:::1;::::0;2075:1:::1;::::0;-1:-1:-1;;;;;2059:6:58::1;::::0;2038:40:::1;::::0;2075:1;;2038:40:::1;2088:6;:19:::0;;-1:-1:-1;;;;;;2088:19:58::1;::::0;;1969:145::o;3092:29:1:-;;;-1:-1:-1;;;;;3092:29:1;;:::o;1346:77:58:-;1410:6;;-1:-1:-1;;;;;1410:6:58;1346:77;;:::o;3051:35:1:-;;;-1:-1:-1;;;;;3051:35:1;;:::o;22594:318::-;22715:24;;:::i;:::-;-1:-1:-1;;;;;22814:14:1;;22753:7;22814:14;;;:6;:14;;;;;;;;:24;;;;;;;;22840:17;;;:9;:17;;;;;:27;;;;;;;;;22869:25;;;:17;:25;;;;;:35;;;;;;;;;22806:99;;;;;;;;;;;;;;;;;;;;;22753:7;;;;22814:24;;22840:27;;22869:35;;22806:99;;22814:24;;22806:99;;;;22814:24;;22806:99;;22814:24;22806:99;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22806:99:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22806:99:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22806:99:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22594:318;;;;;:::o;3448:28::-;;;-1:-1:-1;;;;;3448:28:1;;:::o;13206:233::-;9836:10;;-1:-1:-1;;;;;9836:10:1;9822;:24;9814:39;;;;-1:-1:-1;;;9814:39:1;;;;;;;;;13297:17:::1;::::0;::::1;-1:-1:-1::0;;;13297:17:1;;::::1;;:33;;::::0;::::1;;;;13289:48;;;;-1:-1:-1::0;;;13289:48:1::1;;;;;;;;;13348:17;:32:::0;;-1:-1:-1;;;;13348:32:1::1;-1:-1:-1::0;;;13348:32:1;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;13396:36:::1;::::0;::::1;::::0;::::1;::::0;13348:32:::1;13414:17:::0;::::1;;::::0;13396:36:::1;;16424:337:::0;2087:11:61;;;;2079:55;;;;-1:-1:-1;;;2079:55:61;;;;;;;;;2209:11;:19;;-1:-1:-1;;2209:19:61;;;9649::1::1;:17;:19::i;:::-;16527:17:::2;16546:18:::0;16566:15:::2;16585:21;16597:8;16585:11;:21::i;:::-;16526:80;;;;;;16620:12;16616:139;;;16648:38;16666:10;16678:7;16648:17;:38::i;:::-;-1:-1:-1::0;;;;;16700:29:1;::::2;;::::0;;;:17:::2;:29;::::0;;;;;;;:38;;;;;;;;16741:3:::2;16700:44:::0;;16616:139:::2;-1:-1:-1::0;;2383:11:61;:18;;-1:-1:-1;;2383:18:61;2397:4;2383:18;;;-1:-1:-1;;16424:337:1:o;17535:136::-;-1:-1:-1;;;;;17636:17:1;;;17613:4;17636:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;17535:136::o;14064:292::-;1560:12:58;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;-1:-1:-1;;;;;14151:28:1;::::1;14143:44;;;;-1:-1:-1::0;;;14143:44:1::1;;;;;;;;;14205:13;::::0;-1:-1:-1;;;;;14205:31:1;;::::1;:13:::0;::::1;:31;;14197:46;;;;-1:-1:-1::0;;;14197:46:1::1;;;;;;;;;14279:13;::::0;14258:51:::1;::::0;-1:-1:-1;;;;;14258:51:1;;::::1;::::0;14279:13:::1;::::0;14258:51:::1;::::0;14279:13:::1;::::0;14258:51:::1;14319:13;:30:::0;;-1:-1:-1;;;;;;14319:30:1::1;-1:-1:-1::0;;;;;14319:30:1;;;::::1;::::0;;;::::1;::::0;;14064:292::o;13616:262::-;1560:12:58;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;-1:-1:-1;;;;;13697:25:1;::::1;13689:41;;;;-1:-1:-1::0;;;13689:41:1::1;;;;;;;;;13748:10;::::0;-1:-1:-1;;;;;13748:25:1;;::::1;:10:::0;::::1;:25;;13740:40;;;;-1:-1:-1::0;;;13740:40:1::1;;;;;;;;;13813:10;::::0;13795:42:::1;::::0;-1:-1:-1;;;;;13795:42:1;;::::1;::::0;13813:10:::1;::::0;13795:42:::1;::::0;13813:10:::1;::::0;13795:42:::1;13847:10;:24:::0;;-1:-1:-1;;;;;;13847:24:1::1;-1:-1:-1::0;;;;;13847:24:1;;;::::1;::::0;;;::::1;::::0;;13616:262::o;18558:351::-;18635:7;18655:30;;:::i;:::-;18687:17;18710:37;18730:6;18738:8;18710:19;:37::i;:::-;-1:-1:-1;18794:10:1;;:48;;-1:-1:-1;;;18794:48:1;;18654:93;;-1:-1:-1;18654:93:1;;-1:-1:-1;18759:16:1;;;;-1:-1:-1;;;;;18794:10:1;;:30;;:48;;18654:93;;;;18794:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18758:84;;;;18858:8;18853:23;;18875:1;18868:8;;;;;;;;18853:23;-1:-1:-1;18894:8:1;18558:351;-1:-1:-1;;;;;18558:351:1:o;23057:109::-;-1:-1:-1;;;;;23143:16:1;23117:7;23143:16;;;:8;:16;;;;;;;23057:109::o;21494:145::-;-1:-1:-1;;;;;21598:34:1;21572:7;21598:34;;;:19;:34;;;;;;;21494:145::o;14650:217::-;1560:12:58;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;14735:14:1::1;::::0;::::1;-1:-1:-1::0;;;14735:14:1;;::::1;;:31;;::::0;::::1;;;;14727:46;;;;-1:-1:-1::0;;;14727:46:1::1;;;;;;;;;14784:14;:30:::0;;-1:-1:-1;;;;14784:30:1::1;-1:-1:-1::0;;;14784:30:1;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;14830::::1;::::0;::::1;::::0;::::1;::::0;14784::::1;14845:14:::0;::::1;;::::0;14830:30:::1;;3721:33:::0;;;-1:-1:-1;;;3721:33:1;;;;;:::o;3127:43::-;;;-1:-1:-1;;;;;3127:43:1;;:::o;23345:125::-;-1:-1:-1;;;;;23439:24:1;23413:7;23439:24;;;:16;:24;;;;;;;23345:125::o;22161:151::-;22236:24;;:::i;:::-;-1:-1:-1;;;;;22280:14:1;;;;;;:6;:14;;;;;;;;:24;;;;;;;;;22272:33;;;;;;;;;;;;;;;;;;;;;;;22280:24;;22272:33;;22280:24;;22272:33;;22280:24;22272:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22272:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22272:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22272:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22161:151;;;;:::o;12204:175::-;12272:4;;:48;;-1:-1:-1;;;12272:48:1;;-1:-1:-1;;;;;12272:4:1;;;;:19;;:48;;12292:6;;12300:10;;12312:7;;12272:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12356:6;-1:-1:-1;;;;;12336:36:1;12344:10;-1:-1:-1;;;;;12336:36:1;;12364:7;12336:36;;;;;;;20383:266;20452:4;20469:18;20489:14;20505:18;20525:14;20543:26;20561:7;20543:17;:26::i;:::-;20468:101;;;;;;;;20586:56;20603:10;20615:6;20623:10;20635:6;20586:16;:56::i;:::-;20579:63;20383:266;-1:-1:-1;;;;;;20383:266:1:o;19286:386::-;19452:4;19470:7;19491;19526:18;19546:13;19561:12;19577:43;19593:6;19601:8;19611;19577:15;:43::i;:::-;19523:97;;;;-1:-1:-1;19523:97:1;;-1:-1:-1;19286:386:1;-1:-1:-1;;;;;;;;19286:386:1:o;3820:29::-;;;-1:-1:-1;;;3820:29:1;;;;;:::o;17070:188::-;2087:11:61;;;;2079:55;;;;-1:-1:-1;;;2079:55:61;;;;;;;;;2209:11;:19;;-1:-1:-1;;2209:19:61;;;9649::1::1;:17;:19::i;:::-;17165:35:::2;17183:6;17191:8;17165:17;:35::i;:::-;-1:-1:-1::0;;;;;17210:25:1;;::::2;;::::0;;;:17:::2;:25;::::0;;;;;;;:35;;;;;;;17248:3:::2;17210:41:::0;;2383:11:61;:18;;-1:-1:-1;;2383:18:61;2397:4;2383:18;;;17070:188:1:o;2263:240:58:-;1560:12;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;-1:-1:-1;;;;;2351:22:58;::::1;2343:73;;;;-1:-1:-1::0;;;2343:73:58::1;;;;;;;;;2452:6;::::0;2431:38:::1;::::0;-1:-1:-1;;;;;2431:38:58;;::::1;::::0;2452:6:::1;::::0;2431:38:::1;::::0;2452:6:::1;::::0;2431:38:::1;2479:6;:17:::0;;-1:-1:-1;;;;;;2479:17:58::1;-1:-1:-1::0;;;;;2479:17:58;;;::::1;::::0;;;::::1;::::0;;2263:240::o;21804:139:1:-;21864:4;21910:7;-1:-1:-1;;;;;21894:40:1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21887:3;:49;;;21804:139;-1:-1:-1;;21804:139:1:o;44367:377::-;44565:6;;:48;;-1:-1:-1;;;44565:48:1;;44530:4;;-1:-1:-1;;;;;44565:6:1;;:26;;:48;;44592:11;;44605:7;;44565:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:108;;;;-1:-1:-1;44629:6:1;;:44;;-1:-1:-1;;;44629:44:1;;-1:-1:-1;;;;;44629:6:1;;;;:26;;:44;;44656:7;;44665;;44629:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44565:172;;;;-1:-1:-1;44689:6:1;;:48;;-1:-1:-1;;;44689:48:1;;-1:-1:-1;;;;;44689:6:1;;;;:26;;:48;;44716:11;;44729:7;;44689:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;864:104:55;951:10;864:104;:::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;:::o;955:148:58:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1027:26:58::1;:24;:26::i;:::-;1063:33;1088:7;1063:24;:33::i;:::-;1426:14:57::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;955:148:58;;:::o;1087:512:61:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1574:11:61::1;:18:::0;;-1:-1:-1;;1574:18:61::1;1588:4;1574:18;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;1087:512:61;:::o;44831:325:1:-;44915:11;;;;;;;;;-1:-1:-1;;;;;44915:11:1;-1:-1:-1;;;;;44915:24:1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44884:9;:58;;-1:-1:-1;;;;;;44884:58:1;-1:-1:-1;;;;;44884:58:1;;;;;;44977:11;;:23;;;-1:-1:-1;;;44977:23:1;;;;:11;;;;;:21;;:23;;;;;;;;;;;;;;:11;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44952:6;:49;;-1:-1:-1;;;;;;44952:49:1;-1:-1:-1;;;;;44952:49:1;;;;;;45050:11;;:33;;;-1:-1:-1;;;45050:33:1;;;;:11;;;;;:31;;:33;;;;;;;;;;;;;;:11;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45011:10;:73;;-1:-1:-1;;;;;;45011:73:1;-1:-1:-1;;;;;45011:73:1;;;;;;45121:11;;:27;;;-1:-1:-1;;;45121:27:1;;;;:11;;;;;:25;;:27;;;;;;;;;;;;;;:11;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45094:4;:55;;-1:-1:-1;;;;;;45094:55:1;-1:-1:-1;;;;;45094:55:1;;;;;;;;;;44831:325::o;2237:459:51:-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;3151:130;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;:3;:39::i;10994:93:1:-;11056:17;;-1:-1:-1;;;11056:17:1;;;;11055:18;11047:33;;;;-1:-1:-1;;;11047:33:1;;;;;;;;24008:2898;24114:4;;;;;;;24266:2581;24290:8;:15;24286:1;:19;24266:2581;;;24326:32;;:::i;:::-;24361:8;24370:1;24361:11;;;;;;;;;;;;;;;;;;24418:17;;24361:11;;-1:-1:-1;24642:30:1;24628:10;:44;;;;;;;;;;24627:107;;;;-1:-1:-1;24708:25:1;24694:10;:39;;;;;;;;;;24627:107;:171;;;;-1:-1:-1;24769:28:1;24755:10;:42;;;;;;;;;;24627:171;:230;;;;-1:-1:-1;24833:23:1;24819:10;:37;;;;;;;;;;24627:230;24606:713;;;25023:12;25019:164;;;25081:6;:12;;;-1:-1:-1;;;;;25067:26:1;:10;-1:-1:-1;;;;;25067:26:1;;25059:42;;;;-1:-1:-1;;;25059:42:1;;;;;;;;;25142:6;:14;;;25131:7;:25;25123:41;;;;-1:-1:-1;;;25123:41:1;;;;;;;;;25215:4;25200:19;;25247:6;:14;;;25237:24;;25292:6;:12;;;25279:25;;24606:713;25351:28;25337:10;:42;;;;;;;;;25333:1504;;;25399:47;25410:35;25438:6;25410:27;:35::i;:::-;25399:10;:47::i;:::-;25333:1504;;;25485:36;25471:10;:50;;;;;;;;;25467:1370;;;25541:47;25554:33;25580:6;25554:25;:33::i;:::-;25541:12;:47::i;25467:1370::-;25627:37;25613:10;:51;;;;;;;;;25609:1228;;;25684:49;25698:34;25725:6;25698:26;:34::i;:::-;25684:13;:49::i;25609:1228::-;25772:36;25758:10;:50;;;;;;;;;25754:1083;;;25828:53;25847:33;25873:6;25847:25;:33::i;:::-;25828:18;:53::i;25754:1083::-;25920:37;25906:10;:51;;;;;;;;;25902:935;;;25977:55;25997:34;26024:6;25997:26;:34::i;:::-;25977:19;:55::i;25902:935::-;26071:34;26057:10;:48;;;;;;;;;26053:784;;;26125:43;26137:30;26160:6;26137:22;:30::i;:::-;26125:11;:43::i;26053:784::-;26207:34;26193:10;:48;;;;;;;;;26189:648;;;26261:43;26273:30;26296:6;26273:22;:30::i;:::-;26261:11;:43::i;26189:648::-;26343:25;26329:10;:39;;;;;;;;;26325:512;;;26388:41;26396:32;26421:6;26396:24;:32::i;:::-;26388:7;:41::i;26325:512::-;26468:30;26454:10;:44;;;;;;;;;26450:387;;;26518:51;26531:37;26561:6;26531:29;:37::i;:::-;26518:12;:51::i;26450:387::-;26608:28;26594:10;:42;;;;;;;;;26590:247;;;26656:47;26667:35;26695:6;26667:27;:35::i;:::-;26656:10;:47::i;26590:247::-;26742:23;26728:10;:37;;;;;;;;;26724:113;;;26785:37;26791:30;26814:6;26791:22;:30::i;:::-;26785:5;:37::i;:::-;-1:-1:-1;;24307:3:1;;24266:2581;;;-1:-1:-1;26865:12:1;26879:10;;-1:-1:-1;26879:10:1;-1:-1:-1;24008:2898:1;-1:-1:-1;;24008:2898:1:o;27094:306::-;27180:30;;:::i;:::-;27212:17;27235:37;27255:6;27263:8;27235:19;:37::i;:::-;-1:-1:-1;27306:10:1;;:48;;-1:-1:-1;;;27306:48:1;;27179:93;;-1:-1:-1;27179:93:1;;-1:-1:-1;27285:17:1;;-1:-1:-1;;;;;27306:10:1;;;;:30;;:48;;27179:93;;;;27306:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27282:72;;;27373:12;27365:28;;;;-1:-1:-1;;;27365:28:1;;;;;;;;;27094:306;;;;;:::o;43341:683::-;43445:7;43466;43487;43508;43540:22;43581:7;43540:49;;43603:6;-1:-1:-1;;;;;43603:23:1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43603:25:1;;;;;;;;-1:-1:-1;;43603:25:1;;;;;;;;;;;;;;;;43599:419;;43908:6;-1:-1:-1;;;;;43908:22:1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43934:6;-1:-1:-1;;;;;43934:22:1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43960:6;-1:-1:-1;;;;;43960:18:1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43982:6;-1:-1:-1;;;;;43982:22:1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43900:107;;;;;;;;;;;43599:419;-1:-1:-1;43829:10:1;;-1:-1:-1;43841:10:1;;-1:-1:-1;43853:6:1;-1:-1:-1;43861:6:1;;-1:-1:-1;43821:47:1;;-1:-1:-1;;43821:47:1;43341:683;;;;;;:::o;42554:708::-;42721:24;;:::i;:::-;42759:4;42777:7;42798;42831:30;;:::i;:::-;42863:17;42882:29;42915:71;42948:6;42968:8;42915:19;:71::i;:::-;42830:156;;;;;;42997:18;43017:13;43032:22;43058:10;;;;;;;;;-1:-1:-1;;;;;43058:10:1;-1:-1:-1;;;;;43058:25:1;;43097:5;43116:9;43139:21;43174:8;43058:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43211:5;;42996:196;;-1:-1:-1;42996:196:1;-1:-1:-1;43211:5:1;;-1:-1:-1;42554:708:1;;-1:-1:-1;;;;;;;;;42554:708:1:o;799:59:55:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1426:14;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;799:59:55;:::o;1109:161:58:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1191:6:58::1;:16:::0;;-1:-1:-1;;;;;;1191:16:58::1;-1:-1:-1::0;;;;;1191:16:58;::::1;::::0;;::::1;::::0;;;1222:41:::1;::::0;-1:-1:-1;;1222:41:58::1;::::0;-1:-1:-1;;1222:41:58::1;1426:14:57::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1109:161:58;;:::o;3756:368:51:-;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o;6949:662:26:-;7026:20;;:::i;:::-;7086;7066:16;;:40;;;;;;;;;7058:55;;;;-1:-1:-1;;;7058:55:26;;;;;;;;;7131:11;;;;-1:-1:-1;;;;;7131:25:26;7123:40;;;;-1:-1:-1;;;7123:40:26;;;;;;;;;7245:17;7277:5;:10;;;:17;7298:2;7277:23;7273:148;;;7388:5;:10;;;7377:33;;;;;;;;;;;;;;7365:45;;7273:148;7497:1;7485:9;:13;7477:28;;;;-1:-1:-1;;;7477:28:26;;;;;;;;;7523:81;;;;;;;;7545:11;;;;;-1:-1:-1;;;;;7523:81:26;;;7567:13;;;;;7523:81;;;;;;;;;;-1:-1:-1;7523:81:26;6949:662::o;27644:482:1:-;9447:23;:21;:23::i;:::-;27779:11;;27767:10:::1;::::0;10353:37:::1;27767:10:::0;27779:11;10353:13:::1;:37::i;:::-;27844:11:::0;;-1:-1:-1;;;;;27824:32:1::2;27806:15;27824:32:::0;;;:19:::2;:32;::::0;;;;;:39:::2;::::0;27861:1:::2;27824:39;:36;:39;:::i;:::-;27806:57;;27899:7;27882:5;:13;;;:24;27874:40;;;;-1:-1:-1::0;;;27874:40:1::2;;;;;;;;;27972:11:::0;;-1:-1:-1;;;;;27952:32:1;;::::2;;::::0;;;:19:::2;:32;::::0;;;;;;;:42;;;28038:15;;::::2;::::0;;28014:11;;28004:22;::::2;::::0;;:9:::2;:22:::0;;;;;:31;;;;;;;;;;:49;;;;28103:15;;28081:11;;28069:50;;28103:15;;28069:50;;;::::2;::::0;::::2;::::0;::::2;::::0;27987:7;;28069:50:::2;;;;;;;;;;10401:1;9481::::1;;27644:482:::0;:::o;9253:601:26:-;9328:18;;:::i;:::-;9400:28;9380:16;;:48;;;;;;;;;9379:104;;;-1:-1:-1;9454:28:26;9434:16;;:48;;;;;;;;;9379:104;9358:153;;;;-1:-1:-1;;;9358:153:26;;;;;;;;;9529:11;;;;-1:-1:-1;;;;;9529:25:26;9521:40;;;;-1:-1:-1;;;9521:40:26;;;;;;;;;9591:256;;;;;;;;9628:5;:11;;;-1:-1:-1;;;;;9591:256:26;;;;;9666:5;:13;;;9591:256;;;;9703:5;:19;;;-1:-1:-1;;;;;9591:256:26;;;;;9747:5;:11;;;-1:-1:-1;;;;;9591:256:26;;;;;9783:5;:11;;;9591:256;;;;9820:5;:12;;;9591:256;;;9572:275;;9253:601;;;:::o;28377:838:1:-;9447:23;:21;:23::i;:::-;28512:11;;28500:10:::1;::::0;10353:37:::1;28500:10:::0;28512:11;10353:13:::1;:37::i;:::-;28547:41:::2;28561:5;:11;;;28574:5;:13;;;28547;:41::i;:::-;28539:57;;;;-1:-1:-1::0;;;28539:57:1::2;;;;;;;;;28690:10;::::0;::::2;::::0;-1:-1:-1;;;;;28690:24:1::2;28704:10;28690:24;::::0;28689:57:::2;;;28734:5;:11;;;-1:-1:-1::0;;;;;28720:25:1::2;:5;:10;;;-1:-1:-1::0;;;;;28720:25:1::2;;28689:57;28681:73;;;;-1:-1:-1::0;;;28681:73:1::2;;;;;;;;;28773:9;::::0;28803:11:::2;::::0;::::2;::::0;28773:42:::2;::::0;-1:-1:-1;;;28773:42:1;;-1:-1:-1;;;;;28773:9:1;;::::2;::::0;:29:::2;::::0;:42:::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28765:58;;;;-1:-1:-1::0;;;28765:58:1::2;;;;;;;;;28834:22;28875:5;:11;;;28834:53;;28912:6;-1:-1:-1::0;;;;;28912:22:1::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28906:3;:30;28898:46;;;;-1:-1:-1::0;;;28898:46:1::2;;;;;;;;;28962:11:::0;;-1:-1:-1;;;;;28955:19:1::2;;::::0;;;:6:::2;:19;::::0;;;;;;;28975:13;;::::2;::::0;28955:34;;;;;;;;;28998:11:::2;::::0;::::2;::::0;29011:12:::2;::::0;::::2;::::0;29025:11:::2;::::0;::::2;::::0;28955:82;;-1:-1:-1;;;28955:82:1;;:42:::2;::::0;::::2;::::0;:82:::2;::::0;:34;;28998:11;;29011:12;;29025:11;28955:82:::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;29048:4:1::2;::::0;29068:11:::2;::::0;::::2;::::0;29081:10:::2;::::0;;::::2;::::0;29093:12:::2;::::0;::::2;::::0;29048:58;;-1:-1:-1;;;29048:58:1;;-1:-1:-1;;;;;29048:4:1;;::::2;::::0;-1:-1:-1;29048:19:1::2;::::0;-1:-1:-1;29048:58:1::2;::::0;29081:10;;29093:12;29048:58:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;29168:5;:10;;;-1:-1:-1::0;;;;;29122:86:1::2;29155:5;:11;;;-1:-1:-1::0;;;;;29122:86:1::2;29142:5;:11;;;-1:-1:-1::0;;;;;29122:86:1::2;;29180:5;:13;;;29195:5;:12;;;29122:86;;;;;;;;;;;;;;;;10401:1;9481::::1;;28377:838:::0;:::o;10074:665:26:-;10150:19;;:::i;:::-;10223:29;10203:16;;:49;;;;;;;;;10202:106;;;-1:-1:-1;10278:29:26;10258:16;;:49;;;;;;;;;10202:106;10181:156;;;;-1:-1:-1;;;10181:156:26;;;;;;;;;10355:11;;;;-1:-1:-1;;;;;10355:25:26;10347:41;;;;-1:-1:-1;;;10347:41:26;;;;;;;;;10406:19;;;;-1:-1:-1;;;;;10406:33:26;10398:49;;;;-1:-1:-1;;;10398:49:26;;;;;;;;29469:613:1;9447:23;:21;:23::i;:::-;29606:11;;29594:10:::1;::::0;10353:37:::1;29594:10:::0;29606:11;10353:13:::1;:37::i;:::-;29641:41:::2;29655:5;:11;;;29668:5;:13;;;29641;:41::i;:::-;29633:57;;;;-1:-1:-1::0;;;29633:57:1::2;;;;;;;;;29701:22;29742:5;:11;;;29701:53;;29779:6;-1:-1:-1::0;;;;;29779:22:1::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29773:3;:30;29765:46;;;;-1:-1:-1::0;;;29765:46:1::2;;;;;;;;;29829:11:::0;;-1:-1:-1;;;;;29822:19:1::2;;::::0;;;:6:::2;:19;::::0;;;;;;;29842:13;;::::2;::::0;29822:34;;;;;;;;;29868:11:::2;::::0;::::2;::::0;29881:12:::2;::::0;::::2;::::0;29895:11:::2;::::0;::::2;::::0;29822:85;;-1:-1:-1;;;29822:85:1;;:45:::2;::::0;::::2;::::0;:85:::2;::::0;:34;;29868:11;;29881:12;;29895:11;29822:85:::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;29918:4:1::2;::::0;29938:11:::2;::::0;::::2;::::0;29951:8:::2;::::0;;::::2;::::0;29961:12:::2;::::0;::::2;::::0;29918:56;;-1:-1:-1;;;29918:56:1;;-1:-1:-1;;;;;29918:4:1;;::::2;::::0;-1:-1:-1;29918:19:1::2;::::0;-1:-1:-1;29918:56:1::2;::::0;29951:8;;29961:12;29918:56:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;30037:5;:8;;;-1:-1:-1::0;;;;;29990:85:1::2;30024:5;:11;;;-1:-1:-1::0;;;;;29990:85:1::2;30011:5;:11;;;-1:-1:-1::0;;;;;29990:85:1::2;;30047:5;:13;;;30062:5;:12;;;29990:85;;;;;;;;30335:1040:::0;9447:23;:21;:23::i;:::-;30476:11;;30464:10:::1;::::0;10353:37:::1;30464:10:::0;30476:11;10353:13:::1;:37::i;:::-;30511:41:::2;30525:5;:11;;;30538:5;:13;;;30511;:41::i;:::-;30503:57;;;;-1:-1:-1::0;;;30503:57:1::2;;;;;;;;;30653:10;::::0;::::2;::::0;-1:-1:-1;;;;;30653:24:1::2;30667:10;30653:24;::::0;30652:57:::2;;;30697:5;:11;;;-1:-1:-1::0;;;;;30683:25:1::2;:5;:10;;;-1:-1:-1::0;;;;;30683:25:1::2;;30652:57;30644:73;;;;-1:-1:-1::0;;;30644:73:1::2;;;;;;;;;30736:9;::::0;30770:11:::2;::::0;::::2;::::0;30736:46:::2;::::0;-1:-1:-1;;;30736:46:1;;-1:-1:-1;;;;;30736:9:1;;::::2;::::0;:33:::2;::::0;:46:::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30728:62;;;;-1:-1:-1::0;;;30728:62:1::2;;;;;;;;;30804:17;30827:47;30847:5;:11;;;30860:5;:13;;;30827:19;:47::i;:::-;30801:73;;;;30889:9;30902:1;30889:14;30885:209;;;30985:12;::::0;::::2;::::0;30968:11:::2;::::0;::::2;::::0;-1:-1:-1;;;;;30951:29:1::2;;::::0;;;:16:::2;:29;::::0;;;;;:47:::2;::::0;::::2;:33;:47;:::i;:::-;30936:11;::::0;::::2;::::0;;-1:-1:-1;;;;;30919:29:1;;::::2;;::::0;;;:16:::2;:29;::::0;;;;;;;:79;;;;31063:11;;31054:21;::::2;::::0;;:8:::2;:21:::0;;;;;;31038:11;;31021:29;;::::2;::::0;;;;;;;;;;:54:::2;;31013:70;;;;-1:-1:-1::0;;;31013:70:1::2;;;;;;;;;31111:11:::0;;-1:-1:-1;;;;;31104:19:1::2;;::::0;;;:6:::2;:19;::::0;;;;;;;31124:13;;::::2;::::0;31104:34;;;;;;;;;31153:11:::2;::::0;::::2;::::0;31166:12:::2;::::0;::::2;::::0;31180:11:::2;::::0;::::2;::::0;31104:88;;-1:-1:-1;;;31104:88:1;;:48:::2;::::0;::::2;::::0;:88:::2;::::0;:34;;31153:11;;31166:12;;31180:11;31104:88:::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;31203:4:1::2;::::0;31223:11:::2;::::0;::::2;::::0;31236:10:::2;::::0;;::::2;::::0;31248:12:::2;::::0;::::2;::::0;31203:58;;-1:-1:-1;;;31203:58:1;;-1:-1:-1;;;;;31203:4:1;;::::2;::::0;-1:-1:-1;31203:19:1::2;::::0;-1:-1:-1;31203:58:1::2;::::0;31236:10;;31248:12;31203:58:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31328:5;:10;;;-1:-1:-1::0;;;;;31277:91:1::2;31315:5;:11;;;-1:-1:-1::0;;;;;31277:91:1::2;31302:5;:11;;;-1:-1:-1::0;;;;;31277:91:1::2;;31340:5;:13;;;31355:5;:12;;;31277:91;;;;;;;;31631:953:::0;9447:23;:21;:23::i;:::-;31774:11;;31762:10:::1;::::0;10353:37:::1;31762:10:::0;31774:11;10353:13:::1;:37::i;:::-;31809:41:::2;31823:5;:11;;;31836:5;:13;;;31809;:41::i;:::-;31801:57;;;;-1:-1:-1::0;;;31801:57:1::2;;;;;;;;;31870:30;;:::i;:::-;31902:17;31925:47;31945:5;:11;;;31958:5;:13;;;31925:19;:47::i;:::-;31869:103;;;;;31987:31;31999:5;:18;;;31987:11;:31::i;:::-;31983:186;;;32034:22;32075:5;:18;;;32094:1;32075:21;;;;;;;;;;;;;;32034:63;;32126:6;-1:-1:-1::0;;;;;32126:22:1::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32120:3;:30;32112:46;;;;-1:-1:-1::0;;;32112:46:1::2;;;;;;;;;31983:186;;32183:9;32196:1;32183:14;32179:124;;;32279:12;::::0;::::2;::::0;32262:11:::2;::::0;::::2;::::0;-1:-1:-1;;;;;32245:29:1::2;;::::0;;;:16:::2;:29;::::0;;;;;:47:::2;::::0;::::2;:33;:47;:::i;:::-;32230:11;::::0;::::2;::::0;-1:-1:-1;;;;;32213:29:1::2;;::::0;;;:16:::2;:29;::::0;;;;:79;32179:124:::2;32320:11:::0;;-1:-1:-1;;;;;32313:19:1::2;;::::0;;;:6:::2;:19;::::0;;;;;;;32333:13;;::::2;::::0;32313:34;;;;;;;;;32365:11:::2;::::0;::::2;::::0;32378:12:::2;::::0;::::2;::::0;32392:11:::2;::::0;::::2;::::0;32313:91;;-1:-1:-1;;;32313:91:1;;:51:::2;::::0;::::2;::::0;:91:::2;::::0;:34;;32365:11;;32378:12;;32392:11;32313:91:::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;32415:4:1::2;::::0;32435:11:::2;::::0;::::2;::::0;32448:8:::2;::::0;;::::2;::::0;32458:12:::2;::::0;::::2;::::0;32415:56;;-1:-1:-1;;;32415:56:1;;-1:-1:-1;;;;;32415:4:1;;::::2;::::0;-1:-1:-1;32415:19:1::2;::::0;-1:-1:-1;32415:56:1::2;::::0;32448:8;;32458:12;32415:56:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;32539:5;:8;;;-1:-1:-1::0;;;;;32487:90:1::2;32526:5;:11;;;-1:-1:-1::0;;;;;32487:90:1::2;32513:5;:11;;;-1:-1:-1::0;;;;;32487:90:1::2;;32549:5;:13;;;32564:5;:12;;;32487:90;;;;;;;;;;;;;;;;10401:1;;9481::::1;;31631:953:::0;:::o;7823:499:26:-;7895:15;;:::i;:::-;7950:26;7930:16;;:46;;;;;;;;;7922:61;;;;-1:-1:-1;;;7922:61:26;;;;;;;;;8001:11;;;;-1:-1:-1;;;;;8001:25:26;7993:40;;;;-1:-1:-1;;;7993:40:26;;;;;;;;32880:659:1;9447:23;:21;:23::i;:::-;33011:11;;32999:10:::1;::::0;10353:37:::1;32999:10:::0;33011:11;10353:13:::1;:37::i;:::-;33046:41:::2;33060:5;:11;;;33073:5;:13;;;33046;:41::i;:::-;33038:57;;;;-1:-1:-1::0;;;33038:57:1::2;;;;;;;;;33113:9;::::0;33143:12:::2;::::0;::::2;::::0;33113:43:::2;::::0;-1:-1:-1;;;33113:43:1;;-1:-1:-1;;;;;33113:9:1;;::::2;::::0;:29:::2;::::0;:43:::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33105:59;;;;-1:-1:-1::0;;;33105:59:1::2;;;;;;;;;33175:22;33216:5;:12;;;33175:54;;33254:6;-1:-1:-1::0;;;;;33254:22:1::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33248:3;:30;33240:46;;;;-1:-1:-1::0;;;33240:46:1::2;;;;;;;;;33304:11:::0;;-1:-1:-1;;;;;33297:19:1::2;;::::0;;;:6:::2;:19;::::0;;;;;;;33317:13;;::::2;::::0;33297:34;;;;;;;;;33341:12:::2;::::0;::::2;::::0;33355::::2;::::0;::::2;::::0;33369:11:::2;::::0;::::2;::::0;33297:84;;-1:-1:-1;;;33297:84:1;;:43:::2;::::0;::::2;::::0;:84:::2;::::0;:34;;33341:12;;33355;;33369:11;33297:84:::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;33410:8:1::2;::::0;;::::2;::::0;33420:12:::2;::::0;::::2;::::0;33392:41;;-1:-1:-1;;;33392:41:1;;-1:-1:-1;;;;;33392:17:1;::::2;::::0;-1:-1:-1;33392:17:1::2;::::0;:41:::2;::::0;33410:8;33392:41:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;33494:5;:8;;;-1:-1:-1::0;;;;;33449:83:1::2;33481:5;:11;;;-1:-1:-1::0;;;;;33449:83:1::2;33467:5;:12;;;-1:-1:-1::0;;;;;33449:83:1::2;;33504:5;:13;;;33519:5;:12;;;33449:83;;;;;;;;8534:501:26::0;8606:15;;:::i;:::-;8661:26;8641:16;;:46;;;;;;;;;8633:61;;;;-1:-1:-1;;;8633:61:26;;;;;;;;;8712:11;;;;-1:-1:-1;;;;;8712:25:26;8704:40;;;;-1:-1:-1;;;8704:40:26;;;;;;;;33827:914:1;9447:23;:21;:23::i;:::-;33958:11;;33946:10:::1;::::0;10353:37:::1;33946:10:::0;33958:11;10353:13:::1;:37::i;:::-;34054:41:::2;34068:5;:11;;;34081:5;:13;;;34054;:41::i;:::-;34046:57;;;;-1:-1:-1::0;;;34046:57:1::2;;;;;;;;;34189:10;::::0;::::2;::::0;-1:-1:-1;;;;;34189:24:1::2;34203:10;34189:24;::::0;34188:57:::2;;;34233:5;:11;;;-1:-1:-1::0;;;;;34219:25:1::2;:5;:10;;;-1:-1:-1::0;;;;;34219:25:1::2;;34188:57;34180:73;;;;-1:-1:-1::0;;;34180:73:1::2;;;;;;;;;34264:22;34305:5;:12;;;34264:54;;34390:6;-1:-1:-1::0;;;;;34390:22:1::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34384:3;:30;34376:46;;;;-1:-1:-1::0;;;34376:46:1::2;;;;;;;;;34476:11:::0;;-1:-1:-1;;;;;34469:19:1::2;;::::0;;;:6:::2;:19;::::0;;;;;;;34489:13;;::::2;::::0;34469:34;;;;;;;;;34516:12:::2;::::0;::::2;::::0;34530::::2;::::0;::::2;::::0;34544:11:::2;::::0;::::2;::::0;34469:87;;-1:-1:-1;;;34469:87:1;;:46:::2;::::0;::::2;::::0;:87:::2;::::0;:34;;34516:12;;34530;;34544:11;34469:87:::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;34608:10:1::2;::::0;;::::2;::::0;34620:12:::2;::::0;::::2;::::0;34590:43;;-1:-1:-1;;;34590:43:1;;-1:-1:-1;;;;;34590:17:1;::::2;::::0;-1:-1:-1;34590:17:1::2;::::0;:43:::2;::::0;34608:10;34590:43:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34694:5;:10;;;-1:-1:-1::0;;;;;34649:85:1::2;34681:5;:11;;;-1:-1:-1::0;;;;;34649:85:1::2;34667:5;:12;;;-1:-1:-1::0;;;;;34649:85:1::2;;34706:5;:13;;;34721:5;:12;;;34649:85;;;;;;;;10956:326:26::0;11030:17;;:::i;:::-;11087;11067:16;;:37;;;;;;;;;11059:53;;;;-1:-1:-1;;;11059:53:26;;;;;;;;;11130:19;;;;-1:-1:-1;;;;;11130:33:26;11122:49;;;;-1:-1:-1;;;11122:49:26;;;;;;;;;-1:-1:-1;11189:86:26;;;;;;;;;11211:19;;;;-1:-1:-1;;;;;11189:86:26;;;;;11240:11;;;;11189:86;;;;;11261:12;;;;;11189:86;;;;;10956:326::o;34965:827:1:-;35075:12;;;;35161:9;;:43;;-1:-1:-1;;;35161:43:1;;-1:-1:-1;;;;;35161:9:1;;;;:29;;:43;;35075:12;;35161:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35153:59;;;;-1:-1:-1;;;35153:59:1;;;;;;;;;35224:18;35244;35264:14;35280;35298:34;35324:6;35298:17;:34::i;:::-;35223:109;;;;;;;;35405:6;35398:3;:13;;35390:29;;;;-1:-1:-1;;;35390:29:1;;;;;;;;;35438:56;35455:10;35467:6;35475:10;35487:6;35438:16;:56::i;:::-;35430:72;;;;-1:-1:-1;;;35430:72:1;;;;;;;;;35513:14;35530:37;35540:5;:12;;;35554:5;:12;;;35530:9;:37::i;:::-;35513:54;;35578:6;-1:-1:-1;;;;;35578:17:1;;35596:10;35608:5;:12;;;35578:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35632:4:1;;35664:14;;35632:55;;-1:-1:-1;;;35632:55:1;;-1:-1:-1;;;;;35632:4:1;;;;-1:-1:-1;35632:19:1;;-1:-1:-1;35632:55:1;;35652:10;;35664:14;35680:6;;35632:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35736:5;:14;;;-1:-1:-1;;;;;35703:82:1;35724:10;-1:-1:-1;;;;;35703:82:1;35710:5;:12;;;-1:-1:-1;;;;;35703:82:1;;35752:10;35764:5;:12;;;35778:6;35703:82;;;;;;;;;;;;;;;;;34965:827;;;;;;;:::o;11510:392:26:-;11589:22;;:::i;:::-;11651;11631:16;;:42;;;;;;;;;11623:58;;;;-1:-1:-1;;;11623:58:26;;;;;;;;;11699:11;;;;-1:-1:-1;;;;;11699:25:26;11691:41;;;;-1:-1:-1;;;11691:41:26;;;;;;;;;11750:19;;;;-1:-1:-1;;;;;11750:33:26;11742:49;;;;-1:-1:-1;;;11742:49:26;;;;;;;;;11809:86;;;;;;;;11833:5;:11;;;-1:-1:-1;;;;;11809:86:26;;;;;11855:5;:13;;;11809:86;;;;11874:5;:19;;;-1:-1:-1;;;;;11809:86:26;;;;11802:93;;11510:392;;;:::o;36120:2143:1:-;36216:11;;36204:10;;10353:37;36204:10;36216:11;10353:13;:37::i;:::-;36247:41:::1;36261:5;:11;;;36274:5;:13;;;36247;:41::i;:::-;36239:57;;;;-1:-1:-1::0;;;36239:57:1::1;;;;;;;;;36308:30;;:::i;:::-;36340:17;36363:47;36383:5;:11;;;36396:5;:13;;;36363:19;:47::i;:::-;36307:103;;;;;36421:22;36751:13:::0;36767:31:::1;36779:5;:18;;;36767:11;:31::i;:::-;36751:47;;36812:12;36827:30;36839:5;:17;;;36827:11;:30::i;:::-;36812:45;;36880:8;:19;;;;36892:7;36880:19;36872:35;;;;-1:-1:-1::0;;;36872:35:1::1;;;;;;;;;36931:8;:89;;36999:5;:17;;;37017:1;36999:20;;;;;;;;;;;;;;36931:89;;;36958:18:::0;;:21;;:18:::1;::::0;:21:::1;;;;;;;;;;36931:89;36922:98;;37039:7;37035:189;;;37066:26;37111:5;:17;;;37129:1;37111:20;;;;;;;;;;;;;;37066:66;;37151:10;-1:-1:-1::0;;;;;37151:21:1::1;;37181:4;;;;;;;;;-1:-1:-1::0;;;;;37181:4:1::1;37188:5;:17;;;37206:1;37188:20;;;;;;;;;;;;;;37151:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37035:189;;10401:1;;37245:18;37265::::0;37285:14:::1;37301::::0;37319:34:::1;37345:6;37319:17;:34::i;:::-;37244:109;;;;;;;;37441:6;37434:3;:13;;37426:29;;;;-1:-1:-1::0;;;37426:29:1::1;;;;;;;;;37473:56;37490:10;37502:6;37510:10;37522:6;37473:16;:56::i;:::-;37465:72;;;;-1:-1:-1::0;;;37465:72:1::1;;;;;;;;;37586:10;::::0;:48:::1;::::0;-1:-1:-1;;;37586:48:1;;37549:14:::1;::::0;;;-1:-1:-1;;;;;37586:10:1;;::::1;::::0;:30:::1;::::0;:48:::1;::::0;37617:5;;37624:9;;37586:48:::1;;;;;;::::0;::::1;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37548:86;;;;37809:12;37801:28;;;;-1:-1:-1::0;;;37801:28:1::1;;;;;;;;;37847:6;:19;37854:5;:11;;;-1:-1:-1::0;;;;;37847:19:1::1;-1:-1:-1::0;;;;;37847:19:1::1;;;;;;;;;;;;:34;37867:5;:13;;;37847:34;;;;;;;;;;;;37840:41:::0;::::1;;;;;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;37896:9;37909:1;37896:14;37892:116;;;-1:-1:-1::0;;;;;37957:28:1;::::1;;::::0;;;:16:::1;:28;::::0;;;;;:40:::1;::::0;37990:6;37957:40:::1;:32;:40;:::i;:::-;-1:-1:-1::0;;;;;37926:28:1;::::1;;::::0;;;:16:::1;:28;::::0;;;;:71;37892:116:::1;38018:4;::::0;38050:8:::1;::::0;;::::1;::::0;38018:49;;-1:-1:-1;;;38018:49:1;;-1:-1:-1;;;;;38018:4:1;;::::1;::::0;:19:::1;::::0;:49:::1;::::0;38038:10;;38050:8;38060:6;;38018:49:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38078:15;38096:5;:13;;;38078:31;;38119:23;38145:5;:8;;;38119:34;;38246:9;38203:6;-1:-1:-1::0;;;;;38169:87:1::1;38182:5;:11;;;-1:-1:-1::0;;;;;38169:87:1::1;;38212:15;38229:6;38237:7;38169:87;;;;;;;;;;;;;;;;;10401:1;;;;;;;;;;;36120:2143:::0;;;:::o;11908:700:26:-;11985:20;;:::i;:::-;12045;12025:16;;:40;;;;;;;;;12017:56;;;;-1:-1:-1;;;12017:56:26;;;;;;;;;12091:11;;;;-1:-1:-1;;;;;12091:25:26;12083:41;;;;-1:-1:-1;;;12083:41:26;;;;;;;;;12142:19;;;;-1:-1:-1;;;;;12142:33:26;12134:49;;;;-1:-1:-1;;;12134:49:26;;;;;;;;;12201:5;:10;;;:17;12222:2;12201:23;12193:39;;;;-1:-1:-1;;;12193:39:26;;;;;;;;;12296:15;12325:5;:10;;;12314:33;;;;;;;;;;;;;;12296:51;;12377:224;;;;;;;;12416:5;:11;;;-1:-1:-1;;;;;12377:224:26;;;;;12455:5;:19;;;-1:-1:-1;;;;;12377:224:26;;;;;12501:5;:13;;;12377:224;;;;12540:5;:12;;;12377:224;;;;12579:7;12377:224;;;12358:243;;;11908:700;;;:::o;38458:2361:1:-;9447:23;:21;:23::i;:::-;38560:41:::1;38574:5;:11;;;38587:5;:13;;;38560;:41::i;:::-;38552:57;;;;-1:-1:-1::0;;;38552:57:1::1;;;;;;;;;38884:30;;:::i;:::-;38916:18;38936:13:::0;38951:22:::1;38977:104;39006:5;:11;;;39031:5;:13;;;39058:5;:13;;;38977:15;:104::i;:::-;38883:198;;;;;;;;39100:13;39092:29;;;;-1:-1:-1::0;;;39092:29:1::1;;;;;;;;;39187:24;39214:32;39242:3;39214:23;39231:5;39214;:12;;;:16;;:23;;;;:::i;:32::-;39187:59;;39476:1;39434:39;39460:5;:12;;;39434:5;:18;;;39453:1;39434:21;;;;;;;;;;;;;;:25;;:39;;;;:::i;:::-;:43;39430:156;;;39553:14;39501:48;39532:16;39501:5;:23;;;39525:1;39501:26;;;;;;;:48;:66;;39493:82;;;;-1:-1:-1::0;;;39493:82:1::1;;;;;;;;;39798:18:::0;;:21;;:18:::1;::::0;:21:::1;;;;;;;;;;-1:-1:-1::0;;;;;39782:49:1::1;;39832:10;39844:5;:12;;;39782:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39987:11:1;;-1:-1:-1;;;;;39980:19:1::1;;::::0;;;:6:::1;:19;::::0;;;;;;;40000:13;;::::1;::::0;39980:34;;;;;;;;40032:22;;::::1;::::0;:25;;39980:51:::1;::::0;-1:-1:-1;39980:51:1::1;::::0;-1:-1:-1;39980:34:1;;40032:22;;:25:::1;;;;;;;;;;40059:16;40077:1;39980:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;40213:11:1;;-1:-1:-1;;;;;40206:19:1::1;;::::0;;;:6:::1;:19;::::0;;;;;;;40226:13;;::::1;::::0;40206:34;;;;;;;40253:18;;:21;;40206:46:::1;::::0;-1:-1:-1;40206:46:1::1;::::0;-1:-1:-1;40206:34:1;;40253:18;;:21:::1;;;;;;;;;;40276:5;:12;;;40290:1;40206:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40409:65;40457:16;40409;:43;40426:5;:22;;;40449:1;40426:25;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40409:43:1::1;-1:-1:-1::0;;;;;40409:43:1::1;;;;;;;;;;;;;:47;;:65;;;;:::i;:::-;40363:16;:43;40380:5;:22;;;40403:1;40380:25;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40363:43:1::1;-1:-1:-1::0;;;;;40363:43:1::1;;;;;;;;;;;;:111;;;;40485:4;;;;;;;;;-1:-1:-1::0;;;;;40485:4:1::1;-1:-1:-1::0;;;;;40485:19:1::1;;40505:5;:22;;;40528:1;40505:25;;;;;;;;;;;;;;40532:5;:14;;;40548:16;40485:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40662:5;:11;;;-1:-1:-1::0;;;;;40581:231:1::1;40634:5;:14;;;-1:-1:-1::0;;;;;40581:231:1::1;40610:10;-1:-1:-1::0;;;;;40581:231:1::1;;40687:5;40706;:13;;;40733:16;40763:5;:12;;;40789:5;:13;;;40581:231;;;;;;;;;;;;;;;;;;;9481:1;;;;;38458:2361:::0;:::o;12820:291:26:-;12892:15;;:::i;:::-;12947;12927:16;;:35;;;;;;;;;12919:51;;;;-1:-1:-1;;;12919:51:26;;;;;;;;;12988:19;;;;-1:-1:-1;;;;;12988:33:26;12980:49;;;;-1:-1:-1;;;12980:49:26;;;;;;;;;-1:-1:-1;13047:57:26;;;;;;;;13065:19;;;;-1:-1:-1;;;;;13047:57:26;;;13092:10;;;;;13047:57;;;;;12820:291::o;40987:259:1:-;9447:23;:21;:23::i;:::-;41083:12;;10617:14:::1;::::0;-1:-1:-1;;;10617:14:1;::::1;;;10613:89;;;10655:29;10676:7;10655:20;:29::i;:::-;10647:44;;;;-1:-1:-1::0;;;10647:44:1::1;;;;;;;;;41123:12:::0;;41162:10:::2;::::0;::::2;::::0;41107:66:::2;::::0;-1:-1:-1;;;41107:66:1;;-1:-1:-1;;;;;41107:42:1;;::::2;::::0;::::2;::::0;:66:::2;::::0;41150:10:::2;::::0;41162;41107:66:::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;41214:5;:12;;;-1:-1:-1::0;;;;;41189:50:1::2;41202:10;-1:-1:-1::0;;;;;41189:50:1::2;;41228:5;:10;;;41189:50;;;;;;;10808:101:::0;10874:21;;-1:-1:-1;;;10874:21:1;;;;10873:22;10865:37;;;;-1:-1:-1;;;10865:37:1;;;;;;;;11245:174;11352:13;-1:-1:-1;;;;;11341:24:1;:7;-1:-1:-1;;;;;11341:24:1;;11340:65;;;-1:-1:-1;;;;;;11371:24:1;;;;;;;:9;:24;;;;;;;;:33;;;;;;;;;;;;11340:65;11332:80;;;;-1:-1:-1;;;11332:80:1;;;;;;;;922:176:51;980:7;1011:5;;;1034:6;;;;1026:46;;;;-1:-1:-1;;;1026:46:51;;;;;;;;41496:185:1;41583:4;41619:1;41608:8;:12;41607:66;;;;-1:-1:-1;;;;;;;41638:34:1;;;;;;;;:19;:34;;;;;;-1:-1:-1;41626:46:1;;41496:185::o;41687:147::-;41756:4;41796:1;41780:6;:13;:17;41779:48;;;;;41824:1;-1:-1:-1;;;;;41803:23:1;:6;41810:1;41803:9;;;;;;;;;;;;;;-1:-1:-1;;;;;41803:23:1;;;41772:55;41687:147;-1:-1:-1;;41687:147:1:o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;42024:138:1:-;42117:9;;:38;;-1:-1:-1;;;42117:38:1;;42094:4;;-1:-1:-1;;;;;42117:9:1;;:29;;:38;;42147:7;;42117:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1780:217:51;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;5:130;72:20;;97:33;72:20;97:33;;1356:440;;1457:3;1450:4;1442:6;1438:17;1434:27;1424:2;;-1:-1;;1465:12;1424:2;1512:6;1499:20;76557:18;76549:6;76546:30;76543:2;;;-1:-1;;76579:12;76543:2;1534:64;76652:9;76633:17;;-1:-1;;76629:33;76720:4;76710:15;1534:64;;;1525:73;;1618:6;1611:5;1604:21;1722:3;76720:4;1713:6;1646;1704:16;;1701:25;1698:2;;;1739:1;;1729:12;1698:2;81258:6;76720:4;1646:6;1642:17;76720:4;1680:5;1676:16;81235:30;81314:1;81296:16;;;76720:4;81296:16;81289:27;1680:5;1417:379;-1:-1;;1417:379;1804:160;1886:20;;82038:2;82028:13;;82018:2;;82055:1;;82045:12;3763:241;;3867:2;3855:9;3846:7;3842:23;3838:32;3835:2;;;-1:-1;;3873:12;3835:2;85:6;72:20;97:33;124:5;97:33;;4011:263;;4126:2;4114:9;4105:7;4101:23;4097:32;4094:2;;;-1:-1;;4132:12;4094:2;226:6;220:13;238:33;265:5;238:33;;4281:366;;;4402:2;4390:9;4381:7;4377:23;4373:32;4370:2;;;-1:-1;;4408:12;4370:2;85:6;72:20;97:33;124:5;97:33;;;4460:63;-1:-1;4560:2;4599:22;;72:20;97:33;72:20;97:33;;;4568:63;;;;4364:283;;;;;;4654:617;;;;;4809:3;4797:9;4788:7;4784:23;4780:33;4777:2;;;-1:-1;;4816:12;4777:2;85:6;72:20;97:33;124:5;97:33;;;4868:63;-1:-1;4968:2;5007:22;;72:20;97:33;72:20;97:33;;;4976:63;-1:-1;5076:2;5115:22;;72:20;97:33;72:20;97:33;;;4771:500;;;;-1:-1;5084:63;;5184:2;5223:22;3552:20;;-1:-1;;4771:500;5278:940;;;;;;;5475:3;5463:9;5454:7;5450:23;5446:33;5443:2;;;-1:-1;;5482:12;5443:2;226:6;220:13;238:33;265:5;238:33;;;5645:2;5695:22;;220:13;5534:74;;-1:-1;238:33;220:13;238:33;;;5764:2;5814:22;;220:13;5653:74;;-1:-1;238:33;220:13;238:33;;;5772:74;;;;5883:2;5937:9;5933:22;3700:13;5891:74;;6002:3;6057:9;6053:22;3700:13;6011:74;;6122:3;6174:9;6170:22;1295:13;1313:30;1337:5;1313:30;;;6131:71;;;;5437:781;;;;;;;;;6225:360;;;6343:2;6331:9;6322:7;6318:23;6314:32;6311:2;;;-1:-1;;6349:12;6311:2;85:6;72:20;97:33;124:5;97:33;;;6401:63;-1:-1;6501:2;6537:22;;1153:20;1178:30;1153:20;1178:30;;6592:366;;;6713:2;6701:9;6692:7;6688:23;6684:32;6681:2;;;-1:-1;;6719:12;6681:2;85:6;72:20;97:33;124:5;97:33;;;6771:63;6871:2;6910:22;;;;3552:20;;-1:-1;;;6675:283;6965:491;;;;7103:2;7091:9;7082:7;7078:23;7074:32;7071:2;;;-1:-1;;7109:12;7071:2;85:6;72:20;97:33;124:5;97:33;;;7161:63;7261:2;7300:22;;3552:20;;-1:-1;7369:2;7408:22;;;3552:20;;7065:391;-1:-1;;;7065:391;7463:433;;7620:2;;7608:9;7599:7;7595:23;7591:32;7588:2;;;-1:-1;;7626:12;7588:2;7684:17;7671:31;7722:18;;7714:6;7711:30;7708:2;;;-1:-1;;7744:12;7708:2;7863:6;7852:9;7848:22;464:3;457:4;449:6;445:17;441:27;431:2;;-1:-1;;472:12;431:2;519:6;506:20;492:34;;7722:18;76254:6;76251:30;76248:2;;;-1:-1;;76284:12;76248:2;541:108;7620:2;;76321:6;76317:17;76382:15;541:108;;;677:21;;;734:14;;;;709:17;;;-1:-1;814:261;839:6;836:1;833:13;814:261;;;922:3;909:17;713:6;897:30;2120:6;;76652:9;;897:30;2103:3;2099:19;;2095:32;2092:2;;;-1:-1;;2130:12;2092:2;2158:22;2120:6;2158:22;;;2268:64;2328:3;7620:2;897:30;;2268:64;;;2250:16;2243:90;2428:49;2473:3;2449:22;897:30;2449:22;2428:49;;;7620:2;2414:5;2410:16;2403:75;2602:22;2581:49;2626:3;2602:22;897:30;2602:22;2581:49;;;2449:22;2567:5;2563:16;2556:75;2726:49;2771:3;2747:22;897:30;2747:22;2726:49;;;2602:22;2712:5;2708:16;2701:75;;2895:22;897:30;2895:22;3552:20;2747:22;2860:5;2856:16;2849:75;3042:22;897:30;3042:22;3552:20;2895:22;3007:5;3003:16;2996:75;3188:22;897:30;3188:22;3552:20;3042:22;3153:5;3149:16;3142:75;2120:6;897:30;3291:19;3278:33;7722:18;3323:6;3320:30;3317:2;;;-1:-1;;3353:12;3317:2;3398:58;3452:3;7620:2;3443:6;897:30;3428:22;;3398:58;;;3188:22;3380:16;;3373:84;-1:-1;934:78;;-1:-1;;1026:14;;;;1054;;;;861:1;854:9;814:261;;;-1:-1;7764:116;;7582:314;-1:-1;;;;;;;;;7582:314;7903:235;;8004:2;7992:9;7983:7;7979:23;7975:32;7972:2;;;-1:-1;;8010:12;7972:2;1166:6;1153:20;1178:30;1202:5;1178:30;;8145:257;;8257:2;8245:9;8236:7;8232:23;8228:32;8225:2;;;-1:-1;;8263:12;8225:2;1301:6;1295:13;1313:30;1337:5;1313:30;;8409:529;;;;8555:2;8543:9;8534:7;8530:23;8526:32;8523:2;;;-1:-1;;8561:12;8523:2;1301:6;1295:13;1313:30;1337:5;1313:30;;;8721:2;8771:22;;3700:13;8840:2;8890:22;;;3700:13;8613:71;;3700:13;;-1:-1;3700:13;8517:421;-1:-1;;;8517:421;8945:263;;9060:2;9048:9;9039:7;9035:23;9031:32;9028:2;;;-1:-1;;9066:12;9028:2;-1:-1;3700:13;;9022:186;-1:-1;9022:186;9215:393;;;9344:2;9332:9;9323:7;9319:23;9315:32;9312:2;;;-1:-1;;9350:12;9312:2;3706:6;3700:13;9402:74;;9513:2;9564:9;9560:22;1295:13;1313:30;1337:5;1313:30;;10661:670;;10844:5;77161:12;77954:6;77949:3;77942:19;77991:4;;77986:3;77982:14;10856:83;;77991:4;11010:5;76857:14;-1:-1;11049:260;11074:6;11071:1;11068:13;11049:260;;;11135:13;;-1:-1;;;;;78888:54;10215:45;;9769:14;;;;77692;;;;76557:18;11089:9;11049:260;;;-1:-1;11315:10;;10775:556;-1:-1;;;;;10775:556;11370:670;;11553:5;77161:12;77954:6;77949:3;77942:19;77991:4;;77986:3;77982:14;11565:83;;77991:4;11719:5;76857:14;-1:-1;11758:260;11783:6;11780:1;11777:13;11758:260;;;11844:13;;36753:18;;9951:14;;;;77692;;;;11805:1;11798:9;11758:260;;12159:343;;12301:5;77161:12;77954:6;77949:3;77942:19;-1:-1;81403:101;81417:6;81414:1;81411:13;81403:101;;;77991:4;81484:11;;;;;81478:18;81465:11;;;;;81458:39;81432:10;81403:101;;;81519:6;81516:1;81513:13;81510:2;;;-1:-1;77991:4;81575:6;77986:3;81566:16;;81559:27;81510:2;-1:-1;76652:9;81675:14;-1:-1;;81671:28;12458:39;;;;77991:4;12458:39;;12249:253;-1:-1;;12249:253;34842:1800;;35071:16;35065:23;34991:4;35108:14;35101:38;35154:103;34991:4;34986:3;34982:14;35238:12;35154:103;;;35349:4;35342:5;35338:16;35332:23;35312:43;;35401:3;35395:4;35391:14;35349:4;35379:3;35375:14;35368:38;35421:103;35519:4;35505:12;35421:103;;;35621:4;35614:5;35610:16;35604:23;35584:43;;35673:3;35667:4;35663:14;35621:4;35651:3;35647:14;35640:38;35693:103;35791:4;35777:12;35693:103;;;35685:111;;;35889:4;35882:5;35878:16;35872:23;35852:43;;35941:3;35935:4;35931:14;35889:4;35919:3;35915:14;35908:38;35961:103;36059:4;36045:12;35961:103;;;36156:4;36149:5;36145:16;36139:23;36119:43;;36208:3;36202:4;36198:14;36156:4;36186:3;36182:14;36175:38;36228:103;36326:4;36312:12;36228:103;;;36220:111;;;36429:4;36422:5;36418:16;36412:23;36392:43;;36481:3;36475:4;36471:14;36429:4;36459:3;36455:14;36448:38;36501:103;36599:4;36585:12;36501:103;;37141:222;-1:-1;;;;;78888:54;;;;10215:45;;37268:2;37253:18;;37239:124;37370:449;-1:-1;;;;;78888:54;;10215:45;;37559:2;37693;37678:18;;37671:48;;;37370:449;;37733:76;;37544:18;;37795:6;37733:76;;;37725:84;37530:289;-1:-1;;;;37530:289;37826:349;-1:-1;;;;;78888:54;;;;10058:58;;38161:2;38146:18;;36753;37989:2;37974:18;;37960:215;38182:460;-1:-1;;;;;78888:54;;;10215:45;;78888:54;;;;38545:2;38530:18;;10058:58;38628:2;38613:18;;36753;;;;38373:2;38358:18;;38344:298;38649:556;-1:-1;;;;;78888:54;;;10215:45;;78888:54;;;39025:2;39010:18;;10215:45;78888:54;;;39108:2;39093:18;;10215:45;78888:54;;;39191:2;39176:18;;10215:45;38860:3;38845:19;;38831:374;40003:444;-1:-1;;;;;78888:54;;;;10215:45;;40350:2;40335:18;;36753;;;;40433:2;40418:18;;36753;40186:2;40171:18;;40157:290;40454:210;78800:13;;78793:21;12113:34;;40575:2;40560:18;;40546:118;40671:432;78800:13;;78793:21;12113:34;;41006:2;40991:18;;36753;;;;41089:2;41074:18;;36753;40848:2;40833:18;;40819:284;41110:306;;41255:2;41276:17;41269:47;41330:76;41255:2;41244:9;41240:18;41392:6;41330:76;;43169:416;43369:2;43383:47;;;14194:1;43354:18;;;77942:19;-1:-1;;;77982:14;;;14209:25;14253:12;;;43340:245;43592:416;43792:2;43806:47;;;14504:1;43777:18;;;77942:19;-1:-1;;;77982:14;;;14519:26;14564:12;;;43763:245;44015:416;44215:2;44229:47;;;14815:1;44200:18;;;77942:19;-1:-1;;;77982:14;;;14830:26;14875:12;;;44186:245;44438:416;44638:2;44652:47;;;15126:1;44623:18;;;77942:19;-1:-1;;;77982:14;;;15141:26;15186:12;;;44609:245;44861:416;45061:2;45075:47;;;15437:1;45046:18;;;77942:19;-1:-1;;;77982:14;;;15452:26;15497:12;;;45032:245;45284:416;45484:2;45498:47;;;15748:1;45469:18;;;77942:19;-1:-1;;;77982:14;;;15763:26;15808:12;;;45455:245;45707:416;45907:2;45921:47;;;16059:1;45892:18;;;77942:19;-1:-1;;;77982:14;;;16074:26;16119:12;;;45878:245;46130:416;46330:2;46344:47;;;16370:1;46315:18;;;77942:19;-1:-1;;;77982:14;;;16385:25;16429:12;;;46301:245;46553:416;46753:2;46767:47;;;16680:1;46738:18;;;77942:19;-1:-1;;;77982:14;;;16695:26;16740:12;;;46724:245;46976:416;47176:2;47190:47;;;16991:2;47161:18;;;77942:19;17027:34;77982:14;;;17007:55;-1:-1;;;17082:12;;;17075:30;17124:12;;;47147:245;47399:416;47599:2;47613:47;;;17375:1;47584:18;;;77942:19;-1:-1;;;77982:14;;;17390:25;17434:12;;;47570:245;47822:416;48022:2;48036:47;;;17685:1;48007:18;;;77942:19;-1:-1;;;77982:14;;;17700:26;17745:12;;;47993:245;48245:416;48445:2;48459:47;;;17996:2;48430:18;;;77942:19;18032:29;77982:14;;;18012:50;18081:12;;;48416:245;48668:416;48868:2;48882:47;;;18332:1;48853:18;;;77942:19;-1:-1;;;77982:14;;;18347:26;18392:12;;;48839:245;49091:416;49291:2;49305:47;;;18643:1;49276:18;;;77942:19;-1:-1;;;77982:14;;;18658:26;18703:12;;;49262:245;49514:416;49714:2;49728:47;;;18954:1;49699:18;;;77942:19;-1:-1;;;77982:14;;;18969:26;19014:12;;;49685:245;49937:416;50137:2;50151:47;;;19265:1;50122:18;;;77942:19;-1:-1;;;77982:14;;;19280:26;19325:12;;;50108:245;50360:416;50560:2;50574:47;;;19576:1;50545:18;;;77942:19;-1:-1;;;77982:14;;;19591:25;19635:12;;;50531:245;50783:416;50983:2;50997:47;;;19886:1;50968:18;;;77942:19;-1:-1;;;77982:14;;;19901:26;19946:12;;;50954:245;51206:416;51406:2;51420:47;;;20197:1;51391:18;;;77942:19;-1:-1;;;77982:14;;;20212:26;20257:12;;;51377:245;51629:416;51829:2;51843:47;;;20508:1;51814:18;;;77942:19;-1:-1;;;77982:14;;;20523:26;20568:12;;;51800:245;52052:416;52252:2;52266:47;;;20819:1;52237:18;;;77942:19;-1:-1;;;77982:14;;;20834:25;20878:12;;;52223:245;52475:416;52675:2;52689:47;;;21129:1;52660:18;;;77942:19;-1:-1;;;77982:14;;;21144:25;21188:12;;;52646:245;52898:416;53098:2;53112:47;;;21439:1;53083:18;;;77942:19;-1:-1;;;77982:14;;;21454:26;21499:12;;;53069:245;53321:416;53521:2;53535:47;;;21750:1;53506:18;;;77942:19;-1:-1;;;77982:14;;;21765:26;21810:12;;;53492:245;53744:416;53944:2;53958:47;;;22061:1;53929:18;;;77942:19;-1:-1;;;77982:14;;;22076:26;22121:12;;;53915:245;54167:416;54367:2;54381:47;;;22372:1;54352:18;;;77942:19;-1:-1;;;77982:14;;;22387:26;22432:12;;;54338:245;54590:416;54790:2;54804:47;;;22683:1;54775:18;;;77942:19;-1:-1;;;77982:14;;;22698:26;22743:12;;;54761:245;55013:416;55213:2;55227:47;;;22994:1;55198:18;;;77942:19;-1:-1;;;77982:14;;;23009:26;23054:12;;;55184:245;55436:416;55636:2;55650:47;;;23305:1;55621:18;;;77942:19;-1:-1;;;77982:14;;;23320:25;23364:12;;;55607:245;55859:416;56059:2;56073:47;;;23615:1;56044:18;;;77942:19;-1:-1;;;77982:14;;;23630:26;23675:12;;;56030:245;56282:416;56482:2;56496:47;;;23926:1;56467:18;;;77942:19;-1:-1;;;77982:14;;;23941:26;23986:12;;;56453:245;56705:416;56905:2;56919:47;;;24237:1;56890:18;;;77942:19;-1:-1;;;77982:14;;;24252:26;24297:12;;;56876:245;57128:416;57328:2;57342:47;;;24548:1;57313:18;;;77942:19;-1:-1;;;77982:14;;;24563:26;24608:12;;;57299:245;57551:416;57751:2;57765:47;;;24859:1;57736:18;;;77942:19;-1:-1;;;77982:14;;;24874:25;24918:12;;;57722:245;57974:416;58174:2;58188:47;;;25169:1;58159:18;;;77942:19;-1:-1;;;77982:14;;;25184:26;25229:12;;;58145:245;58397:416;58597:2;58611:47;;;25480:2;58582:18;;;77942:19;25516:34;77982:14;;;25496:55;-1:-1;;;25571:12;;;25564:25;25608:12;;;58568:245;58820:416;59020:2;59034:47;;;25859:1;59005:18;;;77942:19;-1:-1;;;77982:14;;;25874:26;25919:12;;;58991:245;59243:416;59443:2;59457:47;;;59428:18;;;77942:19;26206:34;77982:14;;;26186:55;26260:12;;;59414:245;59666:416;59866:2;59880:47;;;26511:1;59851:18;;;77942:19;-1:-1;;;77982:14;;;26526:26;26571:12;;;59837:245;60089:416;60289:2;60303:47;;;26822:2;60274:18;;;77942:19;26858:34;77982:14;;;26838:55;-1:-1;;;26913:12;;;26906:38;26963:12;;;60260:245;60512:416;60712:2;60726:47;;;27214:1;60697:18;;;77942:19;-1:-1;;;77982:14;;;27229:26;27274:12;;;60683:245;60935:416;61135:2;61149:47;;;27525:1;61120:18;;;77942:19;-1:-1;;;77982:14;;;27540:26;27585:12;;;61106:245;61358:416;61558:2;61572:47;;;27836:1;61543:18;;;77942:19;-1:-1;;;77982:14;;;27851:26;27896:12;;;61529:245;61781:416;61981:2;61995:47;;;28147:1;61966:18;;;77942:19;-1:-1;;;77982:14;;;28162:26;28207:12;;;61952:245;62204:416;62404:2;62418:47;;;28458:1;62389:18;;;77942:19;-1:-1;;;77982:14;;;28473:26;28518:12;;;62375:245;62627:416;62827:2;62841:47;;;28769:1;62812:18;;;77942:19;-1:-1;;;77982:14;;;28784:26;28829:12;;;62798:245;63050:416;63250:2;63264:47;;;29080:1;63235:18;;;77942:19;-1:-1;;;77982:14;;;29095:25;29139:12;;;63221:245;63473:416;63673:2;63687:47;;;29390:1;63658:18;;;77942:19;-1:-1;;;77982:14;;;29405:25;29449:12;;;63644:245;63896:416;64096:2;64110:47;;;29700:1;64081:18;;;77942:19;-1:-1;;;77982:14;;;29715:26;29760:12;;;64067:245;64319:416;64519:2;64533:47;;;30011:1;64504:18;;;77942:19;-1:-1;;;77982:14;;;30026:25;30070:12;;;64490:245;64742:416;64942:2;64956:47;;;30321:1;64927:18;;;77942:19;-1:-1;;;77982:14;;;30336:26;30381:12;;;64913:245;65165:416;65365:2;65379:47;;;30632:1;65350:18;;;77942:19;-1:-1;;;77982:14;;;30647:26;30692:12;;;65336:245;65588:416;65788:2;65802:47;;;30943:1;65773:18;;;77942:19;-1:-1;;;77982:14;;;30958:26;31003:12;;;65759:245;66011:416;66211:2;66225:47;;;31254:1;66196:18;;;77942:19;-1:-1;;;77982:14;;;31269:26;31314:12;;;66182:245;66434:416;66634:2;66648:47;;;31565:1;66619:18;;;77942:19;-1:-1;;;77982:14;;;31580:25;31624:12;;;66605:245;66857:416;67057:2;67071:47;;;31875:1;67042:18;;;77942:19;-1:-1;;;77982:14;;;31890:25;31934:12;;;67028:245;67280:416;67480:2;67494:47;;;32185:1;67465:18;;;77942:19;-1:-1;;;77982:14;;;32200:25;32244:12;;;67451:245;67703:416;67903:2;67917:47;;;32495:1;67888:18;;;77942:19;-1:-1;;;77982:14;;;32510:26;32555:12;;;67874:245;68126:416;68326:2;68340:47;;;32806:1;68311:18;;;77942:19;-1:-1;;;77982:14;;;32821:25;32865:12;;;68297:245;68549:416;68749:2;68763:47;;;33116:1;68734:18;;;77942:19;-1:-1;;;77982:14;;;33131:26;33176:12;;;68720:245;68972:416;69172:2;69186:47;;;33427:1;69157:18;;;77942:19;-1:-1;;;77982:14;;;33442:26;33487:12;;;69143:245;69395:416;69595:2;69609:47;;;33738:2;69580:18;;;77942:19;33774:33;77982:14;;;33754:54;33827:12;;;69566:245;69818:416;70018:2;70032:47;;;34078:1;70003:18;;;77942:19;-1:-1;;;77982:14;;;34093:25;34137:12;;;69989:245;70241:416;70441:2;70455:47;;;34388:1;70426:18;;;77942:19;-1:-1;;;77982:14;;;34403:25;34447:12;;;70412:245;70664:416;70864:2;70878:47;;;34698:1;70849:18;;;77942:19;-1:-1;;;77982:14;;;34713:25;34757:12;;;70835:245;71087:366;;71262:2;71283:17;71276:47;71337:106;71262:2;71251:9;71247:18;71429:6;71337:106;;71460:477;;71663:2;71684:17;71677:47;71738:106;71663:2;71652:9;71648:18;71830:6;71738:106;;;71730:114;;36765:5;71923:2;71912:9;71908:18;36753;71634:303;;;;;;71944:588;;72175:2;72196:17;72189:47;72250:106;72175:2;72164:9;72160:18;72342:6;72250:106;;;72435:2;72420:18;;36753;;;;-1:-1;72518:2;72503:18;36753;72242:114;72146:386;-1:-1;72146:386;72539:700;;72798:3;72820:17;72813:47;72874:106;72798:3;72787:9;72783:19;72966:6;72874:106;;;73059:2;73044:18;;36753;;;;-1:-1;73142:2;73127:18;;36753;;;;73225:2;73210:18;;;36753;72866:114;72769:470;-1:-1;72769:470;73246:662;36753:18;;;-1:-1;;;;;78888:54;;;;73704:2;73689:18;;10215:45;73795:2;73780:18;;36753;73894:2;73879:18;;13545:58;73498:3;73483:19;;73469:439;74568:222;36753:18;;;74695:2;74680:18;;74666:124;74797:333;36753:18;;;75116:2;75101:18;;36753;74952:2;74937:18;;74923:207;75137:668;36753:18;;;75541:2;75526:18;;36753;;;;75624:2;75609:18;;36753;;;;75707:2;75692:18;;36753;75790:3;75775:19;;36753:18;75376:3;75361:19;;75347:458;75812:256;75874:2;75868:9;75900:17;;;75975:18;75960:34;;75996:22;;;75957:62;75954:2;;;76032:1;;76022:12;75954:2;75874;76041:22;75852:216;;-1:-1;75852:216;81712:117;-1:-1;;;;;78888:54;;81771:35;;81761:2;;81820:1;;81810:12;81836:111;81917:5;78800:13;78793:21;81895:5;81892:32;81882:2;;81938:1;;81928:12"
+ },
+ "methodIdentifiers": {
+ "addressbook()": "70dc320c",
+ "calculator()": "ce3e39c0",
+ "callRestricted()": "6c0c3b99",
+ "canSettleAssets(address,address,address,uint256)": "14b93faf",
+ "donate(address,uint256)": "e69d849d",
+ "fullPauser()": "29729d88",
+ "getAccountVaultCounter(address)": "caa6d21a",
+ "getConfiguration()": "6bd50cef",
+ "getNakedCap(address)": "c644d3a2",
+ "getNakedPoolBalance(address)": "d66dd43e",
+ "getPayout(address,uint256)": "565eea19",
+ "getProceed(address,uint256)": "c220101d",
+ "getVault(address,uint256)": "d99d13f5",
+ "getVaultWithDetails(address,uint256)": "9daafbe8",
+ "hasExpired(address)": "f77bc88b",
+ "initialize(address,address)": "485cc955",
+ "isLiquidatable(address,uint256,uint256)": "eaa33e14",
+ "isOperator(address,address)": "b6363cf2",
+ "isSettlementAllowed(address)": "e723406c",
+ "operate((uint8,address,address,address,uint256,uint256,uint256,bytes)[])": "b617f0c6",
+ "oracle()": "7dc0d1d0",
+ "owner()": "8da5cb5b",
+ "partialPauser()": "9db93891",
+ "pool()": "16f0115b",
+ "refreshConfiguration()": "64681083",
+ "renounceOwnership()": "715018a6",
+ "setCallRestriction(bool)": "cab2e805",
+ "setFullPauser(address)": "beca75d7",
+ "setNakedCap(address,uint256)": "2eb1c3a7",
+ "setOperator(address,bool)": "558a7297",
+ "setPartialPauser(address)": "bc463a3d",
+ "setSystemFullyPaused(bool)": "9f677ed9",
+ "setSystemPartiallyPaused(bool)": "573c473e",
+ "sync(address,uint256)": "ef4fcafa",
+ "systemFullyPaused()": "eab7775b",
+ "systemPartiallyPaused()": "cdee058a",
+ "transferOwnership(address)": "f2fde38b",
+ "whitelist()": "93e59dc1"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"name\":\"AccountOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"CallExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isRestricted\",\"type\":\"bool\"}],\"name\":\"CallRestricted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CollateralAssetDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"AccountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CollateralAssetWithdrawed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"donator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Donated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldFullPauser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newFullPauser\",\"type\":\"address\"}],\"name\":\"FullPauserUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LongOtokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"AccountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LongOtokenWithdrawed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"NakedCapUpdated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldPartialPauser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPartialPauser\",\"type\":\"address\"}],\"name\":\"PartialPauserUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"otokenBurned\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"AccountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ShortOtokenBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"AccountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ShortOtokenMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"}],\"name\":\"SystemFullyPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"}],\"name\":\"SystemPartiallyPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vaultOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionStartingRound\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralPayout\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"}],\"name\":\"VaultLiquidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vaultType\",\"type\":\"uint256\"}],\"name\":\"VaultOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vaultType\",\"type\":\"uint256\"}],\"name\":\"VaultSettled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressbook\",\"outputs\":[{\"internalType\":\"contract AddressBookInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calculator\",\"outputs\":[{\"internalType\":\"contract MarginCalculatorInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callRestricted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"canSettleAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fullPauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_accountOwner\",\"type\":\"address\"}],\"name\":\"getAccountVaultCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfiguration\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getNakedCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getNakedPoolBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"getPayout\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"}],\"name\":\"getProceed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"}],\"name\":\"getVault\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"}],\"name\":\"getVaultWithDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"hasExpired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_roundId\",\"type\":\"uint256\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"isSettlementAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"_actions\",\"type\":\"tuple[]\"}],\"name\":\"operate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"partialPauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"contract MarginPoolInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refreshConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_isRestricted\",\"type\":\"bool\"}],\"name\":\"setCallRestriction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fullPauser\",\"type\":\"address\"}],\"name\":\"setFullPauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"setNakedCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isOperator\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_partialPauser\",\"type\":\"address\"}],\"name\":\"setPartialPauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_fullyPaused\",\"type\":\"bool\"}],\"name\":\"setSystemFullyPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_partiallyPaused\",\"type\":\"bool\"}],\"name\":\"setSystemPartiallyPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"}],\"name\":\"sync\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemFullyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemPartiallyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelist\",\"outputs\":[{\"internalType\":\"contract WhitelistInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"canSettleAssets(address,address,address,uint256)\":{\"details\":\"return if underlying, strike, collateral are all allowed to be settled\",\"params\":{\"_collateral\":\"oToken collateral asset\",\"_expiry\":\"otoken expiry timestamp\",\"_strike\":\"oToken strike asset\",\"_underlying\":\"oToken underlying asset\"},\"returns\":{\"_0\":\"True if the oToken has expired AND all oracle prices at the expiry timestamp have been finalized, False if not\"}},\"donate(address,uint256)\":{\"details\":\"use donate() instead of direct transfer() to store the balance in assetBalance\",\"params\":{\"_amount\":\"amount to donate to pool\",\"_asset\":\"asset address\"}},\"getAccountVaultCounter(address)\":{\"params\":{\"_accountOwner\":\"account owner address\"},\"returns\":{\"_0\":\"number of vaults\"}},\"getConfiguration()\":{\"returns\":{\"_0\":\"whitelist, the address of the whitelist module\",\"_1\":\"oracle, the address of the oracle module\",\"_2\":\"calculator, the address of the calculator module\",\"_3\":\"pool, the address of the pool module\"}},\"getNakedCap(address)\":{\"params\":{\"_asset\":\"collateral asset address\"},\"returns\":{\"_0\":\"cap amount\"}},\"getNakedPoolBalance(address)\":{\"params\":{\"_asset\":\"collateral asset address\"},\"returns\":{\"_0\":\"naked pool balance\"}},\"getPayout(address,uint256)\":{\"params\":{\"_amount\":\"amount of the oToken to calculate the payout for, always represented in 1e8\",\"_otoken\":\"oToken address\"},\"returns\":{\"_0\":\"amount of collateral to pay out\"}},\"getProceed(address,uint256)\":{\"params\":{\"_owner\":\"account owner of the vault\",\"_vaultId\":\"vaultId to return balances for\"},\"returns\":{\"_0\":\"amount of collateral that can be taken out\"}},\"getVault(address,uint256)\":{\"params\":{\"_owner\":\"account owner\",\"_vaultId\":\"vault id of vault to return\"},\"returns\":{\"_0\":\"Vault struct that corresponds to the _vaultId of _owner\"}},\"getVaultWithDetails(address,uint256)\":{\"params\":{\"_owner\":\"account owner\",\"_vaultId\":\"vault id of vault to return\"},\"returns\":{\"_0\":\"Vault struct that corresponds to the _vaultId of _owner, vault type and the latest timestamp when the vault was updated\"}},\"hasExpired(address)\":{\"params\":{\"_otoken\":\"oToken address\"},\"returns\":{\"_0\":\"True if the otoken has expired, False if not\"}},\"initialize(address,address)\":{\"params\":{\"_addressBook\":\"addressbook module\",\"_owner\":\"account owner address\"}},\"isLiquidatable(address,uint256,uint256)\":{\"params\":{\"_owner\":\"vault owner address\",\"_roundId\":\"chainlink round id to check vault status at\",\"_vaultId\":\"vault id to check\"},\"returns\":{\"_0\":\"isUnderCollat, true if vault is undercollateralized, the price of 1 repaid otoken and the otoken collateral dust amount\"}},\"isOperator(address,address)\":{\"params\":{\"_operator\":\"account operator address\",\"_owner\":\"account owner address\"},\"returns\":{\"_0\":\"True if the _operator is an approved operator for the _owner account\"}},\"isSettlementAllowed(address)\":{\"details\":\"return if an expired oToken is ready to be settled, only true when price for underlying, strike and collateral assets at this specific expiry is available in our Oracle module\",\"params\":{\"_otoken\":\"oToken\"}},\"operate((uint8,address,address,address,uint256,uint256,uint256,bytes)[])\":{\"details\":\"can only be called when the system is not fully paused\",\"params\":{\"_actions\":\"array of actions arguments\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"refreshConfiguration()\":{\"details\":\"updates the configuration of the controller. can only be called by the 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.\"},\"setCallRestriction(bool)\":{\"details\":\"can only be called by the owner\",\"params\":{\"_isRestricted\":\"new call restriction state\"}},\"setFullPauser(address)\":{\"details\":\"can only be called by the owner\",\"params\":{\"_fullPauser\":\"new fullPauser address\"}},\"setNakedCap(address,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_cap\":\"cap amount, should be scaled by collateral asset decimals\",\"_collateral\":\"collateral asset address\"}},\"setOperator(address,bool)\":{\"details\":\"can only be updated by the vault owner\",\"params\":{\"_isOperator\":\"new boolean value that expresses if the sender is giving or revoking privileges for _operator\",\"_operator\":\"operator that the sender wants to give privileges to or revoke them from\"}},\"setPartialPauser(address)\":{\"details\":\"can only be called by the owner\",\"params\":{\"_partialPauser\":\"new partialPauser address\"}},\"setSystemFullyPaused(bool)\":{\"details\":\"can only be called by the fullyPauser\",\"params\":{\"_fullyPaused\":\"new boolean value to set systemFullyPaused to\"}},\"setSystemPartiallyPaused(bool)\":{\"details\":\"can only be called by the partialPauser\",\"params\":{\"_partiallyPaused\":\"new boolean value to set systemPartiallyPaused to\"}},\"sync(address,uint256)\":{\"details\":\"anyone can update the latest time the vault was touched by calling this function vaultLatestUpdate will sync if the vault is well collateralized\",\"params\":{\"_owner\":\"vault owner address\",\"_vaultId\":\"vault id\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"BASE\":{\"details\":\"scale used in MarginCalculator\"},\"accountVaultCounter\":{\"details\":\"mapping between an owner address and the number of owner address vaults\"},\"nakedCap\":{\"details\":\"mapping to store cap amount for naked margin vault per options collateral asset (scaled by collateral asset decimals)\"},\"nakedPoolBalance\":{\"details\":\"mapping to store amount of naked margin vaults in pool\"},\"operators\":{\"details\":\"mapping between an account owner and their approved or unapproved account operators\"},\"vaultLatestUpdate\":{\"details\":\"mapping to store the timestamp at which the vault was last updated, will be updated in every action that changes the vault state or when calling sync()\"},\"vaultType\":{\"details\":\"mapping to map vault by each vault type, naked margin vault should be set to 1, spread/max loss vault should be set to 0\"},\"vaults\":{\"details\":\"mapping between an owner address and a specific vault using a vault id\"}},\"title\":\"Controller\"},\"userdoc\":{\"methods\":{\"callRestricted()\":{\"notice\":\"True if a call action can only be executed to a whitelisted callee\"},\"donate(address,uint256)\":{\"notice\":\"send asset amount to margin pool\"},\"fullPauser()\":{\"notice\":\"address that has permission to fully pause the system, where all system functionality is paused\"},\"getAccountVaultCounter(address)\":{\"notice\":\"get the number of vaults for a specified account owner\"},\"getConfiguration()\":{\"notice\":\"returns the current controller configuration\"},\"getNakedCap(address)\":{\"notice\":\"get cap amount for collateral asset\"},\"getNakedPoolBalance(address)\":{\"notice\":\"get amount of collateral deposited in all naked margin vaults\"},\"getPayout(address,uint256)\":{\"notice\":\"get an oToken's payout/cash value after expiry, in the collateral asset\"},\"getProceed(address,uint256)\":{\"notice\":\"return a vault's proceeds pre or post expiry, the amount of collateral that can be removed from a vault\"},\"getVault(address,uint256)\":{\"notice\":\"return a specific vault\"},\"getVaultWithDetails(address,uint256)\":{\"notice\":\"return a specific vault\"},\"hasExpired(address)\":{\"notice\":\"check if an oToken has expired\"},\"initialize(address,address)\":{\"notice\":\"initalize the deployed contract\"},\"isLiquidatable(address,uint256,uint256)\":{\"notice\":\"check if a vault is liquidatable in a specific round id\"},\"isOperator(address,address)\":{\"notice\":\"check if a specific address is an operator for an owner account\"},\"operate((uint8,address,address,address,uint256,uint256,uint256,bytes)[])\":{\"notice\":\"execute a number of actions on specific vaults\"},\"partialPauser()\":{\"notice\":\"address that has permission to partially pause the system, where system functionality is paused except redeem and settleVault\"},\"setCallRestriction(bool)\":{\"notice\":\"allows the owner to toggle the restriction on whitelisted call actions and only allow whitelisted call addresses or allow any arbitrary call addresses\"},\"setFullPauser(address)\":{\"notice\":\"allows the owner to set the fullPauser address\"},\"setNakedCap(address,uint256)\":{\"notice\":\"set cap amount for collateral asset used in naked margin\"},\"setOperator(address,bool)\":{\"notice\":\"allows a user to give or revoke privileges to an operator which can act on their behalf on their vaults\"},\"setPartialPauser(address)\":{\"notice\":\"allows the owner to set the partialPauser address\"},\"setSystemFullyPaused(bool)\":{\"notice\":\"allows the fullPauser to toggle the systemFullyPaused variable and fully pause or fully unpause the system\"},\"setSystemPartiallyPaused(bool)\":{\"notice\":\"allows the partialPauser to toggle the systemPartiallyPaused variable and partially pause or partially unpause the system\"},\"sync(address,uint256)\":{\"notice\":\"sync vault latest update timestamp\"},\"systemFullyPaused()\":{\"notice\":\"True if all system functionality is paused\"},\"systemPartiallyPaused()\":{\"notice\":\"True if all system functionality is paused other than redeem and settle vault\"}},\"notice\":\"Contract that controls the Gamma Protocol and the interaction of all sub contracts\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/Controller.sol\":\"Controller\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/Controller.sol\":{\"keccak256\":\"0x3eb654a99a0826194d0cccddda11b167bb0bd174b722cc28b967ec76a554c64b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://30ef3c3e0e3b907da30fe0f14dd3c6e20c8bac00df6c97cf11df03379ae35767\",\"dweb:/ipfs/QmVApGsW6vCdU4PHGgYE53TWfhAA6bcAW67fxo98jF7FKR\"]},\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]},\"contracts/interfaces/MarginCalculatorInterface.sol\":{\"keccak256\":\"0x612ed78099f6e569226aea5a3b384c13a2906f803c23273d97a1d35141063830\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://89c8bdb741ce6a95a54ef2f439c71ecceb1925af06a3f50a52979916e281bbaf\",\"dweb:/ipfs/QmPgB45UPQ675CYWrcSg8jeSw88tSzbLysDSC36zfTfACG\"]},\"contracts/interfaces/MarginPoolInterface.sol\":{\"keccak256\":\"0x9c615edc86d4472d3ad8a488bec65fcfd682f1ad78476c4126786a72810d4b05\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f28e66c6b5cc0b2f7c31fe9bc097023e28939786128ce45ded9aa9d16b3f1b9d\",\"dweb:/ipfs/Qmat1EwHXkReWtrpFbFy4AtYKVQqyYqnGuNDfZLtCwRvT3\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]},\"contracts/interfaces/WhitelistInterface.sol\":{\"keccak256\":\"0xf4f8c9a4a9face43a6c1f36d385bdbbcb57d723530cb4f7c8e402b79fdf41479\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://38182c860371ac05f28813011bb9a0c8ffa742c6b1cfdd39ce19438cf10fa3c8\",\"dweb:/ipfs/QmaiZH48mYxVFHe4ZVKjWJzPEGpehpW5SThAzj6XebiCj9\"]},\"contracts/libs/Actions.sol\":{\"keccak256\":\"0x2466a1a3131110b868a7b44c63bea7b5b96f4dabef85955375ac2fe232668470\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cc5bb8b5a9b755a0f1516d9dabc27057839b0a7abc1231750f7d7eb27593a2fa\",\"dweb:/ipfs/Qmb9ELtRVGuBBzxpTuf72KSskwPS16bi35fxYHcRqX8WRy\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol\":{\"keccak256\":\"0x2a7a3283ace985c58643ad7045551778f50174a0665ea2383eccb04254d0c5ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://baf62f2ce6e2285dfeb8833dbb7e48462780accde795637faf39294db97baf87\",\"dweb:/ipfs/QmYbZCPR7gqVZ7QqkimQ85XyQLbS9AELmbAWWB1igRcJF5\"]},\"contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol\":{\"keccak256\":\"0x57cae6e6b294632e501446cbdf7a21ad8945869b249b49c699d84af63baaacbc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e736cd8a17692b7f7a4036bb7a8682ac040821eb7e3eeb1140eb40631e6f97d6\",\"dweb:/ipfs/QmdogWK1hx6KpGcq9iCieVGjGX4Bo7mFTokKfNq27Mh8Xd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/MarginCalculator.sol": {
+ "MarginCalculator": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "dust",
+ "type": "uint256"
+ }
+ ],
+ "name": "CollateralDustUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "timeToExpiry",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "MaxPriceAdded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "timeToExpiry",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oldValue",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "MaxPriceUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oracleDeviation",
+ "type": "uint256"
+ }
+ ],
+ "name": "OracleDeviationUpdated",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "product",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "spotShock",
+ "type": "uint256"
+ }
+ ],
+ "name": "SpotShockUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "timeToExpiry",
+ "type": "uint256"
+ }
+ ],
+ "name": "TimeToExpiryAdded",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "AUCTION_TIME",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "getCollateralDust",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getExcessCollateral",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "getExpiredPayoutRate",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getMarginRequired",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_timeToExpiry",
+ "type": "uint256"
+ }
+ ],
+ "name": "getMaxPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_shortAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_underlyingPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_shortExpiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_collateralDecimals",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getNakedMarginRequired",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOracleDeviation",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getSpotShock",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getTimesToExpiry",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultLatestUpdate",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_roundId",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLiquidatable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "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": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_dust",
+ "type": "uint256"
+ }
+ ],
+ "name": "setCollateralDust",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_deviation",
+ "type": "uint256"
+ }
+ ],
+ "name": "setOracleDeviation",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_shockValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "setSpotShock",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_timesToExpiry",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "setUpperBoundValues",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_timeToExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "updateUpperBoundValue",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040526200001d600060086200010860201b620010861760201c565b516002553480156200002e57600080fd5b50604051620047fc380380620047fc833981016040819052620000519162000387565b6000620000666001600160e01b036200020616565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038116620000e25760405162461bcd60e51b8152600401620000d99062000489565b60405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055620004d1565b6200011262000374565b6200011c62000374565b601b8314156200015157604051806020016040528062000147866200020a60201b620011461760201c565b90529050620001fd565b601b831115620001c357600062000178601b856200023660201b6200116f1790919060201c565b90506040518060200160405280620001b7620001a684600a0a896200028060201b620011b11790919060201c565b6200020a60201b620011461760201c565b815250915050620001fd565b600083601b0390506040518060200160405280620001f7620001a684600a0a89620002ca60201b620011f31790919060201c565b90529150505b90505b92915050565b3390565b6000600160ff1b8210620002325760405162461bcd60e51b8152600401620000d99062000406565b5090565b6000620001fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200030a60201b60201c565b6000620001fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200033960201b60201c565b600082620002db5750600062000200565b82820282848281620002e957fe5b0414620001fd5760405162461bcd60e51b8152600401620000d99062000448565b60008184841115620003315760405162461bcd60e51b8152600401620000d99190620003b0565b505050900390565b600081836200035d5760405162461bcd60e51b8152600401620000d99190620003b0565b5060008385816200036a57fe5b0495945050505050565b6040518060200160405280600081525090565b60006020828403121562000399578081fd5b81516001600160a01b0381168114620001fd578182fd5b6000602080835283518082850152825b81811015620003de57858101830151858201604001528201620003c0565b81811115620003f05783604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526028908201527f4d617267696e43616c63756c61746f723a20696e76616c6964206f7261636c65604082015267206164647265737360c01b606082015260800190565b61431b80620004e16000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638aab8fa5116100ad578063c73547e311610071578063c73547e314610271578063cd43fbfb14610284578063dc1b3f00146102a5578063e592301a146102b8578063f2fde38b146102c05761012c565b80638aab8fa5146102195780638da5cb5b1461022c5780639a783d1114610234578063a6c5690714610247578063b29d5ee8146102695761012c565b80636ccb9506116100f45780636ccb9506146101c1578063715018a6146101d45780637ad7f800146101de5780637dc0d1d0146101f15780637f519b72146102065761012c565b8063053fe57c146101315780630b0509fb1461015b578063463459001461017b578063478409301461018e57806347d438a5146101a1575b600080fd5b61014461013f3660046134cc565b6102d3565b60405161015292919061422b565b60405180910390f35b61016e6101693660046133f7565b61030e565b604051610152919061423b565b61016e6101893660046131a2565b610389565b61016e61019c36600461316a565b6103b3565b6101b46101af3660046131a2565b6104ea565b6040516101529190613680565b61016e6101cf36600461316a565b610562565b6101dc61057d565b005b6101dc6101ec366004613317565b6105fc565b6101f96106fd565b6040516101529190613604565b6101dc6102143660046131fd565b61070c565b6101dc6102273660046132b4565b6109e3565b6101f9610a9c565b6101dc610242366004613485565b610aab565b61025a61025536600461350f565b610b57565b604051610152939291906136c4565b61016e610e00565b6101dc61027f366004613561565b610e06565b6102976102923660046134cc565b610e7b565b604051610152929190614244565b61016e6102b33660046132b4565b610f95565b61016e610fca565b6101dc6102ce36600461316a565b610fd0565b6102db612e40565b6102e3612e40565b6102eb612e53565b6102f5858561122d565b90506103018582611578565b92509250505b9250929050565b60008061031d8b8b8b86611a2d565b9050610327612e40565b610332896008611086565b905061033c612e40565b610347896008611086565b9050610351612e40565b61035c896008611086565b905061037761036f858584868d8c611a66565b886000611bec565b9e9d5050505050505050505050505050565b60008061039886868686611a2d565b6000908152600660205260409020549150505b949350505050565b60006001600160a01b0382166103e45760405162461bcd60e51b81526004016103db906137ea565b60405180910390fd5b6000806000806000806103f688611cbf565b955095509550955095509550814210156104225760405162461bcd60e51b81526004016103db90613831565b61042a612e40565b6104378686858786612011565b9050610441612e40565b61044d82878a87612072565b90506000886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561048a57600080fd5b505afa15801561049e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c291906135e3565b60ff1690506104d98282600163ffffffff611bec16565b99505050505050505050505b919050565b606060006104fa86868686611a2d565b600081815260046020908152604091829020805483518184028101840190945280845293945091929083018282801561055257602002820191906000526020600020905b81548152602001906001019080831161053e575b5050505050915050949350505050565b6001600160a01b031660009081526003602052604090205490565b6105856121fe565b6000546001600160a01b039081169116146105b25760405162461bcd60e51b81526004016103db90613dda565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6106046121fe565b6000546001600160a01b039081169116146106315760405162461bcd60e51b81526004016103db90613dda565b600081116106515760405162461bcd60e51b81526004016103db90613be6565b600061065f87878787611a2d565b6000818152600560209081526040808320878452909152902054909150806106995760405162461bcd60e51b81526004016103db90613fb4565b6000828152600560209081526040808320878452909152908190208490555182907f39bab32d3b88604bdfbf6e8c3b1aaaf9bb6013da4fd5206dee9e3b00ee6f2cf9906106eb90879085908890614262565b60405180910390a25050505050505050565b6007546001600160a01b031681565b6107146121fe565b6000546001600160a01b039081169116146107415760405162461bcd60e51b81526004016103db90613dda565b8261075e5760405162461bcd60e51b81526004016103db906138cc565b82811461077d5760405162461bcd60e51b81526004016103db90613a37565b600061078b89898989611a2d565b600081815260046020526040902080549192509015806107e65750805481906107bb90600163ffffffff61116f16565b815481106107c557fe5b9060005260206000200154868660008181106107dd57fe5b90506020020135115b6108025760405162461bcd60e51b81526004016103db90614001565b60005b858110156109d6578561081f82600163ffffffff61220216565b101561087857868661083883600163ffffffff61220216565b81811061084157fe5b9050602002013587878381811061085457fe5b90506020020135106108785760405162461bcd60e51b81526004016103db90613ebd565b600085858381811061088657fe5b90506020020135116108aa5760405162461bcd60e51b81526004016103db90613879565b8484828181106108b657fe5b905060200201356005600085815260200190815260200160002060008989858181106108de57fe5b905060200201358152602001908152602001600020819055508187878381811061090457fe5b83546001810185556000948552602094859020919094029290920135919092015550827fcaae9881bd3ac6f531c9e6021f1f873b93a83648e348624eef8f9ba9757fcb6288888481811061095457fe5b90506020020135604051610968919061423b565b60405180910390a2827fcbb8d688de73727385afee9d53a2771ae5fe45293ff6de0ba46b201ab29df11588888481811061099e57fe5b905060200201358787858181106109b157fe5b905060200201356040516109c6929190614254565b60405180910390a2600101610805565b5050505050505050505050565b6109eb6121fe565b6000546001600160a01b03908116911614610a185760405162461bcd60e51b81526004016103db90613dda565b60008111610a385760405162461bcd60e51b81526004016103db906140e8565b6000610a4686868686611a2d565b600081815260066020526040908190208490555190915081907f78d22b4a9e4e0e1db30e7762696456ca380dc80efc59f416a299b97213b6d31690610a8c90859061423b565b60405180910390a2505050505050565b6000546001600160a01b031690565b610ab36121fe565b6000546001600160a01b03908116911614610ae05760405162461bcd60e51b81526004016103db90613dda565b60008111610b005760405162461bcd60e51b81526004016103db90613961565b6001600160a01b03821660008181526003602052604090819020839055517f8ef429e6cec4339c5f0187fb930764fb967114bf09bc8bb06a552ba32923fd8690610b4b90849061423b565b60405180910390a25050565b600080600085600114610b7c5760405162461bcd60e51b81526004016103db90613f06565b610b84612e53565b610b8e888861122d565b9050806102200151610baa575060009250829150819050610df6565b8060e001514210610bcd5760405162461bcd60e51b81526004016103db90613d45565b6007548151604051631b85462d60e01b815260009283926001600160a01b0390911691631b85462d91610c04918b9060040161365b565b604080518083038186803b158015610c1b57600080fd5b505afa158015610c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5391906135c0565b91509150878111610c765760405162461bcd60e51b81526004016103db9061377e565b610c7e612eef565b6040518060600160405280610cac8d60600151600081518110610c9d57fe5b60200260200101516008611086565b8152602001610cc08660c001516008611086565b8152602001610cd0856008611086565b81525090506000610cf4856000015186602001518760400151886101c00151611a2d565b9050610cfe612e40565b610d258d60a00151600081518110610d1257fe5b6020026020010151876101800151611086565b9050610d2f612e40565b610d52838560000151866040015187602001518b60e001518c6101c00151611a66565b9050610d64818363ffffffff61222716565b15610d80575060009850889750879650610df695505050505050565b610d88612e40565b610da0856020015186604001518a6101c0015161222f565b90506000610dc58487600001518489604001518b8e61018001518f6101c001516122b6565b6040998a01516001600160a01b031660009081526003602052999099205460019c50989a5097985050505050505050505b9450945094915050565b60015490565b610e0e6121fe565b6000546001600160a01b03908116911614610e3b5760405162461bcd60e51b81526004016103db90613dda565b60018190556040517fe44c6dd1fc3826ad24b81f17cf04849cedd368e002a52e89a845d14d3474e20a90610e7090839061423b565b60405180910390a150565b600080610e86612e53565b610e90858561122d565b9050610e9c85826123fe565b806102200151158015610eb25750806102000151155b15610ef2576000816102400151610eca576000610ee4565b8560a00151600081518110610edb57fe5b60200260200101515b935060019250610307915050565b610efa612e40565b610f02612e40565b610f0c8784611578565b91509150610f18612e40565b610f28838363ffffffff61253516565b60408051602081019091526002548152909150600090610f4f90839063ffffffff61256716565b90506000856102000151610f6857856101000151610f6f565b8561016001515b90506000610f8484838563ffffffff611bec16565b9b929a509198505050505050505050565b600080610fa487878787611a2d565b600090815260056020908152604080832086845290915290205491505095945050505050565b610e1081565b610fd86121fe565b6000546001600160a01b039081169116146110055760405162461bcd60e51b81526004016103db90613dda565b6001600160a01b03811661102b5760405162461bcd60e51b81526004016103db9061391b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61108e612e40565b611096612e40565b601b8314156110bc5760405180602001604052806110b386611146565b9052905061113d565b601b83111561110e5760006110d884601b63ffffffff61116f16565b905060405180602001604052806111036110fe84600a0a896111b190919063ffffffff16565b611146565b81525091505061113d565b6040805160208101909152601b84900390806111376110fe88600a86900a63ffffffff6111f316565b90529150505b90505b92915050565b6000600160ff1b821061116b5760405162461bcd60e51b81526004016103db906139be565b5090565b600061113d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061256f565b600061113d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061259b565b60008261120257506000611140565b8282028284828161120f57fe5b041461113d5760405162461bcd60e51b81526004016103db90613d99565b611235612e53565b61123d612e53565b50604080516102608101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c082018190526101e0820181905261020082018190526102208201819052610240820152908401516112e2906125d2565b151561020082015283516112f5906125d2565b1515610220820152604084015161130b906125d2565b15156102408201526101a08101839052610200810151156113f9576000846020015160008151811061133957fe5b6020026020010151905061134c81611cbf565b15156101e08801526101408701526101208601526001600160a01b03908116608086015290811660608501521660a083018190526040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b1580156113b657600080fd5b505afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee91906135e3565b60ff16610160830152505b806102200151156114d4576000846000015160008151811061141757fe5b6020026020010151905061142a81611cbf565b15156101c088015260e087015260c08601526001600160a01b039081166020808701919091529181168552919091166040808501829052805163313ce56760e01b81529051919263313ce56792600480840193829003018186803b15801561149157600080fd5b505afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906135e3565b60ff16610100830152505b8061024001511561113d5783604001516000815181106114f057fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561153057600080fd5b505afa158015611544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156891906135e3565b60ff166101808201529392505050565b611580612e40565b611588612e40565b611590612e40565b8361022001516115af57604080516020810190915260025481526115c3565b6115c38560600151600081518110610c9d57fe5b90506115cd612e40565b8461020001516115ec5760408051602081019091526002548152611600565b6116008660800151600081518110610c9d57fe5b905061160a612e40565b856102400151611629576040805160208101909152600254815261163d565b61163d8760a00151600081518110610d1257fe5b9050611647612e40565b8661022001516116665760408051602081019091526002548152611675565b6116758760c001516008611086565b905061167f612f21565b6040518060a0016040528089610220015161169e5789606001516116a1565b89515b6001600160a01b031681526020018961022001516116c3578960a001516116c9565b89604001515b6001600160a01b031681526020018961022001516116eb5789608001516116f1565b89602001515b6001600160a01b031681526020018961022001516117145789610140015161171a565b8960e001515b815260200189610220015161173457896101e0015161173b565b896101c001515b15158152509050806060015142101561196857876101a00151600114156118c157611764612e40565b6040808a01516001600160a01b03166000908152600360205220546101808a015161178f9190611086565b604080516020810190915260025481529091506117b390859063ffffffff61261016565b156117e4576117c8848263ffffffff61261016565b6117e45760405162461bcd60e51b81526004016103db90613b63565b6117ec612e40565b6007548a516040516341976e0960e01b8152611876926001600160a01b0316916341976e099161181f9190600401613604565b60206040518083038186803b15801561183757600080fd5b505afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f9190613579565b6008611086565b905060006118978b600001518c602001518d604001518e6101c00151611a2d565b9050856118b0828a858989606001518a60800151611a66565b995099505050505050505050610307565b6118c9612e40565b8861020001516118e857604080516020810190915260025481526118f8565b6118f88961012001516008611086565b905081608001511561193e5761190c612e40565b61191887878685612617565b90508461192e8285604001518660200151612664565b9850985050505050505050610307565b611946612e40565b611952878786856127c9565b90508461192e8285600001518660200151612664565b611970612e40565b88610220015161198f57604080516020810190915260025481526119b0565b6119b089600001518a602001518b60e001518c60c001518660800151612011565b90506119ba612e40565b8961020001516119d957604080516020810190915260025481526119fc565b6119fc8a606001518b608001518c61014001518d61012001518760800151612011565b9050611a06612e40565b611a1288888585612865565b9050856118b082866040015187602001518860600151612072565b600084848484604051602001611a469493929190613618565b604051602081830303815290604052805190602001209050949350505050565b611a6e612e40565b611a76612e40565b611a808885612890565b9050611a8a612e40565b50604080516020808201835260008b8152600690915291909120548152611aaf612e40565b611ab7612e40565b611abf612e40565b8615611b5157611ade89611ad9868d63ffffffff6129fb16565b612a42565b9250611b18611b03611af6868d63ffffffff6129fb16565b8b9063ffffffff61253516565b60408051602081019091526002548152612a60565b9150611b4a8b611b3e84611b32898863ffffffff6129fb16565b9063ffffffff612a7716565b9063ffffffff6129fb16565b9050611bdd565b611b59612e40565b611b706b033b2e3c9fd0803ce8000000601b611086565b9050611b9681611ad98d611b8a8e8a63ffffffff6129fb16565b9063ffffffff612aa016565b9350611bbf611b03611bb28d611b8a8e8a63ffffffff6129fb16565b839063ffffffff61253516565b9250611bd98c611b3e85611b328a8963ffffffff6129fb16565b9150505b9b9a5050505050505050505050565b600080601b841415611c0a578451611c0390612ad6565b9050611cb5565b601b841115611c43576000601b85039050611c3b81600a0a611c2f8860000151612ad6565b9063ffffffff6111f316565b915050611cb5565b601b849003600084611c80576000611c7183600a0a611c658a60000151612ad6565b9063ffffffff612af216565b90508015611c7e57600191505b505b611cb081611ca484600a0a611c988b60000151612ad6565b9063ffffffff6111b116565b9063ffffffff61220216565b925050505b90505b9392505050565b6000806000806000806000879050806001600160a01b031663af0968fc6040518163ffffffff1660e01b815260040160c06040518083038186803b158015611d0657600080fd5b505afa925050508015611d36575060408051601f3d908101601f19168201909252611d3391810190613384565b60015b611ff257806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b158015611d7357600080fd5b505afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab9190613186565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611de457600080fd5b505afa158015611df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1c9190613186565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5557600080fd5b505afa158015611e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8d9190613186565b836001600160a01b031663c52987cf6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec657600080fd5b505afa158015611eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efe9190613579565b846001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f9190613579565b856001600160a01b031663f3c274a66040518163ffffffff1660e01b815260040160206040518083038186803b158015611fa857600080fd5b505afa158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe091906134b0565b96509650965096509650965050612008565b949b509299509097509550935091506120089050565b91939550919395565b612019612e40565b612021612e40565b61202c846008611086565b9050612036612e40565b61204260016000611086565b905061204c612e40565b612058828a8a8a612072565b905061206583828761222f565b9998505050505050505050565b61207a612e40565b826001600160a01b0316846001600160a01b0316141561209b5750836103ab565b6007546040516301957f8160e01b815260009182916001600160a01b03909116906301957f81906120d29089908890600401613642565b604080518083038186803b1580156120e957600080fd5b505afa1580156120fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121219190613591565b6007546040516301957f8160e01b815292945090925060009182916001600160a01b0316906301957f819061215c908a908a90600401613642565b604080518083038186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190613591565b915091508280156121b95750805b6121d55760405162461bcd60e51b81526004016103db90613c95565b6120656121e3836008611086565b611b8a6121f1876008611086565b8c9063ffffffff6129fb16565b3390565b60008282018381101561113d5760405162461bcd60e51b81526004016103db90613a00565b519051131590565b612237612e40565b811561227d5761224d848463ffffffff61261016565b6122665760408051602081019091526002548152612276565b612276848463ffffffff61253516565b9050611cb8565b61228d838563ffffffff61261016565b6122a65760408051602081019091526002548152611cb5565b611cb5838563ffffffff61253516565b60006122c0612e40565b6122c8612e40565b6122d88a8a63ffffffff612aa016565b905060006122ec428863ffffffff61116f16565b9050610e1081106122ff578192506123ec565b612307612e40565b61230f612e40565b61231c600154601b611086565b9050861561234e57612347611b0361233a838d63ffffffff6129fb16565b8d9063ffffffff61253516565b9150612378565b6123758a611b8a611b03612368858463ffffffff6129fb16565b8f9063ffffffff61253516565b91505b50612381612e40565b61238c836012611086565b9050612396612e40565b6123a3610e106012611086565b90506123cd6123c082611b8a85611b3e8a8963ffffffff61253516565b849063ffffffff612a7716565b95506123df868663ffffffff61261016565b156123e8578495505b5050505b611bdd8387600163ffffffff611bec16565b815151600110156124215760405162461bcd60e51b81526004016103db9061404f565b600182602001515111156124475760405162461bcd60e51b81526004016103db90613a7d565b6001826040015151111561246d5760405162461bcd60e51b81526004016103db90613f57565b606082015151825151146124935760405162461bcd60e51b81526004016103db90613b12565b816080015151826020015151146124bc5760405162461bcd60e51b81526004016103db90614132565b8160a0015151826040015151146124e55760405162461bcd60e51b81526004016103db90614182565b6124ef8282612b34565b61250b5760405162461bcd60e51b81526004016103db90613ce8565b6125158282612c6e565b6125315760405162461bcd60e51b81526004016103db90613e56565b5050565b61253d612e40565b604080516020810190915282518451829161255e919063ffffffff612d0e16565b90529392505050565b519051121590565b600081848411156125935760405162461bcd60e51b81526004016103db91906136dc565b505050900390565b600081836125bc5760405162461bcd60e51b81526004016103db91906136dc565b5060008385816125c857fe5b0495945050505050565b6000808251118015611140575060006001600160a01b0316826000815181106125f757fe5b60200260200101516001600160a01b0316141592915050565b5190511390565b61261f612e40565b61265b611b0361263f6126328888612a42565b859063ffffffff6129fb16565b61264f888763ffffffff6129fb16565b9063ffffffff61253516565b95945050505050565b61266c612e40565b816001600160a01b0316836001600160a01b0316141561268d575082611cb8565b6007546040516341976e0960e01b81526000916001600160a01b0316906341976e09906126be908790600401613604565b60206040518083038186803b1580156126d657600080fd5b505afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e9190613579565b6007546040516341976e0960e01b81529192506000916001600160a01b03909116906341976e0990612744908790600401613604565b60206040518083038186803b15801561275c57600080fd5b505afa158015612770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127949190613579565b90506127bf6127a4826008611086565b611b8a6127b2856008611086565b899063ffffffff6129fb16565b9695505050505050565b6127d1612e40565b604080516020810190915260025481526127f290839063ffffffff612d5416565b156128115761280a611b03868663ffffffff61253516565b90506103ab565b612819612e40565b61283183611b8a88611b3e838963ffffffff61253516565b905061283b612e40565b61284e611b03888863ffffffff61253516565b905061285a8282612a60565b979650505050505050565b61286d612e40565b61265b612880838663ffffffff6129fb16565b61264f858863ffffffff6129fb16565b612898612e40565b6000838152600460209081526040918290208054835181840281018401909452808452606093928301828280156128ee57602002820191906000526020600020905b8154815260200190600101908083116128da575b505050505090508051600014156129175760405162461bcd60e51b81526004016103db9061372f565b6000612929844263ffffffff61116f16565b905080826129426001855161116f90919063ffffffff16565b8151811061294c57fe5b602002602001015110156129725760405162461bcd60e51b81526004016103db906141d8565b60005b82518160ff1610156129f25781838260ff168151811061299157fe5b6020026020010151106129ea57600086815260056020526040812084516129e09290869060ff86169081106129c257fe5b6020026020010151815260200190815260200160002054601b611086565b9350505050611140565b600101612975565b50505092915050565b612a03612e40565b60408051602081019091528251845182916b033b2e3c9fd0803ce800000091612a319163ffffffff612d5b16565b81612a3857fe5b0590529392505050565b612a4a612e40565b8151835112612a59578161113d565b5090919050565b612a68612e40565b8151835113612a59578161113d565b612a7f612e40565b604080516020810190915282518451829161255e919063ffffffff612dc616565b612aa8612e40565b604080516020810190915282518451829190612a31906b033b2e3c9fd0803ce800000063ffffffff612d5b16565b600080821215612aeb578160000390506104e5565b50806104e5565b600061113d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612e0c565b6000816101a0015160011415612b675781610200015115612b675760405162461bcd60e51b81526004016103db90613c38565b8161020001511580612b7c5750816102200151155b15612b8957506001611140565b82518051600090612b9657fe5b60200260200101516001600160a01b03168360200151600081518110612bb857fe5b60200260200101516001600160a01b031614158015612bf0575081600001516001600160a01b031682606001516001600160a01b0316145b8015612c15575081602001516001600160a01b031682608001516001600160a01b0316145b8015612c3a575081604001516001600160a01b03168260a001516001600160a01b0316145b8015612c4e57508160e00151826101400151145b801561113d5750816101c001511515826101e00151151514905092915050565b610240810151600090600190612c85579050611140565b82610220015115612cc8578360400151600081518110612ca157fe5b60200260200101516001600160a01b031683604001516001600160a01b031614905061113d565b8261020001511561113d578360400151600081518110612ce457fe5b60200260200101516001600160a01b03168360a001516001600160a01b0316149050905092915050565b6000818303818312801590612d235750838113155b80612d385750600083128015612d3857508381135b61113d5760405162461bcd60e51b81526004016103db906140a4565b5190511490565b600082612d6a57506000611140565b82600019148015612d7e5750600160ff1b82145b15612d9b5760405162461bcd60e51b81526004016103db90613e0f565b82820282848281612da857fe5b051461113d5760405162461bcd60e51b81526004016103db90613e0f565b6000828201818312801590612ddb5750838112155b80612df05750600083128015612df057508381125b61113d5760405162461bcd60e51b81526004016103db90613ad1565b60008183612e2d5760405162461bcd60e51b81526004016103db91906136dc565b50828481612e3757fe5b06949350505050565b6040518060200160405280600081525090565b6040805161026081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101829052610220810182905261024081019190915290565b6040518060600160405280612f02612e40565b8152602001612f0f612e40565b8152602001612f1c612e40565b905290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b600082601f830112612f5f578081fd5b8135612f72612f6d8261429f565b614278565b818152915060208083019084810181840286018201871015612f9357600080fd5b60005b84811015612fbb578135612fa9816142bf565b84529282019290820190600101612f96565b505050505092915050565b60008083601f840112612fd7578081fd5b50813567ffffffffffffffff811115612fee578182fd5b602083019150836020808302850101111561030757600080fd5b600082601f830112613018578081fd5b8135613026612f6d8261429f565b81815291506020808301908481018184028601820187101561304757600080fd5b60005b84811015612fbb5781358452928201929082019060010161304a565b600060c08284031215613077578081fd5b61308160c0614278565b9050813567ffffffffffffffff8082111561309b57600080fd5b6130a785838601612f4f565b835260208401359150808211156130bd57600080fd5b6130c985838601612f4f565b602084015260408401359150808211156130e257600080fd5b6130ee85838601612f4f565b6040840152606084013591508082111561310757600080fd5b61311385838601613008565b6060840152608084013591508082111561312c57600080fd5b61313885838601613008565b608084015260a084013591508082111561315157600080fd5b5061315e84828501613008565b60a08301525092915050565b60006020828403121561317b578081fd5b813561113d816142bf565b600060208284031215613197578081fd5b815161113d816142bf565b600080600080608085870312156131b7578283fd5b84356131c2816142bf565b935060208501356131d2816142bf565b925060408501356131e2816142bf565b915060608501356131f2816142d7565b939692955090935050565b60008060008060008060008060c0898b031215613218578384fd5b8835613223816142bf565b97506020890135613233816142bf565b96506040890135613243816142bf565b95506060890135613253816142d7565b9450608089013567ffffffffffffffff8082111561326f578586fd5b61327b8c838d01612fc6565b909650945060a08b0135915080821115613293578384fd5b506132a08b828c01612fc6565b999c989b5096995094979396929594505050565b600080600080600060a086880312156132cb578081fd5b85356132d6816142bf565b945060208601356132e6816142bf565b935060408601356132f6816142bf565b92506060860135613306816142d7565b949793965091946080013592915050565b60008060008060008060c0878903121561332f578182fd5b863561333a816142bf565b9550602087013561334a816142bf565b9450604087013561335a816142bf565b9350606087013561336a816142d7565b9598949750929560808101359460a0909101359350915050565b60008060008060008060c0878903121561339c578182fd5b86516133a7816142bf565b60208801519096506133b8816142bf565b60408801519095506133c9816142bf565b80945050606087015192506080870151915060a08701516133e9816142d7565b809150509295509295509295565b60008060008060008060008060006101208a8c031215613415578283fd5b8935613420816142bf565b985060208a0135613430816142bf565b975060408a0135613440816142bf565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a0135613474816142d7565b809150509295985092959850929598565b60008060408385031215613497578182fd5b82356134a2816142bf565b946020939093013593505050565b6000602082840312156134c1578081fd5b815161113d816142d7565b600080604083850312156134de578182fd5b823567ffffffffffffffff8111156134f4578283fd5b61350085828601613066565b95602094909401359450505050565b60008060008060808587031215613524578182fd5b843567ffffffffffffffff81111561353a578283fd5b61354687828801613066565b97602087013597506040870135966060013595509350505050565b600060208284031215613572578081fd5b5035919050565b60006020828403121561358a578081fd5b5051919050565b600080604083850312156135a3578182fd5b8251915060208301516135b5816142d7565b809150509250929050565b600080604083850312156135d2578182fd5b505080516020909101519092909150565b6000602082840312156135f4578081fd5b815160ff8116811461113d578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152901515606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825269ffffffffffffffffffff16602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156136b85783518352928401929184019160010161369c565b50909695505050505050565b92151583526020830191909152604082015260600190565b6000602080835283518082850152825b81811015613708578581018301518582016040015282016136ec565b818111156137195783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602f908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e60408201526e6f206578706972792076616c75657360881b606082015260800190565b60208082526046908201527f4d617267696e43616c63756c61746f723a2061756374696f6e2074696d65737460408201527f616d702073686f756c6420626520706f7374207661756c74206c61746573742060608201526575706461746560d01b608082015260a00190565b60208082526027908201527f4d617267696e43616c63756c61746f723a20496e76616c696420746f6b656e206040820152666164647265737360c81b606082015260800190565b60208082526028908201527f4d617267696e43616c63756c61746f723a204f746f6b656e206e6f74206578706040820152671a5c9959081e595d60c21b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a206e6f2065787069727920757070656040820152721c88189bdd5b99081d985b1d5948199bdd5b99606a1b606082015260800190565b6020808252602f908201527f4d617267696e43616c63756c61746f723a20696e76616c69642074696d65732060408201526e746f2065787069727920617272617960881b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a206475737420616d6f756e7420736860408201527f6f756c642062652067726561746572207468616e207a65726f00000000000000606082015260800190565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f4d617267696e43616c63756c61746f723a20696e76616c69642076616c75657360408201526520617272617960d01b606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e79206c6f6e67206040820152731bdd1bdad95b9cc81a5b881d1a19481d985d5b1d60621b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a2053686f727420617373657420616e6040820152700c840c2dadeeadce840dad2e6dac2e8c6d607b1b606082015260800190565b6020808252605b908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742073686f756c64206861766520636f6c6c61746572616c20616d6f7560608201527f6e742067726561746572207468616e206475737420616d6f756e740000000000608082015260a00190565b60208082526032908201527f4d617267696e43616c63756c61746f723a20696e76616c6964206f7074696f6e60408201527120757070657220626f756e642076616c756560701b606082015260800190565b6020808252603c908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742063616e6e6f742068617665206c6f6e67206f746f6b656e00000000606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726963652061742065787069726040820152721e481b9bdd08199a5b985b1a5e9959081e595d606a1b606082015260800190565b6020808252603b908201527f4d617267696e43616c63756c61746f723a206c6f6e67206173736574206e6f7460408201527f206d617267696e61626c6520666f722073686f72742061737365740000000000606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a2063616e206e6f74206c697175696460408201527330ba329032bc3834b932b2103837b9b4ba34b7b760611b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526041908201527f4d617267696e43616c63756c61746f723a20636f6c6c61746572616c2061737360408201527f6574206e6f74206d617267696e61626c6520666f722073686f727420617373656060820152601d60fa1b608082015260a00190565b60208082526029908201527f4d617267696e43616c63756c61746f723a2074696d652073686f756c642062656040820152681034b71037b93232b960b91b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a20696e76616c6964207661756c74206040820152707479706520746f206c697175696461746560781b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e7920636f6c6c6160408201527f746572616c2061737365747320696e20746865207661756c7400000000000000606082015260800190565b6020808252602d908201527f4d617267696e43616c63756c61746f723a20757070657220626f756e6420766160408201526c1b1d59481b9bdd08199bdd5b99609a1b606082015260800190565b6020808252602e908201527f4d617267696e43616c63756c61746f723a20657870697279206172726179206960408201526d39903737ba1034b71037b93232b960911b606082015260800190565b60208082526035908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e792073686f7274604082015274081bdd1bdad95b9cc81a5b881d1a19481d985d5b1d605a1b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252602a908201527f4d617267696e43616c63756c61746f723a20696e76616c69642073706f742073604082015269686f636b2076616c756560b01b606082015260800190565b60208082526030908201527f4d617267696e43616c63756c61746f723a204c6f6e6720617373657420616e6460408201526f040c2dadeeadce840dad2e6dac2e8c6d60831b606082015260800190565b60208082526036908201527f4d617267696e43616c63756c61746f723a20436f6c6c61746572616c206173736040820152750cae840c2dcc840c2dadeeadce840dad2e6dac2e8c6d60531b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e6040820152726f20757070657220626f756e642076616c756560681b606082015260800190565b9151825251602082015260400190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561429757600080fd5b604052919050565b600067ffffffffffffffff8211156142b5578081fd5b5060209081020190565b6001600160a01b03811681146142d457600080fd5b50565b80151581146142d457600080fdfea2646970667358221220d3d9e8a236a332b54c1d6140d75419d038c53282761724c26e7b50467162817d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x1D PUSH1 0x0 PUSH1 0x8 PUSH3 0x108 PUSH1 0x20 SHL PUSH3 0x1086 OR PUSH1 0x20 SHR JUMP JUMPDEST MLOAD PUSH1 0x2 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x47FC CODESIZE SUB DUP1 PUSH3 0x47FC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x51 SWAP2 PUSH3 0x387 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x66 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x206 AND JUMP JUMPDEST PUSH1 0x0 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 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xD9 SWAP1 PUSH3 0x489 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x7 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 PUSH3 0x4D1 JUMP JUMPDEST PUSH3 0x112 PUSH3 0x374 JUMP JUMPDEST PUSH3 0x11C PUSH3 0x374 JUMP JUMPDEST PUSH1 0x1B DUP4 EQ ISZERO PUSH3 0x151 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x147 DUP7 PUSH3 0x20A PUSH1 0x20 SHL PUSH3 0x1146 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH3 0x1FD JUMP JUMPDEST PUSH1 0x1B DUP4 GT ISZERO PUSH3 0x1C3 JUMPI PUSH1 0x0 PUSH3 0x178 PUSH1 0x1B DUP6 PUSH3 0x236 PUSH1 0x20 SHL PUSH3 0x116F OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x1B7 PUSH3 0x1A6 DUP5 PUSH1 0xA EXP DUP10 PUSH3 0x280 PUSH1 0x20 SHL PUSH3 0x11B1 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x20A PUSH1 0x20 SHL PUSH3 0x1146 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE POP SWAP2 POP POP PUSH3 0x1FD JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1B SUB SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x1F7 PUSH3 0x1A6 DUP5 PUSH1 0xA EXP DUP10 PUSH3 0x2CA PUSH1 0x20 SHL PUSH3 0x11F3 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 MSTORE SWAP2 POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH3 0x232 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xD9 SWAP1 PUSH3 0x406 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1FD DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH3 0x30A PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1FD DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH3 0x339 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0x2DB JUMPI POP PUSH1 0x0 PUSH3 0x200 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH3 0x2E9 JUMPI INVALID JUMPDEST DIV EQ PUSH3 0x1FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xD9 SWAP1 PUSH3 0x448 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH3 0x331 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xD9 SWAP2 SWAP1 PUSH3 0x3B0 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH3 0x35D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xD9 SWAP2 SWAP1 PUSH3 0x3B0 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH3 0x36A JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x399 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1FD JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x3DE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x3C0 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x3F0 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964206F7261636C65 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH2 0x431B DUP1 PUSH3 0x4E1 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 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8AAB8FA5 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xC73547E3 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC73547E3 EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0xCD43FBFB EQ PUSH2 0x284 JUMPI DUP1 PUSH4 0xDC1B3F00 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0xE592301A EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2C0 JUMPI PUSH2 0x12C JUMP JUMPDEST DUP1 PUSH4 0x8AAB8FA5 EQ PUSH2 0x219 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x22C JUMPI DUP1 PUSH4 0x9A783D11 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0xA6C56907 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0xB29D5EE8 EQ PUSH2 0x269 JUMPI PUSH2 0x12C JUMP JUMPDEST DUP1 PUSH4 0x6CCB9506 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x6CCB9506 EQ PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x7AD7F800 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x7F519B72 EQ PUSH2 0x206 JUMPI PUSH2 0x12C JUMP JUMPDEST DUP1 PUSH4 0x53FE57C EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xB0509FB EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0x46345900 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x47840930 EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0x47D438A5 EQ PUSH2 0x1A1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x144 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0x2D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16E PUSH2 0x169 CALLDATASIZE PUSH1 0x4 PUSH2 0x33F7 JUMP JUMPDEST PUSH2 0x30E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH2 0x16E PUSH2 0x189 CALLDATASIZE PUSH1 0x4 PUSH2 0x31A2 JUMP JUMPDEST PUSH2 0x389 JUMP JUMPDEST PUSH2 0x16E PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0x316A JUMP JUMPDEST PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x1B4 PUSH2 0x1AF CALLDATASIZE PUSH1 0x4 PUSH2 0x31A2 JUMP JUMPDEST PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x3680 JUMP JUMPDEST PUSH2 0x16E PUSH2 0x1CF CALLDATASIZE PUSH1 0x4 PUSH2 0x316A JUMP JUMPDEST PUSH2 0x562 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x57D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1DC PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x3317 JUMP JUMPDEST PUSH2 0x5FC JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0x6FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x3604 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x214 CALLDATASIZE PUSH1 0x4 PUSH2 0x31FD JUMP JUMPDEST PUSH2 0x70C JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x227 CALLDATASIZE PUSH1 0x4 PUSH2 0x32B4 JUMP JUMPDEST PUSH2 0x9E3 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xA9C JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x242 CALLDATASIZE PUSH1 0x4 PUSH2 0x3485 JUMP JUMPDEST PUSH2 0xAAB JUMP JUMPDEST PUSH2 0x25A PUSH2 0x255 CALLDATASIZE PUSH1 0x4 PUSH2 0x350F JUMP JUMPDEST PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36C4 JUMP JUMPDEST PUSH2 0x16E PUSH2 0xE00 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x27F CALLDATASIZE PUSH1 0x4 PUSH2 0x3561 JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0xE7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP3 SWAP2 SWAP1 PUSH2 0x4244 JUMP JUMPDEST PUSH2 0x16E PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x32B4 JUMP JUMPDEST PUSH2 0xF95 JUMP JUMPDEST PUSH2 0x16E PUSH2 0xFCA JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x2CE CALLDATASIZE PUSH1 0x4 PUSH2 0x316A JUMP JUMPDEST PUSH2 0xFD0 JUMP JUMPDEST PUSH2 0x2DB PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2EB PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0x2F5 DUP6 DUP6 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP PUSH2 0x301 DUP6 DUP3 PUSH2 0x1578 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x31D DUP12 DUP12 DUP12 DUP7 PUSH2 0x1A2D JUMP JUMPDEST SWAP1 POP PUSH2 0x327 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x332 DUP10 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x33C PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x347 DUP10 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x351 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x35C DUP10 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x377 PUSH2 0x36F DUP6 DUP6 DUP5 DUP7 DUP14 DUP13 PUSH2 0x1A66 JUMP JUMPDEST DUP9 PUSH1 0x0 PUSH2 0x1BEC JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x398 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x37EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3F6 DUP9 PUSH2 0x1CBF JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP DUP2 TIMESTAMP LT ISZERO PUSH2 0x422 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3831 JUMP JUMPDEST PUSH2 0x42A PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x437 DUP7 DUP7 DUP6 DUP8 DUP7 PUSH2 0x2011 JUMP JUMPDEST SWAP1 POP PUSH2 0x441 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x44D DUP3 DUP8 DUP11 DUP8 PUSH2 0x2072 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4C2 SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH2 0x4D9 DUP3 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1BEC AND JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x4FA DUP7 DUP7 DUP7 DUP7 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x552 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x53E JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP 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 SWAP1 JUMP JUMPDEST PUSH2 0x585 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x5B2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x604 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x631 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3BE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x65F DUP8 DUP8 DUP8 DUP8 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x699 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3FB4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x39BAB32D3B88604BDFBF6E8C3B1AAAF9BB6013DA4FD5206DEE9E3B00EE6F2CF9 SWAP1 PUSH2 0x6EB SWAP1 DUP8 SWAP1 DUP6 SWAP1 DUP9 SWAP1 PUSH2 0x4262 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x714 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x741 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST DUP3 PUSH2 0x75E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x38CC JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x77D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3A37 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78B DUP10 DUP10 DUP10 DUP10 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP SWAP1 ISZERO DUP1 PUSH2 0x7E6 JUMPI POP DUP1 SLOAD DUP2 SWAP1 PUSH2 0x7BB SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x7C5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x7DD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT JUMPDEST PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x4001 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x9D6 JUMPI DUP6 PUSH2 0x81F DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2202 AND JUMP JUMPDEST LT ISZERO PUSH2 0x878 JUMPI DUP7 DUP7 PUSH2 0x838 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2202 AND JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x841 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x854 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD LT PUSH2 0x878 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3EBD JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x886 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT PUSH2 0x8AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3879 JUMP JUMPDEST DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x8B6 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x5 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 DUP10 DUP6 DUP2 DUP2 LT PUSH2 0x8DE JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x904 JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP5 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 SWAP3 ADD SSTORE POP DUP3 PUSH32 0xCAAE9881BD3AC6F531C9E6021F1F873B93A83648E348624EEF8F9BA9757FCB62 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x954 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x968 SWAP2 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 PUSH32 0xCBB8D688DE73727385AFEE9D53A2771AE5FE45293FF6DE0BA46B201AB29DF115 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x99E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0x9B1 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x9C6 SWAP3 SWAP2 SWAP1 PUSH2 0x4254 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x805 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x9EB PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xA38 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x40E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA46 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0x78D22B4A9E4E0E1DB30E7762696456CA380DC80EFC59F416A299B97213B6D316 SWAP1 PUSH2 0xA8C SWAP1 DUP6 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xAB3 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xAE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xB00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3961 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x8EF429E6CEC4339C5F0187FB930764FB967114BF09BC8BB06A552BA32923FD86 SWAP1 PUSH2 0xB4B SWAP1 DUP5 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 PUSH1 0x1 EQ PUSH2 0xB7C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3F06 JUMP JUMPDEST PUSH2 0xB84 PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0xB8E DUP9 DUP9 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x220 ADD MLOAD PUSH2 0xBAA JUMPI POP PUSH1 0x0 SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP PUSH2 0xDF6 JUMP JUMPDEST DUP1 PUSH1 0xE0 ADD MLOAD TIMESTAMP LT PUSH2 0xBCD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3D45 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1B85462D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x1B85462D SWAP2 PUSH2 0xC04 SWAP2 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x365B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC2F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC53 SWAP2 SWAP1 PUSH2 0x35C0 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP8 DUP2 GT PUSH2 0xC76 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x377E JUMP JUMPDEST PUSH2 0xC7E PUSH2 0x2EEF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0xCAC DUP14 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC9D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCC0 DUP7 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCD0 DUP6 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0xCF4 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1A2D JUMP JUMPDEST SWAP1 POP PUSH2 0xCFE PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xD25 DUP14 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD12 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH2 0x180 ADD MLOAD PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0xD2F PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xD52 DUP4 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1A66 JUMP JUMPDEST SWAP1 POP PUSH2 0xD64 DUP2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2227 AND JUMP JUMPDEST ISZERO PUSH2 0xD80 JUMPI POP PUSH1 0x0 SWAP9 POP DUP9 SWAP8 POP DUP8 SWAP7 POP PUSH2 0xDF6 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD88 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xDA0 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP11 PUSH2 0x1C0 ADD MLOAD PUSH2 0x222F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDC5 DUP5 DUP8 PUSH1 0x0 ADD MLOAD DUP5 DUP10 PUSH1 0x40 ADD MLOAD DUP12 DUP15 PUSH2 0x180 ADD MLOAD DUP16 PUSH2 0x1C0 ADD MLOAD PUSH2 0x22B6 JUMP JUMPDEST PUSH1 0x40 SWAP10 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE SWAP10 SWAP1 SWAP10 KECCAK256 SLOAD PUSH1 0x1 SWAP13 POP SWAP9 SWAP11 POP SWAP8 SWAP9 POP POP POP POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xE0E PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xE3B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE44C6DD1FC3826AD24B81F17CF04849CEDD368E002A52E89A845D14D3474E20A SWAP1 PUSH2 0xE70 SWAP1 DUP4 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE86 PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0xE90 DUP6 DUP6 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP PUSH2 0xE9C DUP6 DUP3 PUSH2 0x23FE JUMP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0xEF2 JUMPI PUSH1 0x0 DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xECA JUMPI PUSH1 0x0 PUSH2 0xEE4 JUMP JUMPDEST DUP6 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEDB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH2 0x307 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEFA PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xF02 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xF0C DUP8 DUP5 PUSH2 0x1578 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xF18 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xF28 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xF4F SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2567 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH2 0x200 ADD MLOAD PUSH2 0xF68 JUMPI DUP6 PUSH2 0x100 ADD MLOAD PUSH2 0xF6F JUMP JUMPDEST DUP6 PUSH2 0x160 ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF84 DUP5 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BEC AND JUMP JUMPDEST SWAP12 SWAP3 SWAP11 POP SWAP2 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFA4 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE10 DUP2 JUMP JUMPDEST PUSH2 0xFD8 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1005 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x102B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x391B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 PUSH2 0x108E PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1096 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x1B DUP4 EQ ISZERO PUSH2 0x10BC JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x10B3 DUP7 PUSH2 0x1146 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x113D JUMP JUMPDEST PUSH1 0x1B DUP4 GT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 PUSH2 0x10D8 DUP5 PUSH1 0x1B PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1103 PUSH2 0x10FE DUP5 PUSH1 0xA EXP DUP10 PUSH2 0x11B1 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST DUP2 MSTORE POP SWAP2 POP POP PUSH2 0x113D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1B DUP5 SWAP1 SUB SWAP1 DUP1 PUSH2 0x1137 PUSH2 0x10FE DUP9 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x11F3 AND JUMP JUMPDEST SWAP1 MSTORE SWAP2 POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH2 0x116B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x39BE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x256F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x259B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1202 JUMPI POP PUSH1 0x0 PUSH2 0x1140 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x120F JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3D99 JUMP JUMPDEST PUSH2 0x1235 PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0x123D PUSH2 0x2E53 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1C0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1E0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x220 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x240 DUP3 ADD MSTORE SWAP1 DUP5 ADD MLOAD PUSH2 0x12E2 SWAP1 PUSH2 0x25D2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x200 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x12F5 SWAP1 PUSH2 0x25D2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x130B SWAP1 PUSH2 0x25D2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP4 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO PUSH2 0x13F9 JUMPI PUSH1 0x0 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1339 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x134C DUP2 PUSH2 0x1CBF JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1E0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD MSTORE PUSH2 0x120 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP7 ADD MSTORE SWAP1 DUP2 AND PUSH1 0x60 DUP6 ADD MSTORE AND PUSH1 0xA0 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EE SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x160 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x14D4 JUMPI PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1417 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x142A DUP2 PUSH2 0x1CBF JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP2 AND DUP6 MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x40 DUP1 DUP6 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14C9 SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x100 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x240 ADD MLOAD ISZERO PUSH2 0x113D JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x14F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1544 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1568 SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x180 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1580 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1588 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1590 PUSH2 0x2E40 JUMP JUMPDEST DUP4 PUSH2 0x220 ADD MLOAD PUSH2 0x15AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x15C3 JUMP JUMPDEST PUSH2 0x15C3 DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC9D JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x15CD PUSH2 0x2E40 JUMP JUMPDEST DUP5 PUSH2 0x200 ADD MLOAD PUSH2 0x15EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1600 JUMP JUMPDEST PUSH2 0x1600 DUP7 PUSH1 0x80 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC9D JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x160A PUSH2 0x2E40 JUMP JUMPDEST DUP6 PUSH2 0x240 ADD MLOAD PUSH2 0x1629 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x163D JUMP JUMPDEST PUSH2 0x163D DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD12 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1647 PUSH2 0x2E40 JUMP JUMPDEST DUP7 PUSH2 0x220 ADD MLOAD PUSH2 0x1666 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1675 JUMP JUMPDEST PUSH2 0x1675 DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x167F PUSH2 0x2F21 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x169E JUMPI DUP10 PUSH1 0x60 ADD MLOAD PUSH2 0x16A1 JUMP JUMPDEST DUP10 MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x16C3 JUMPI DUP10 PUSH1 0xA0 ADD MLOAD PUSH2 0x16C9 JUMP JUMPDEST DUP10 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x16EB JUMPI DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x16F1 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1714 JUMPI DUP10 PUSH2 0x140 ADD MLOAD PUSH2 0x171A JUMP JUMPDEST DUP10 PUSH1 0xE0 ADD MLOAD JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1734 JUMPI DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x173B JUMP JUMPDEST DUP10 PUSH2 0x1C0 ADD MLOAD JUMPDEST ISZERO ISZERO DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x60 ADD MLOAD TIMESTAMP LT ISZERO PUSH2 0x1968 JUMPI DUP8 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x18C1 JUMPI PUSH2 0x1764 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x178F SWAP2 SWAP1 PUSH2 0x1086 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH2 0x17B3 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST ISZERO PUSH2 0x17E4 JUMPI PUSH2 0x17C8 DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST PUSH2 0x17E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3B63 JUMP JUMPDEST PUSH2 0x17EC PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP11 MLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x1876 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH2 0x181F SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3604 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x184B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x186F SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1897 DUP12 PUSH1 0x0 ADD MLOAD DUP13 PUSH1 0x20 ADD MLOAD DUP14 PUSH1 0x40 ADD MLOAD DUP15 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1A2D JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x18B0 DUP3 DUP11 DUP6 DUP10 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD PUSH2 0x1A66 JUMP JUMPDEST SWAP10 POP SWAP10 POP POP POP POP POP POP POP POP POP PUSH2 0x307 JUMP JUMPDEST PUSH2 0x18C9 PUSH2 0x2E40 JUMP JUMPDEST DUP9 PUSH2 0x200 ADD MLOAD PUSH2 0x18E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x18F8 JUMP JUMPDEST PUSH2 0x18F8 DUP10 PUSH2 0x120 ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0x193E JUMPI PUSH2 0x190C PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1918 DUP8 DUP8 DUP7 DUP6 PUSH2 0x2617 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x192E DUP3 DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2664 JUMP JUMPDEST SWAP9 POP SWAP9 POP POP POP POP POP POP POP POP PUSH2 0x307 JUMP JUMPDEST PUSH2 0x1946 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1952 DUP8 DUP8 DUP7 DUP6 PUSH2 0x27C9 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x192E DUP3 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2664 JUMP JUMPDEST PUSH2 0x1970 PUSH2 0x2E40 JUMP JUMPDEST DUP9 PUSH2 0x220 ADD MLOAD PUSH2 0x198F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x19B0 DUP10 PUSH1 0x0 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH1 0xC0 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0x2011 JUMP JUMPDEST SWAP1 POP PUSH2 0x19BA PUSH2 0x2E40 JUMP JUMPDEST DUP10 PUSH2 0x200 ADD MLOAD PUSH2 0x19D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x19FC JUMP JUMPDEST PUSH2 0x19FC DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0x80 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2011 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A06 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1A12 DUP9 DUP9 DUP6 DUP6 PUSH2 0x2865 JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x18B0 DUP3 DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x2072 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1A46 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3618 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1A6E PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1A76 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1A80 DUP9 DUP6 PUSH2 0x2890 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A8A PUSH2 0x2E40 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 MSTORE PUSH2 0x1AAF PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1AB7 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1ABF PUSH2 0x2E40 JUMP JUMPDEST DUP7 ISZERO PUSH2 0x1B51 JUMPI PUSH2 0x1ADE DUP10 PUSH2 0x1AD9 DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x2A42 JUMP JUMPDEST SWAP3 POP PUSH2 0x1B18 PUSH2 0x1B03 PUSH2 0x1AF6 DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP12 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2A60 JUMP JUMPDEST SWAP2 POP PUSH2 0x1B4A DUP12 PUSH2 0x1B3E DUP5 PUSH2 0x1B32 DUP10 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A77 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1BDD JUMP JUMPDEST PUSH2 0x1B59 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1B70 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x1B PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B96 DUP2 PUSH2 0x1AD9 DUP14 PUSH2 0x1B8A DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2AA0 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1BBF PUSH2 0x1B03 PUSH2 0x1BB2 DUP14 PUSH2 0x1B8A DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP3 POP PUSH2 0x1BD9 DUP13 PUSH2 0x1B3E DUP6 PUSH2 0x1B32 DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1B DUP5 EQ ISZERO PUSH2 0x1C0A JUMPI DUP5 MLOAD PUSH2 0x1C03 SWAP1 PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB5 JUMP JUMPDEST PUSH1 0x1B DUP5 GT ISZERO PUSH2 0x1C43 JUMPI PUSH1 0x0 PUSH1 0x1B DUP6 SUB SWAP1 POP PUSH2 0x1C3B DUP2 PUSH1 0xA EXP PUSH2 0x1C2F DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x11F3 AND JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1CB5 JUMP JUMPDEST PUSH1 0x1B DUP5 SWAP1 SUB PUSH1 0x0 DUP5 PUSH2 0x1C80 JUMPI PUSH1 0x0 PUSH2 0x1C71 DUP4 PUSH1 0xA EXP PUSH2 0x1C65 DUP11 PUSH1 0x0 ADD MLOAD PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2AF2 AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1C7E JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x1CB0 DUP2 PUSH2 0x1CA4 DUP5 PUSH1 0xA EXP PUSH2 0x1C98 DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x11B1 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2202 AND JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAF0968FC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1D33 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3384 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1FF2 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAABAECD6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DAB SWAP2 SWAP1 PUSH2 0x3186 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7158DA7C 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DF8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1C SWAP2 SWAP1 PUSH2 0x3186 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D69BC8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E8D SWAP2 SWAP1 PUSH2 0x3186 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC52987CF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EFE SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F4B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F6F SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF3C274A6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FE0 SWAP2 SWAP1 PUSH2 0x34B0 JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP POP PUSH2 0x2008 JUMP JUMPDEST SWAP5 SWAP12 POP SWAP3 SWAP10 POP SWAP1 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH2 0x2008 SWAP1 POP JUMP JUMPDEST SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x2019 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2021 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x202C DUP5 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x2036 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2042 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x204C PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2058 DUP3 DUP11 DUP11 DUP11 PUSH2 0x2072 JUMP JUMPDEST SWAP1 POP PUSH2 0x2065 DUP4 DUP3 DUP8 PUSH2 0x222F JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x207A PUSH2 0x2E40 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x209B JUMPI POP DUP4 PUSH2 0x3AB JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x20D2 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x3642 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2121 SWAP2 SWAP1 PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x215C SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x3642 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21AB SWAP2 SWAP1 PUSH2 0x3591 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 DUP1 ISZERO PUSH2 0x21B9 JUMPI POP DUP1 JUMPDEST PUSH2 0x21D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3C95 JUMP JUMPDEST PUSH2 0x2065 PUSH2 0x21E3 DUP4 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1B8A PUSH2 0x21F1 DUP8 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP13 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3A00 JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2237 PUSH2 0x2E40 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x227D JUMPI PUSH2 0x224D DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST PUSH2 0x2266 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2276 JUMP JUMPDEST PUSH2 0x2276 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB8 JUMP JUMPDEST PUSH2 0x228D DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST PUSH2 0x22A6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1CB5 JUMP JUMPDEST PUSH2 0x1CB5 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22C0 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x22C8 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x22D8 DUP11 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2AA0 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x22EC TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST SWAP1 POP PUSH2 0xE10 DUP2 LT PUSH2 0x22FF JUMPI DUP2 SWAP3 POP PUSH2 0x23EC JUMP JUMPDEST PUSH2 0x2307 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x230F PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x231C PUSH1 0x1 SLOAD PUSH1 0x1B PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP DUP7 ISZERO PUSH2 0x234E JUMPI PUSH2 0x2347 PUSH2 0x1B03 PUSH2 0x233A DUP4 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP14 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP2 POP PUSH2 0x2378 JUMP JUMPDEST PUSH2 0x2375 DUP11 PUSH2 0x1B8A PUSH2 0x1B03 PUSH2 0x2368 DUP6 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP16 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x2381 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x238C DUP4 PUSH1 0x12 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x2396 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x23A3 PUSH2 0xE10 PUSH1 0x12 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x23CD PUSH2 0x23C0 DUP3 PUSH2 0x1B8A DUP6 PUSH2 0x1B3E DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A77 AND JUMP JUMPDEST SWAP6 POP PUSH2 0x23DF DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST ISZERO PUSH2 0x23E8 JUMPI DUP5 SWAP6 POP JUMPDEST POP POP POP JUMPDEST PUSH2 0x1BDD DUP4 DUP8 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1BEC AND JUMP JUMPDEST DUP2 MLOAD MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x2421 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x404F JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x20 ADD MLOAD MLOAD GT ISZERO PUSH2 0x2447 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3A7D JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x40 ADD MLOAD MLOAD GT ISZERO PUSH2 0x246D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3F57 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD MLOAD DUP3 MLOAD MLOAD EQ PUSH2 0x2493 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3B12 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD MLOAD DUP3 PUSH1 0x20 ADD MLOAD MLOAD EQ PUSH2 0x24BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x4132 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD MLOAD DUP3 PUSH1 0x40 ADD MLOAD MLOAD EQ PUSH2 0x24E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x4182 JUMP JUMPDEST PUSH2 0x24EF DUP3 DUP3 PUSH2 0x2B34 JUMP JUMPDEST PUSH2 0x250B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3CE8 JUMP JUMPDEST PUSH2 0x2515 DUP3 DUP3 PUSH2 0x2C6E JUMP JUMPDEST PUSH2 0x2531 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3E56 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x253D PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x255E SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2D0E AND JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x2593 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0x36DC JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x25BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0x36DC JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x25C8 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x1140 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x25F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT SWAP1 JUMP JUMPDEST PUSH2 0x261F PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x265B PUSH2 0x1B03 PUSH2 0x263F PUSH2 0x2632 DUP9 DUP9 PUSH2 0x2A42 JUMP JUMPDEST DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x264F DUP9 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x266C PUSH2 0x2E40 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x268D JUMPI POP DUP3 PUSH2 0x1CB8 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x26BE SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3604 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x270E SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x2744 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3604 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x275C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2770 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2794 SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST SWAP1 POP PUSH2 0x27BF PUSH2 0x27A4 DUP3 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1B8A PUSH2 0x27B2 DUP6 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x27D1 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x27F2 SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2D54 AND JUMP JUMPDEST ISZERO PUSH2 0x2811 JUMPI PUSH2 0x280A PUSH2 0x1B03 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x2819 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2831 DUP4 PUSH2 0x1B8A DUP9 PUSH2 0x1B3E DUP4 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x283B PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x284E PUSH2 0x1B03 DUP9 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x285A DUP3 DUP3 PUSH2 0x2A60 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x286D PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x265B PUSH2 0x2880 DUP4 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x264F DUP6 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x2898 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x28EE JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x28DA JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x2917 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x372F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2929 DUP5 TIMESTAMP PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 PUSH2 0x2942 PUSH1 0x1 DUP6 MLOAD PUSH2 0x116F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x294C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x2972 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x41D8 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 PUSH1 0xFF AND LT ISZERO PUSH2 0x29F2 JUMPI DUP2 DUP4 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2991 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT PUSH2 0x29EA JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 MLOAD PUSH2 0x29E0 SWAP3 SWAP1 DUP7 SWAP1 PUSH1 0xFF DUP7 AND SWAP1 DUP2 LT PUSH2 0x29C2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1B PUSH2 0x1086 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x1140 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2975 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2A03 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 PUSH2 0x2A31 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x2D5B AND JUMP JUMPDEST DUP2 PUSH2 0x2A38 JUMPI INVALID JUMPDEST SDIV SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2A4A PUSH2 0x2E40 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SLT PUSH2 0x2A59 JUMPI DUP2 PUSH2 0x113D JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A68 PUSH2 0x2E40 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SGT PUSH2 0x2A59 JUMPI DUP2 PUSH2 0x113D JUMP JUMPDEST PUSH2 0x2A7F PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x255E SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2DC6 AND JUMP JUMPDEST PUSH2 0x2AA8 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 SWAP1 PUSH2 0x2A31 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x2D5B AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x2AEB JUMPI DUP2 PUSH1 0x0 SUB SWAP1 POP PUSH2 0x4E5 JUMP JUMPDEST POP DUP1 PUSH2 0x4E5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0x2E0C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x2B67 JUMPI DUP2 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x2B67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3C38 JUMP JUMPDEST DUP2 PUSH2 0x200 ADD MLOAD ISZERO DUP1 PUSH2 0x2B7C JUMPI POP DUP2 PUSH2 0x220 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2B89 JUMPI POP PUSH1 0x1 PUSH2 0x1140 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2B96 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2BB8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2BF0 JUMPI POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2C15 JUMPI POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2C3A JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2C4E JUMPI POP DUP2 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x140 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0x113D JUMPI POP DUP2 PUSH2 0x1C0 ADD MLOAD ISZERO ISZERO DUP3 PUSH2 0x1E0 ADD MLOAD ISZERO ISZERO EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x240 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2C85 JUMPI SWAP1 POP PUSH2 0x1140 JUMP JUMPDEST DUP3 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x2CC8 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CA1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x113D JUMP JUMPDEST DUP3 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x113D JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CE4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2D23 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x2D38 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2D38 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x40A4 JUMP JUMPDEST MLOAD SWAP1 MLOAD EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2D6A JUMPI POP PUSH1 0x0 PUSH2 0x1140 JUMP JUMPDEST DUP3 PUSH1 0x0 NOT EQ DUP1 ISZERO PUSH2 0x2D7E JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ JUMPDEST ISZERO PUSH2 0x2D9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3E0F JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2DA8 JUMPI INVALID JUMPDEST SDIV EQ PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3E0F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2DDB JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x2DF0 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2DF0 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3AD1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2E2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0x36DC JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0x2E37 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 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 SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x2F02 PUSH2 0x2E40 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2F0F PUSH2 0x2E40 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2F1C PUSH2 0x2E40 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F5F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2F72 PUSH2 0x2F6D DUP3 PUSH2 0x429F JUMP JUMPDEST PUSH2 0x4278 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x2F93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2FBB JUMPI DUP2 CALLDATALOAD PUSH2 0x2FA9 DUP2 PUSH2 0x42BF JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2F96 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2FD7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2FEE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3018 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3026 PUSH2 0x2F6D DUP3 PUSH2 0x429F JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x3047 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2FBB JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x304A JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3077 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x3081 PUSH1 0xC0 PUSH2 0x4278 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x309B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30A7 DUP6 DUP4 DUP7 ADD PUSH2 0x2F4F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x30BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30C9 DUP6 DUP4 DUP7 ADD PUSH2 0x2F4F JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x30E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30EE DUP6 DUP4 DUP7 ADD PUSH2 0x2F4F JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3113 DUP6 DUP4 DUP7 ADD PUSH2 0x3008 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x312C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3138 DUP6 DUP4 DUP7 ADD PUSH2 0x3008 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x315E DUP5 DUP3 DUP6 ADD PUSH2 0x3008 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x317B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x113D DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3197 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x113D DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x31B7 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x31C2 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x31D2 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x31E2 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x31F2 DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3218 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3223 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x3233 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3243 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3253 DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x326F JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x327B DUP13 DUP4 DUP14 ADD PUSH2 0x2FC6 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3293 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x32A0 DUP12 DUP3 DUP13 ADD PUSH2 0x2FC6 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x32CB JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x32D6 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x32E6 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x32F6 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3306 DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x332F JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x333A DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x334A DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x335A DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x336A DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x339C JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH2 0x33A7 DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x33B8 DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH2 0x33C9 DUP2 PUSH2 0x42BF JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x33E9 DUP2 PUSH2 0x42D7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x3415 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH2 0x3420 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD PUSH2 0x3430 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH2 0x3440 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x100 DUP11 ADD CALLDATALOAD PUSH2 0x3474 DUP2 PUSH2 0x42D7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3497 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x34A2 DUP2 PUSH2 0x42BF 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 0x34C1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x113D DUP2 PUSH2 0x42D7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34DE JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x34F4 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x3500 DUP6 DUP3 DUP7 ADD PUSH2 0x3066 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3524 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x353A JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x3546 DUP8 DUP3 DUP9 ADD PUSH2 0x3066 JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3572 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x358A JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35A3 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x35B5 DUP2 PUSH2 0x42D7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D2 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35F4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x113D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x40 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 0x36B8 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x369C JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3708 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x36EC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3719 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x6F206578706972792076616C756573 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x46 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2061756374696F6E2074696D657374 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x616D702073686F756C6420626520706F7374207661756C74206C617465737420 PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x757064617465 PUSH1 0xD0 SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20496E76616C696420746F6B656E20 PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x61646472657373 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204F746F6B656E206E6F7420657870 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1A5C9959081E595D PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E6F206578706972792075707065 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1C88189BDD5B99081D985B1D5948199BDD5B99 PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642074696D657320 PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x746F20657870697279206172726179 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206475737420616D6F756E74207368 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6F756C642062652067726561746572207468616E207A65726F00000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642076616C756573 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x206172726179 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E79206C6F6E6720 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x1BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x62 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2053686F727420617373657420616E PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0xC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x7B SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742073686F756C64206861766520636F6C6C61746572616C20616D6F75 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0x6E742067726561746572207468616E206475737420616D6F756E740000000000 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964206F7074696F6E PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x20757070657220626F756E642076616C7565 PUSH1 0x70 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3C SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742063616E6E6F742068617665206C6F6E67206F746F6B656E00000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A207072696365206174206578706972 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1E481B9BDD08199A5B985B1A5E9959081E595D PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206C6F6E67206173736574206E6F74 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x206D617267696E61626C6520666F722073686F72742061737365740000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2063616E206E6F74206C6971756964 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x30BA329032BC3834B932B2103837B9B4BA34B7B7 PUSH1 0x61 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206D756C7469706C69636174696F6E206F PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x766572666C6F77 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x41 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20636F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6574206E6F74206D617267696E61626C6520666F722073686F72742061737365 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2074696D652073686F756C64206265 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x1034B71037B93232B9 PUSH1 0xB9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964207661756C7420 PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0x7479706520746F206C6971756964617465 PUSH1 0x78 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E7920636F6C6C61 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746572616C2061737365747320696E20746865207661756C7400000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20757070657220626F756E64207661 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1B1D59481B9BDD08199BDD5B99 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206578706972792061727261792069 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x39903737BA1034B71037B93232B9 PUSH1 0x91 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x35 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E792073686F7274 PUSH1 0x40 DUP3 ADD MSTORE PUSH21 0x81BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x5A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642073706F742073 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x686F636B2076616C7565 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x30 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204C6F6E6720617373657420616E64 PUSH1 0x40 DUP3 ADD MSTORE PUSH16 0x40C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x83 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20436F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH22 0xCAE840C2DCC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x53 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x6F20757070657220626F756E642076616C7565 PUSH1 0x68 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP2 MLOAD DUP3 MSTORE MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x42B5 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x42D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x42D4 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xD9 0xE8 LOG2 CALLDATASIZE LOG3 ORIGIN 0xB5 0x4C SAR PUSH2 0x40D7 SLOAD NOT 0xD0 CODESIZE 0xC5 ORIGIN DUP3 PUSH23 0x1724C26E7B50467162817D64736F6C634300060A003300 ",
+ "sourceMap": "711:52416:2:-:0;;;1992:27;2011:1;1049;1992:18;;;;;:27;;:::i;:::-;1958:61;;;3804:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;893:17:48;913:12;-1:-1:-1;;;;;913:10:48;:12;:::i;:::-;935:6;:18;;-1:-1:-1;;;;;;935:18:48;-1:-1:-1;;;;;935:18:48;;;;;;;968:43;;935:18;;-1:-1:-1;935:18:48;968:43;;935:6;;968:43;-1:-1:-1;;;;;;3858:21:2;;3850:74;;;;-1:-1:-1;;;3850:74:2;;;;;;;;;;;;;;;;;3935:6;:33;;-1:-1:-1;;;;;;3935:33:2;-1:-1:-1;;;;;3935:33:2;;;;;;;;;;711:52416;;1493:601:27;1571:20;;:::i;:::-;1603:31;;:::i;:::-;549:2;1649:9;:26;1645:415;;;1704:29;;;;;;;;1718:14;:2;:12;;;;;:14;;:::i;:::-;1704:29;;1691:42;-1:-1:-1;1645:415:27;;;549:2;1754:9;:25;1750:310;;;1795:11;1809:28;549:2;1809:9;:13;;;;;;:28;;;;:::i;:::-;1795:42;;1864:44;;;;;;;;1878:29;1879:15;1890:3;1886:2;:7;1879:2;:6;;;;;;:15;;;;:::i;:::-;1878:27;;;;;:29;;:::i;:::-;1864:44;;;1851:57;;1750:310;;;;1939:11;1969:9;549:2;1953:25;1939:39;;2005:44;;;;;;;;2019:29;2020:15;2031:3;2027:2;:7;2020:2;:6;;;;;;:15;;;;:::i;2019:29::-;2005:44;;1992:57;-1:-1:-1;;1750:310:27;2077:10;-1:-1:-1;1493:601:27;;;;;:::o;623:104:46:-;710:10;623:104;:::o;439:162:29:-;492:6;-1:-1:-1;;;518:1:29;:10;510:57;;;;-1:-1:-1;;;510:57:29;;;;;;;;;-1:-1:-1;592:1:29;439:162::o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;;;:43;;:::i;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;:3;;;:39;;:::i;2237:459::-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;1780:217;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;3756:368::-;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o;711:52416:2:-;;;;;;;;;;;;;;:::o;146:263:-1:-;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;3962:54;;4469:35;;4459:2;;-1:-1;;4508:12;1915:310;;2062:2;;2083:17;2076:47;561:5;3589:12;3746:6;2062:2;2051:9;2047:18;3734:19;-1:-1;4101:101;4115:6;4112:1;4109:13;4101:101;;;4182:11;;;;;4176:18;4163:11;;;3774:14;4163:11;4156:39;4130:10;;4101:101;;;4217:6;4214:1;4211:13;4208:2;;;-1:-1;3774:14;4273:6;2051:9;4264:16;;4257:27;4208:2;-1:-1;4389:7;4373:14;-1:-1;;4369:28;719:39;;;;3774:14;719:39;;2033:192;-1:-1;;;2033:192;2232:416;2432:2;2446:47;;;995:2;2417:18;;;3734:19;1031:34;3774:14;;;1011:55;-1:-1;;;1086:12;;;1079:26;1124:12;;;2403:245;2655:416;2855:2;2869:47;;;1375:2;2840:18;;;3734:19;1411:34;3774:14;;;1391:55;-1:-1;;;1466:12;;;1459:25;1503:12;;;2826:245;3078:416;3278:2;3292:47;;;1754:2;3263:18;;;3734:19;1790:34;3774:14;;;1770:55;-1:-1;;;1845:12;;;1838:32;1889:12;;;3249:245;;711:52416:2;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061012c5760003560e01c80638aab8fa5116100ad578063c73547e311610071578063c73547e314610271578063cd43fbfb14610284578063dc1b3f00146102a5578063e592301a146102b8578063f2fde38b146102c05761012c565b80638aab8fa5146102195780638da5cb5b1461022c5780639a783d1114610234578063a6c5690714610247578063b29d5ee8146102695761012c565b80636ccb9506116100f45780636ccb9506146101c1578063715018a6146101d45780637ad7f800146101de5780637dc0d1d0146101f15780637f519b72146102065761012c565b8063053fe57c146101315780630b0509fb1461015b578063463459001461017b578063478409301461018e57806347d438a5146101a1575b600080fd5b61014461013f3660046134cc565b6102d3565b60405161015292919061422b565b60405180910390f35b61016e6101693660046133f7565b61030e565b604051610152919061423b565b61016e6101893660046131a2565b610389565b61016e61019c36600461316a565b6103b3565b6101b46101af3660046131a2565b6104ea565b6040516101529190613680565b61016e6101cf36600461316a565b610562565b6101dc61057d565b005b6101dc6101ec366004613317565b6105fc565b6101f96106fd565b6040516101529190613604565b6101dc6102143660046131fd565b61070c565b6101dc6102273660046132b4565b6109e3565b6101f9610a9c565b6101dc610242366004613485565b610aab565b61025a61025536600461350f565b610b57565b604051610152939291906136c4565b61016e610e00565b6101dc61027f366004613561565b610e06565b6102976102923660046134cc565b610e7b565b604051610152929190614244565b61016e6102b33660046132b4565b610f95565b61016e610fca565b6101dc6102ce36600461316a565b610fd0565b6102db612e40565b6102e3612e40565b6102eb612e53565b6102f5858561122d565b90506103018582611578565b92509250505b9250929050565b60008061031d8b8b8b86611a2d565b9050610327612e40565b610332896008611086565b905061033c612e40565b610347896008611086565b9050610351612e40565b61035c896008611086565b905061037761036f858584868d8c611a66565b886000611bec565b9e9d5050505050505050505050505050565b60008061039886868686611a2d565b6000908152600660205260409020549150505b949350505050565b60006001600160a01b0382166103e45760405162461bcd60e51b81526004016103db906137ea565b60405180910390fd5b6000806000806000806103f688611cbf565b955095509550955095509550814210156104225760405162461bcd60e51b81526004016103db90613831565b61042a612e40565b6104378686858786612011565b9050610441612e40565b61044d82878a87612072565b90506000886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561048a57600080fd5b505afa15801561049e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c291906135e3565b60ff1690506104d98282600163ffffffff611bec16565b99505050505050505050505b919050565b606060006104fa86868686611a2d565b600081815260046020908152604091829020805483518184028101840190945280845293945091929083018282801561055257602002820191906000526020600020905b81548152602001906001019080831161053e575b5050505050915050949350505050565b6001600160a01b031660009081526003602052604090205490565b6105856121fe565b6000546001600160a01b039081169116146105b25760405162461bcd60e51b81526004016103db90613dda565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6106046121fe565b6000546001600160a01b039081169116146106315760405162461bcd60e51b81526004016103db90613dda565b600081116106515760405162461bcd60e51b81526004016103db90613be6565b600061065f87878787611a2d565b6000818152600560209081526040808320878452909152902054909150806106995760405162461bcd60e51b81526004016103db90613fb4565b6000828152600560209081526040808320878452909152908190208490555182907f39bab32d3b88604bdfbf6e8c3b1aaaf9bb6013da4fd5206dee9e3b00ee6f2cf9906106eb90879085908890614262565b60405180910390a25050505050505050565b6007546001600160a01b031681565b6107146121fe565b6000546001600160a01b039081169116146107415760405162461bcd60e51b81526004016103db90613dda565b8261075e5760405162461bcd60e51b81526004016103db906138cc565b82811461077d5760405162461bcd60e51b81526004016103db90613a37565b600061078b89898989611a2d565b600081815260046020526040902080549192509015806107e65750805481906107bb90600163ffffffff61116f16565b815481106107c557fe5b9060005260206000200154868660008181106107dd57fe5b90506020020135115b6108025760405162461bcd60e51b81526004016103db90614001565b60005b858110156109d6578561081f82600163ffffffff61220216565b101561087857868661083883600163ffffffff61220216565b81811061084157fe5b9050602002013587878381811061085457fe5b90506020020135106108785760405162461bcd60e51b81526004016103db90613ebd565b600085858381811061088657fe5b90506020020135116108aa5760405162461bcd60e51b81526004016103db90613879565b8484828181106108b657fe5b905060200201356005600085815260200190815260200160002060008989858181106108de57fe5b905060200201358152602001908152602001600020819055508187878381811061090457fe5b83546001810185556000948552602094859020919094029290920135919092015550827fcaae9881bd3ac6f531c9e6021f1f873b93a83648e348624eef8f9ba9757fcb6288888481811061095457fe5b90506020020135604051610968919061423b565b60405180910390a2827fcbb8d688de73727385afee9d53a2771ae5fe45293ff6de0ba46b201ab29df11588888481811061099e57fe5b905060200201358787858181106109b157fe5b905060200201356040516109c6929190614254565b60405180910390a2600101610805565b5050505050505050505050565b6109eb6121fe565b6000546001600160a01b03908116911614610a185760405162461bcd60e51b81526004016103db90613dda565b60008111610a385760405162461bcd60e51b81526004016103db906140e8565b6000610a4686868686611a2d565b600081815260066020526040908190208490555190915081907f78d22b4a9e4e0e1db30e7762696456ca380dc80efc59f416a299b97213b6d31690610a8c90859061423b565b60405180910390a2505050505050565b6000546001600160a01b031690565b610ab36121fe565b6000546001600160a01b03908116911614610ae05760405162461bcd60e51b81526004016103db90613dda565b60008111610b005760405162461bcd60e51b81526004016103db90613961565b6001600160a01b03821660008181526003602052604090819020839055517f8ef429e6cec4339c5f0187fb930764fb967114bf09bc8bb06a552ba32923fd8690610b4b90849061423b565b60405180910390a25050565b600080600085600114610b7c5760405162461bcd60e51b81526004016103db90613f06565b610b84612e53565b610b8e888861122d565b9050806102200151610baa575060009250829150819050610df6565b8060e001514210610bcd5760405162461bcd60e51b81526004016103db90613d45565b6007548151604051631b85462d60e01b815260009283926001600160a01b0390911691631b85462d91610c04918b9060040161365b565b604080518083038186803b158015610c1b57600080fd5b505afa158015610c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5391906135c0565b91509150878111610c765760405162461bcd60e51b81526004016103db9061377e565b610c7e612eef565b6040518060600160405280610cac8d60600151600081518110610c9d57fe5b60200260200101516008611086565b8152602001610cc08660c001516008611086565b8152602001610cd0856008611086565b81525090506000610cf4856000015186602001518760400151886101c00151611a2d565b9050610cfe612e40565b610d258d60a00151600081518110610d1257fe5b6020026020010151876101800151611086565b9050610d2f612e40565b610d52838560000151866040015187602001518b60e001518c6101c00151611a66565b9050610d64818363ffffffff61222716565b15610d80575060009850889750879650610df695505050505050565b610d88612e40565b610da0856020015186604001518a6101c0015161222f565b90506000610dc58487600001518489604001518b8e61018001518f6101c001516122b6565b6040998a01516001600160a01b031660009081526003602052999099205460019c50989a5097985050505050505050505b9450945094915050565b60015490565b610e0e6121fe565b6000546001600160a01b03908116911614610e3b5760405162461bcd60e51b81526004016103db90613dda565b60018190556040517fe44c6dd1fc3826ad24b81f17cf04849cedd368e002a52e89a845d14d3474e20a90610e7090839061423b565b60405180910390a150565b600080610e86612e53565b610e90858561122d565b9050610e9c85826123fe565b806102200151158015610eb25750806102000151155b15610ef2576000816102400151610eca576000610ee4565b8560a00151600081518110610edb57fe5b60200260200101515b935060019250610307915050565b610efa612e40565b610f02612e40565b610f0c8784611578565b91509150610f18612e40565b610f28838363ffffffff61253516565b60408051602081019091526002548152909150600090610f4f90839063ffffffff61256716565b90506000856102000151610f6857856101000151610f6f565b8561016001515b90506000610f8484838563ffffffff611bec16565b9b929a509198505050505050505050565b600080610fa487878787611a2d565b600090815260056020908152604080832086845290915290205491505095945050505050565b610e1081565b610fd86121fe565b6000546001600160a01b039081169116146110055760405162461bcd60e51b81526004016103db90613dda565b6001600160a01b03811661102b5760405162461bcd60e51b81526004016103db9061391b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61108e612e40565b611096612e40565b601b8314156110bc5760405180602001604052806110b386611146565b9052905061113d565b601b83111561110e5760006110d884601b63ffffffff61116f16565b905060405180602001604052806111036110fe84600a0a896111b190919063ffffffff16565b611146565b81525091505061113d565b6040805160208101909152601b84900390806111376110fe88600a86900a63ffffffff6111f316565b90529150505b90505b92915050565b6000600160ff1b821061116b5760405162461bcd60e51b81526004016103db906139be565b5090565b600061113d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061256f565b600061113d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061259b565b60008261120257506000611140565b8282028284828161120f57fe5b041461113d5760405162461bcd60e51b81526004016103db90613d99565b611235612e53565b61123d612e53565b50604080516102608101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c082018190526101e0820181905261020082018190526102208201819052610240820152908401516112e2906125d2565b151561020082015283516112f5906125d2565b1515610220820152604084015161130b906125d2565b15156102408201526101a08101839052610200810151156113f9576000846020015160008151811061133957fe5b6020026020010151905061134c81611cbf565b15156101e08801526101408701526101208601526001600160a01b03908116608086015290811660608501521660a083018190526040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b1580156113b657600080fd5b505afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee91906135e3565b60ff16610160830152505b806102200151156114d4576000846000015160008151811061141757fe5b6020026020010151905061142a81611cbf565b15156101c088015260e087015260c08601526001600160a01b039081166020808701919091529181168552919091166040808501829052805163313ce56760e01b81529051919263313ce56792600480840193829003018186803b15801561149157600080fd5b505afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906135e3565b60ff16610100830152505b8061024001511561113d5783604001516000815181106114f057fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561153057600080fd5b505afa158015611544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156891906135e3565b60ff166101808201529392505050565b611580612e40565b611588612e40565b611590612e40565b8361022001516115af57604080516020810190915260025481526115c3565b6115c38560600151600081518110610c9d57fe5b90506115cd612e40565b8461020001516115ec5760408051602081019091526002548152611600565b6116008660800151600081518110610c9d57fe5b905061160a612e40565b856102400151611629576040805160208101909152600254815261163d565b61163d8760a00151600081518110610d1257fe5b9050611647612e40565b8661022001516116665760408051602081019091526002548152611675565b6116758760c001516008611086565b905061167f612f21565b6040518060a0016040528089610220015161169e5789606001516116a1565b89515b6001600160a01b031681526020018961022001516116c3578960a001516116c9565b89604001515b6001600160a01b031681526020018961022001516116eb5789608001516116f1565b89602001515b6001600160a01b031681526020018961022001516117145789610140015161171a565b8960e001515b815260200189610220015161173457896101e0015161173b565b896101c001515b15158152509050806060015142101561196857876101a00151600114156118c157611764612e40565b6040808a01516001600160a01b03166000908152600360205220546101808a015161178f9190611086565b604080516020810190915260025481529091506117b390859063ffffffff61261016565b156117e4576117c8848263ffffffff61261016565b6117e45760405162461bcd60e51b81526004016103db90613b63565b6117ec612e40565b6007548a516040516341976e0960e01b8152611876926001600160a01b0316916341976e099161181f9190600401613604565b60206040518083038186803b15801561183757600080fd5b505afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f9190613579565b6008611086565b905060006118978b600001518c602001518d604001518e6101c00151611a2d565b9050856118b0828a858989606001518a60800151611a66565b995099505050505050505050610307565b6118c9612e40565b8861020001516118e857604080516020810190915260025481526118f8565b6118f88961012001516008611086565b905081608001511561193e5761190c612e40565b61191887878685612617565b90508461192e8285604001518660200151612664565b9850985050505050505050610307565b611946612e40565b611952878786856127c9565b90508461192e8285600001518660200151612664565b611970612e40565b88610220015161198f57604080516020810190915260025481526119b0565b6119b089600001518a602001518b60e001518c60c001518660800151612011565b90506119ba612e40565b8961020001516119d957604080516020810190915260025481526119fc565b6119fc8a606001518b608001518c61014001518d61012001518760800151612011565b9050611a06612e40565b611a1288888585612865565b9050856118b082866040015187602001518860600151612072565b600084848484604051602001611a469493929190613618565b604051602081830303815290604052805190602001209050949350505050565b611a6e612e40565b611a76612e40565b611a808885612890565b9050611a8a612e40565b50604080516020808201835260008b8152600690915291909120548152611aaf612e40565b611ab7612e40565b611abf612e40565b8615611b5157611ade89611ad9868d63ffffffff6129fb16565b612a42565b9250611b18611b03611af6868d63ffffffff6129fb16565b8b9063ffffffff61253516565b60408051602081019091526002548152612a60565b9150611b4a8b611b3e84611b32898863ffffffff6129fb16565b9063ffffffff612a7716565b9063ffffffff6129fb16565b9050611bdd565b611b59612e40565b611b706b033b2e3c9fd0803ce8000000601b611086565b9050611b9681611ad98d611b8a8e8a63ffffffff6129fb16565b9063ffffffff612aa016565b9350611bbf611b03611bb28d611b8a8e8a63ffffffff6129fb16565b839063ffffffff61253516565b9250611bd98c611b3e85611b328a8963ffffffff6129fb16565b9150505b9b9a5050505050505050505050565b600080601b841415611c0a578451611c0390612ad6565b9050611cb5565b601b841115611c43576000601b85039050611c3b81600a0a611c2f8860000151612ad6565b9063ffffffff6111f316565b915050611cb5565b601b849003600084611c80576000611c7183600a0a611c658a60000151612ad6565b9063ffffffff612af216565b90508015611c7e57600191505b505b611cb081611ca484600a0a611c988b60000151612ad6565b9063ffffffff6111b116565b9063ffffffff61220216565b925050505b90505b9392505050565b6000806000806000806000879050806001600160a01b031663af0968fc6040518163ffffffff1660e01b815260040160c06040518083038186803b158015611d0657600080fd5b505afa925050508015611d36575060408051601f3d908101601f19168201909252611d3391810190613384565b60015b611ff257806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b158015611d7357600080fd5b505afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab9190613186565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611de457600080fd5b505afa158015611df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1c9190613186565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5557600080fd5b505afa158015611e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8d9190613186565b836001600160a01b031663c52987cf6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec657600080fd5b505afa158015611eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efe9190613579565b846001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f9190613579565b856001600160a01b031663f3c274a66040518163ffffffff1660e01b815260040160206040518083038186803b158015611fa857600080fd5b505afa158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe091906134b0565b96509650965096509650965050612008565b949b509299509097509550935091506120089050565b91939550919395565b612019612e40565b612021612e40565b61202c846008611086565b9050612036612e40565b61204260016000611086565b905061204c612e40565b612058828a8a8a612072565b905061206583828761222f565b9998505050505050505050565b61207a612e40565b826001600160a01b0316846001600160a01b0316141561209b5750836103ab565b6007546040516301957f8160e01b815260009182916001600160a01b03909116906301957f81906120d29089908890600401613642565b604080518083038186803b1580156120e957600080fd5b505afa1580156120fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121219190613591565b6007546040516301957f8160e01b815292945090925060009182916001600160a01b0316906301957f819061215c908a908a90600401613642565b604080518083038186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190613591565b915091508280156121b95750805b6121d55760405162461bcd60e51b81526004016103db90613c95565b6120656121e3836008611086565b611b8a6121f1876008611086565b8c9063ffffffff6129fb16565b3390565b60008282018381101561113d5760405162461bcd60e51b81526004016103db90613a00565b519051131590565b612237612e40565b811561227d5761224d848463ffffffff61261016565b6122665760408051602081019091526002548152612276565b612276848463ffffffff61253516565b9050611cb8565b61228d838563ffffffff61261016565b6122a65760408051602081019091526002548152611cb5565b611cb5838563ffffffff61253516565b60006122c0612e40565b6122c8612e40565b6122d88a8a63ffffffff612aa016565b905060006122ec428863ffffffff61116f16565b9050610e1081106122ff578192506123ec565b612307612e40565b61230f612e40565b61231c600154601b611086565b9050861561234e57612347611b0361233a838d63ffffffff6129fb16565b8d9063ffffffff61253516565b9150612378565b6123758a611b8a611b03612368858463ffffffff6129fb16565b8f9063ffffffff61253516565b91505b50612381612e40565b61238c836012611086565b9050612396612e40565b6123a3610e106012611086565b90506123cd6123c082611b8a85611b3e8a8963ffffffff61253516565b849063ffffffff612a7716565b95506123df868663ffffffff61261016565b156123e8578495505b5050505b611bdd8387600163ffffffff611bec16565b815151600110156124215760405162461bcd60e51b81526004016103db9061404f565b600182602001515111156124475760405162461bcd60e51b81526004016103db90613a7d565b6001826040015151111561246d5760405162461bcd60e51b81526004016103db90613f57565b606082015151825151146124935760405162461bcd60e51b81526004016103db90613b12565b816080015151826020015151146124bc5760405162461bcd60e51b81526004016103db90614132565b8160a0015151826040015151146124e55760405162461bcd60e51b81526004016103db90614182565b6124ef8282612b34565b61250b5760405162461bcd60e51b81526004016103db90613ce8565b6125158282612c6e565b6125315760405162461bcd60e51b81526004016103db90613e56565b5050565b61253d612e40565b604080516020810190915282518451829161255e919063ffffffff612d0e16565b90529392505050565b519051121590565b600081848411156125935760405162461bcd60e51b81526004016103db91906136dc565b505050900390565b600081836125bc5760405162461bcd60e51b81526004016103db91906136dc565b5060008385816125c857fe5b0495945050505050565b6000808251118015611140575060006001600160a01b0316826000815181106125f757fe5b60200260200101516001600160a01b0316141592915050565b5190511390565b61261f612e40565b61265b611b0361263f6126328888612a42565b859063ffffffff6129fb16565b61264f888763ffffffff6129fb16565b9063ffffffff61253516565b95945050505050565b61266c612e40565b816001600160a01b0316836001600160a01b0316141561268d575082611cb8565b6007546040516341976e0960e01b81526000916001600160a01b0316906341976e09906126be908790600401613604565b60206040518083038186803b1580156126d657600080fd5b505afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e9190613579565b6007546040516341976e0960e01b81529192506000916001600160a01b03909116906341976e0990612744908790600401613604565b60206040518083038186803b15801561275c57600080fd5b505afa158015612770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127949190613579565b90506127bf6127a4826008611086565b611b8a6127b2856008611086565b899063ffffffff6129fb16565b9695505050505050565b6127d1612e40565b604080516020810190915260025481526127f290839063ffffffff612d5416565b156128115761280a611b03868663ffffffff61253516565b90506103ab565b612819612e40565b61283183611b8a88611b3e838963ffffffff61253516565b905061283b612e40565b61284e611b03888863ffffffff61253516565b905061285a8282612a60565b979650505050505050565b61286d612e40565b61265b612880838663ffffffff6129fb16565b61264f858863ffffffff6129fb16565b612898612e40565b6000838152600460209081526040918290208054835181840281018401909452808452606093928301828280156128ee57602002820191906000526020600020905b8154815260200190600101908083116128da575b505050505090508051600014156129175760405162461bcd60e51b81526004016103db9061372f565b6000612929844263ffffffff61116f16565b905080826129426001855161116f90919063ffffffff16565b8151811061294c57fe5b602002602001015110156129725760405162461bcd60e51b81526004016103db906141d8565b60005b82518160ff1610156129f25781838260ff168151811061299157fe5b6020026020010151106129ea57600086815260056020526040812084516129e09290869060ff86169081106129c257fe5b6020026020010151815260200190815260200160002054601b611086565b9350505050611140565b600101612975565b50505092915050565b612a03612e40565b60408051602081019091528251845182916b033b2e3c9fd0803ce800000091612a319163ffffffff612d5b16565b81612a3857fe5b0590529392505050565b612a4a612e40565b8151835112612a59578161113d565b5090919050565b612a68612e40565b8151835113612a59578161113d565b612a7f612e40565b604080516020810190915282518451829161255e919063ffffffff612dc616565b612aa8612e40565b604080516020810190915282518451829190612a31906b033b2e3c9fd0803ce800000063ffffffff612d5b16565b600080821215612aeb578160000390506104e5565b50806104e5565b600061113d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612e0c565b6000816101a0015160011415612b675781610200015115612b675760405162461bcd60e51b81526004016103db90613c38565b8161020001511580612b7c5750816102200151155b15612b8957506001611140565b82518051600090612b9657fe5b60200260200101516001600160a01b03168360200151600081518110612bb857fe5b60200260200101516001600160a01b031614158015612bf0575081600001516001600160a01b031682606001516001600160a01b0316145b8015612c15575081602001516001600160a01b031682608001516001600160a01b0316145b8015612c3a575081604001516001600160a01b03168260a001516001600160a01b0316145b8015612c4e57508160e00151826101400151145b801561113d5750816101c001511515826101e00151151514905092915050565b610240810151600090600190612c85579050611140565b82610220015115612cc8578360400151600081518110612ca157fe5b60200260200101516001600160a01b031683604001516001600160a01b031614905061113d565b8261020001511561113d578360400151600081518110612ce457fe5b60200260200101516001600160a01b03168360a001516001600160a01b0316149050905092915050565b6000818303818312801590612d235750838113155b80612d385750600083128015612d3857508381135b61113d5760405162461bcd60e51b81526004016103db906140a4565b5190511490565b600082612d6a57506000611140565b82600019148015612d7e5750600160ff1b82145b15612d9b5760405162461bcd60e51b81526004016103db90613e0f565b82820282848281612da857fe5b051461113d5760405162461bcd60e51b81526004016103db90613e0f565b6000828201818312801590612ddb5750838112155b80612df05750600083128015612df057508381125b61113d5760405162461bcd60e51b81526004016103db90613ad1565b60008183612e2d5760405162461bcd60e51b81526004016103db91906136dc565b50828481612e3757fe5b06949350505050565b6040518060200160405280600081525090565b6040805161026081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101829052610220810182905261024081019190915290565b6040518060600160405280612f02612e40565b8152602001612f0f612e40565b8152602001612f1c612e40565b905290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b600082601f830112612f5f578081fd5b8135612f72612f6d8261429f565b614278565b818152915060208083019084810181840286018201871015612f9357600080fd5b60005b84811015612fbb578135612fa9816142bf565b84529282019290820190600101612f96565b505050505092915050565b60008083601f840112612fd7578081fd5b50813567ffffffffffffffff811115612fee578182fd5b602083019150836020808302850101111561030757600080fd5b600082601f830112613018578081fd5b8135613026612f6d8261429f565b81815291506020808301908481018184028601820187101561304757600080fd5b60005b84811015612fbb5781358452928201929082019060010161304a565b600060c08284031215613077578081fd5b61308160c0614278565b9050813567ffffffffffffffff8082111561309b57600080fd5b6130a785838601612f4f565b835260208401359150808211156130bd57600080fd5b6130c985838601612f4f565b602084015260408401359150808211156130e257600080fd5b6130ee85838601612f4f565b6040840152606084013591508082111561310757600080fd5b61311385838601613008565b6060840152608084013591508082111561312c57600080fd5b61313885838601613008565b608084015260a084013591508082111561315157600080fd5b5061315e84828501613008565b60a08301525092915050565b60006020828403121561317b578081fd5b813561113d816142bf565b600060208284031215613197578081fd5b815161113d816142bf565b600080600080608085870312156131b7578283fd5b84356131c2816142bf565b935060208501356131d2816142bf565b925060408501356131e2816142bf565b915060608501356131f2816142d7565b939692955090935050565b60008060008060008060008060c0898b031215613218578384fd5b8835613223816142bf565b97506020890135613233816142bf565b96506040890135613243816142bf565b95506060890135613253816142d7565b9450608089013567ffffffffffffffff8082111561326f578586fd5b61327b8c838d01612fc6565b909650945060a08b0135915080821115613293578384fd5b506132a08b828c01612fc6565b999c989b5096995094979396929594505050565b600080600080600060a086880312156132cb578081fd5b85356132d6816142bf565b945060208601356132e6816142bf565b935060408601356132f6816142bf565b92506060860135613306816142d7565b949793965091946080013592915050565b60008060008060008060c0878903121561332f578182fd5b863561333a816142bf565b9550602087013561334a816142bf565b9450604087013561335a816142bf565b9350606087013561336a816142d7565b9598949750929560808101359460a0909101359350915050565b60008060008060008060c0878903121561339c578182fd5b86516133a7816142bf565b60208801519096506133b8816142bf565b60408801519095506133c9816142bf565b80945050606087015192506080870151915060a08701516133e9816142d7565b809150509295509295509295565b60008060008060008060008060006101208a8c031215613415578283fd5b8935613420816142bf565b985060208a0135613430816142bf565b975060408a0135613440816142bf565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a0135613474816142d7565b809150509295985092959850929598565b60008060408385031215613497578182fd5b82356134a2816142bf565b946020939093013593505050565b6000602082840312156134c1578081fd5b815161113d816142d7565b600080604083850312156134de578182fd5b823567ffffffffffffffff8111156134f4578283fd5b61350085828601613066565b95602094909401359450505050565b60008060008060808587031215613524578182fd5b843567ffffffffffffffff81111561353a578283fd5b61354687828801613066565b97602087013597506040870135966060013595509350505050565b600060208284031215613572578081fd5b5035919050565b60006020828403121561358a578081fd5b5051919050565b600080604083850312156135a3578182fd5b8251915060208301516135b5816142d7565b809150509250929050565b600080604083850312156135d2578182fd5b505080516020909101519092909150565b6000602082840312156135f4578081fd5b815160ff8116811461113d578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152901515606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825269ffffffffffffffffffff16602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156136b85783518352928401929184019160010161369c565b50909695505050505050565b92151583526020830191909152604082015260600190565b6000602080835283518082850152825b81811015613708578581018301518582016040015282016136ec565b818111156137195783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602f908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e60408201526e6f206578706972792076616c75657360881b606082015260800190565b60208082526046908201527f4d617267696e43616c63756c61746f723a2061756374696f6e2074696d65737460408201527f616d702073686f756c6420626520706f7374207661756c74206c61746573742060608201526575706461746560d01b608082015260a00190565b60208082526027908201527f4d617267696e43616c63756c61746f723a20496e76616c696420746f6b656e206040820152666164647265737360c81b606082015260800190565b60208082526028908201527f4d617267696e43616c63756c61746f723a204f746f6b656e206e6f74206578706040820152671a5c9959081e595d60c21b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a206e6f2065787069727920757070656040820152721c88189bdd5b99081d985b1d5948199bdd5b99606a1b606082015260800190565b6020808252602f908201527f4d617267696e43616c63756c61746f723a20696e76616c69642074696d65732060408201526e746f2065787069727920617272617960881b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a206475737420616d6f756e7420736860408201527f6f756c642062652067726561746572207468616e207a65726f00000000000000606082015260800190565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f4d617267696e43616c63756c61746f723a20696e76616c69642076616c75657360408201526520617272617960d01b606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e79206c6f6e67206040820152731bdd1bdad95b9cc81a5b881d1a19481d985d5b1d60621b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a2053686f727420617373657420616e6040820152700c840c2dadeeadce840dad2e6dac2e8c6d607b1b606082015260800190565b6020808252605b908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742073686f756c64206861766520636f6c6c61746572616c20616d6f7560608201527f6e742067726561746572207468616e206475737420616d6f756e740000000000608082015260a00190565b60208082526032908201527f4d617267696e43616c63756c61746f723a20696e76616c6964206f7074696f6e60408201527120757070657220626f756e642076616c756560701b606082015260800190565b6020808252603c908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742063616e6e6f742068617665206c6f6e67206f746f6b656e00000000606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726963652061742065787069726040820152721e481b9bdd08199a5b985b1a5e9959081e595d606a1b606082015260800190565b6020808252603b908201527f4d617267696e43616c63756c61746f723a206c6f6e67206173736574206e6f7460408201527f206d617267696e61626c6520666f722073686f72742061737365740000000000606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a2063616e206e6f74206c697175696460408201527330ba329032bc3834b932b2103837b9b4ba34b7b760611b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526041908201527f4d617267696e43616c63756c61746f723a20636f6c6c61746572616c2061737360408201527f6574206e6f74206d617267696e61626c6520666f722073686f727420617373656060820152601d60fa1b608082015260a00190565b60208082526029908201527f4d617267696e43616c63756c61746f723a2074696d652073686f756c642062656040820152681034b71037b93232b960b91b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a20696e76616c6964207661756c74206040820152707479706520746f206c697175696461746560781b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e7920636f6c6c6160408201527f746572616c2061737365747320696e20746865207661756c7400000000000000606082015260800190565b6020808252602d908201527f4d617267696e43616c63756c61746f723a20757070657220626f756e6420766160408201526c1b1d59481b9bdd08199bdd5b99609a1b606082015260800190565b6020808252602e908201527f4d617267696e43616c63756c61746f723a20657870697279206172726179206960408201526d39903737ba1034b71037b93232b960911b606082015260800190565b60208082526035908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e792073686f7274604082015274081bdd1bdad95b9cc81a5b881d1a19481d985d5b1d605a1b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252602a908201527f4d617267696e43616c63756c61746f723a20696e76616c69642073706f742073604082015269686f636b2076616c756560b01b606082015260800190565b60208082526030908201527f4d617267696e43616c63756c61746f723a204c6f6e6720617373657420616e6460408201526f040c2dadeeadce840dad2e6dac2e8c6d60831b606082015260800190565b60208082526036908201527f4d617267696e43616c63756c61746f723a20436f6c6c61746572616c206173736040820152750cae840c2dcc840c2dadeeadce840dad2e6dac2e8c6d60531b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e6040820152726f20757070657220626f756e642076616c756560681b606082015260800190565b9151825251602082015260400190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561429757600080fd5b604052919050565b600067ffffffffffffffff8211156142b5578081fd5b5060209081020190565b6001600160a01b03811681146142d457600080fd5b50565b80151581146142d457600080fdfea2646970667358221220d3d9e8a236a332b54c1d6140d75419d038c53282761724c26e7b50467162817d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8AAB8FA5 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xC73547E3 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC73547E3 EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0xCD43FBFB EQ PUSH2 0x284 JUMPI DUP1 PUSH4 0xDC1B3F00 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0xE592301A EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2C0 JUMPI PUSH2 0x12C JUMP JUMPDEST DUP1 PUSH4 0x8AAB8FA5 EQ PUSH2 0x219 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x22C JUMPI DUP1 PUSH4 0x9A783D11 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0xA6C56907 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0xB29D5EE8 EQ PUSH2 0x269 JUMPI PUSH2 0x12C JUMP JUMPDEST DUP1 PUSH4 0x6CCB9506 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x6CCB9506 EQ PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x7AD7F800 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x7F519B72 EQ PUSH2 0x206 JUMPI PUSH2 0x12C JUMP JUMPDEST DUP1 PUSH4 0x53FE57C EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xB0509FB EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0x46345900 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x47840930 EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0x47D438A5 EQ PUSH2 0x1A1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x144 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0x2D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16E PUSH2 0x169 CALLDATASIZE PUSH1 0x4 PUSH2 0x33F7 JUMP JUMPDEST PUSH2 0x30E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH2 0x16E PUSH2 0x189 CALLDATASIZE PUSH1 0x4 PUSH2 0x31A2 JUMP JUMPDEST PUSH2 0x389 JUMP JUMPDEST PUSH2 0x16E PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0x316A JUMP JUMPDEST PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x1B4 PUSH2 0x1AF CALLDATASIZE PUSH1 0x4 PUSH2 0x31A2 JUMP JUMPDEST PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x3680 JUMP JUMPDEST PUSH2 0x16E PUSH2 0x1CF CALLDATASIZE PUSH1 0x4 PUSH2 0x316A JUMP JUMPDEST PUSH2 0x562 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x57D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1DC PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x3317 JUMP JUMPDEST PUSH2 0x5FC JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0x6FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x3604 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x214 CALLDATASIZE PUSH1 0x4 PUSH2 0x31FD JUMP JUMPDEST PUSH2 0x70C JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x227 CALLDATASIZE PUSH1 0x4 PUSH2 0x32B4 JUMP JUMPDEST PUSH2 0x9E3 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xA9C JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x242 CALLDATASIZE PUSH1 0x4 PUSH2 0x3485 JUMP JUMPDEST PUSH2 0xAAB JUMP JUMPDEST PUSH2 0x25A PUSH2 0x255 CALLDATASIZE PUSH1 0x4 PUSH2 0x350F JUMP JUMPDEST PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36C4 JUMP JUMPDEST PUSH2 0x16E PUSH2 0xE00 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x27F CALLDATASIZE PUSH1 0x4 PUSH2 0x3561 JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0xE7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP3 SWAP2 SWAP1 PUSH2 0x4244 JUMP JUMPDEST PUSH2 0x16E PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x32B4 JUMP JUMPDEST PUSH2 0xF95 JUMP JUMPDEST PUSH2 0x16E PUSH2 0xFCA JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x2CE CALLDATASIZE PUSH1 0x4 PUSH2 0x316A JUMP JUMPDEST PUSH2 0xFD0 JUMP JUMPDEST PUSH2 0x2DB PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2EB PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0x2F5 DUP6 DUP6 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP PUSH2 0x301 DUP6 DUP3 PUSH2 0x1578 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x31D DUP12 DUP12 DUP12 DUP7 PUSH2 0x1A2D JUMP JUMPDEST SWAP1 POP PUSH2 0x327 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x332 DUP10 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x33C PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x347 DUP10 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x351 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x35C DUP10 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x377 PUSH2 0x36F DUP6 DUP6 DUP5 DUP7 DUP14 DUP13 PUSH2 0x1A66 JUMP JUMPDEST DUP9 PUSH1 0x0 PUSH2 0x1BEC JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x398 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x37EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3F6 DUP9 PUSH2 0x1CBF JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP DUP2 TIMESTAMP LT ISZERO PUSH2 0x422 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3831 JUMP JUMPDEST PUSH2 0x42A PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x437 DUP7 DUP7 DUP6 DUP8 DUP7 PUSH2 0x2011 JUMP JUMPDEST SWAP1 POP PUSH2 0x441 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x44D DUP3 DUP8 DUP11 DUP8 PUSH2 0x2072 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4C2 SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH2 0x4D9 DUP3 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1BEC AND JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x4FA DUP7 DUP7 DUP7 DUP7 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x552 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x53E JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP 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 SWAP1 JUMP JUMPDEST PUSH2 0x585 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x5B2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x604 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x631 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3BE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x65F DUP8 DUP8 DUP8 DUP8 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x699 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3FB4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x39BAB32D3B88604BDFBF6E8C3B1AAAF9BB6013DA4FD5206DEE9E3B00EE6F2CF9 SWAP1 PUSH2 0x6EB SWAP1 DUP8 SWAP1 DUP6 SWAP1 DUP9 SWAP1 PUSH2 0x4262 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x714 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x741 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST DUP3 PUSH2 0x75E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x38CC JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x77D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3A37 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78B DUP10 DUP10 DUP10 DUP10 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP SWAP1 ISZERO DUP1 PUSH2 0x7E6 JUMPI POP DUP1 SLOAD DUP2 SWAP1 PUSH2 0x7BB SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x7C5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x7DD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT JUMPDEST PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x4001 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x9D6 JUMPI DUP6 PUSH2 0x81F DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2202 AND JUMP JUMPDEST LT ISZERO PUSH2 0x878 JUMPI DUP7 DUP7 PUSH2 0x838 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2202 AND JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x841 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x854 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD LT PUSH2 0x878 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3EBD JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x886 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT PUSH2 0x8AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3879 JUMP JUMPDEST DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x8B6 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x5 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 DUP10 DUP6 DUP2 DUP2 LT PUSH2 0x8DE JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x904 JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP5 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 SWAP3 ADD SSTORE POP DUP3 PUSH32 0xCAAE9881BD3AC6F531C9E6021F1F873B93A83648E348624EEF8F9BA9757FCB62 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x954 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x968 SWAP2 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 PUSH32 0xCBB8D688DE73727385AFEE9D53A2771AE5FE45293FF6DE0BA46B201AB29DF115 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x99E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0x9B1 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x9C6 SWAP3 SWAP2 SWAP1 PUSH2 0x4254 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x805 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x9EB PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xA38 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x40E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA46 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0x78D22B4A9E4E0E1DB30E7762696456CA380DC80EFC59F416A299B97213B6D316 SWAP1 PUSH2 0xA8C SWAP1 DUP6 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xAB3 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xAE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xB00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3961 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x8EF429E6CEC4339C5F0187FB930764FB967114BF09BC8BB06A552BA32923FD86 SWAP1 PUSH2 0xB4B SWAP1 DUP5 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 PUSH1 0x1 EQ PUSH2 0xB7C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3F06 JUMP JUMPDEST PUSH2 0xB84 PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0xB8E DUP9 DUP9 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x220 ADD MLOAD PUSH2 0xBAA JUMPI POP PUSH1 0x0 SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP PUSH2 0xDF6 JUMP JUMPDEST DUP1 PUSH1 0xE0 ADD MLOAD TIMESTAMP LT PUSH2 0xBCD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3D45 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1B85462D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x1B85462D SWAP2 PUSH2 0xC04 SWAP2 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x365B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC2F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC53 SWAP2 SWAP1 PUSH2 0x35C0 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP8 DUP2 GT PUSH2 0xC76 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x377E JUMP JUMPDEST PUSH2 0xC7E PUSH2 0x2EEF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0xCAC DUP14 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC9D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCC0 DUP7 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCD0 DUP6 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0xCF4 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1A2D JUMP JUMPDEST SWAP1 POP PUSH2 0xCFE PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xD25 DUP14 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD12 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH2 0x180 ADD MLOAD PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0xD2F PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xD52 DUP4 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1A66 JUMP JUMPDEST SWAP1 POP PUSH2 0xD64 DUP2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2227 AND JUMP JUMPDEST ISZERO PUSH2 0xD80 JUMPI POP PUSH1 0x0 SWAP9 POP DUP9 SWAP8 POP DUP8 SWAP7 POP PUSH2 0xDF6 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD88 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xDA0 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP11 PUSH2 0x1C0 ADD MLOAD PUSH2 0x222F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDC5 DUP5 DUP8 PUSH1 0x0 ADD MLOAD DUP5 DUP10 PUSH1 0x40 ADD MLOAD DUP12 DUP15 PUSH2 0x180 ADD MLOAD DUP16 PUSH2 0x1C0 ADD MLOAD PUSH2 0x22B6 JUMP JUMPDEST PUSH1 0x40 SWAP10 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE SWAP10 SWAP1 SWAP10 KECCAK256 SLOAD PUSH1 0x1 SWAP13 POP SWAP9 SWAP11 POP SWAP8 SWAP9 POP POP POP POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xE0E PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xE3B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE44C6DD1FC3826AD24B81F17CF04849CEDD368E002A52E89A845D14D3474E20A SWAP1 PUSH2 0xE70 SWAP1 DUP4 SWAP1 PUSH2 0x423B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE86 PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0xE90 DUP6 DUP6 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP PUSH2 0xE9C DUP6 DUP3 PUSH2 0x23FE JUMP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0xEF2 JUMPI PUSH1 0x0 DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xECA JUMPI PUSH1 0x0 PUSH2 0xEE4 JUMP JUMPDEST DUP6 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEDB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH2 0x307 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEFA PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xF02 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xF0C DUP8 DUP5 PUSH2 0x1578 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xF18 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0xF28 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xF4F SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2567 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH2 0x200 ADD MLOAD PUSH2 0xF68 JUMPI DUP6 PUSH2 0x100 ADD MLOAD PUSH2 0xF6F JUMP JUMPDEST DUP6 PUSH2 0x160 ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF84 DUP5 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BEC AND JUMP JUMPDEST SWAP12 SWAP3 SWAP11 POP SWAP2 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFA4 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1A2D JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE10 DUP2 JUMP JUMPDEST PUSH2 0xFD8 PUSH2 0x21FE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1005 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3DDA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x102B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x391B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 PUSH2 0x108E PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1096 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x1B DUP4 EQ ISZERO PUSH2 0x10BC JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x10B3 DUP7 PUSH2 0x1146 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x113D JUMP JUMPDEST PUSH1 0x1B DUP4 GT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 PUSH2 0x10D8 DUP5 PUSH1 0x1B PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1103 PUSH2 0x10FE DUP5 PUSH1 0xA EXP DUP10 PUSH2 0x11B1 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST DUP2 MSTORE POP SWAP2 POP POP PUSH2 0x113D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1B DUP5 SWAP1 SUB SWAP1 DUP1 PUSH2 0x1137 PUSH2 0x10FE DUP9 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x11F3 AND JUMP JUMPDEST SWAP1 MSTORE SWAP2 POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH2 0x116B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x39BE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x256F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x259B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1202 JUMPI POP PUSH1 0x0 PUSH2 0x1140 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x120F JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3D99 JUMP JUMPDEST PUSH2 0x1235 PUSH2 0x2E53 JUMP JUMPDEST PUSH2 0x123D PUSH2 0x2E53 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1C0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1E0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x220 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x240 DUP3 ADD MSTORE SWAP1 DUP5 ADD MLOAD PUSH2 0x12E2 SWAP1 PUSH2 0x25D2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x200 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x12F5 SWAP1 PUSH2 0x25D2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x130B SWAP1 PUSH2 0x25D2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP4 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO PUSH2 0x13F9 JUMPI PUSH1 0x0 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1339 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x134C DUP2 PUSH2 0x1CBF JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1E0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD MSTORE PUSH2 0x120 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP7 ADD MSTORE SWAP1 DUP2 AND PUSH1 0x60 DUP6 ADD MSTORE AND PUSH1 0xA0 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EE SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x160 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x14D4 JUMPI PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1417 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x142A DUP2 PUSH2 0x1CBF JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP2 AND DUP6 MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x40 DUP1 DUP6 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14C9 SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x100 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x240 ADD MLOAD ISZERO PUSH2 0x113D JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x14F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1544 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1568 SWAP2 SWAP1 PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x180 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1580 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1588 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1590 PUSH2 0x2E40 JUMP JUMPDEST DUP4 PUSH2 0x220 ADD MLOAD PUSH2 0x15AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x15C3 JUMP JUMPDEST PUSH2 0x15C3 DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC9D JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x15CD PUSH2 0x2E40 JUMP JUMPDEST DUP5 PUSH2 0x200 ADD MLOAD PUSH2 0x15EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1600 JUMP JUMPDEST PUSH2 0x1600 DUP7 PUSH1 0x80 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC9D JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x160A PUSH2 0x2E40 JUMP JUMPDEST DUP6 PUSH2 0x240 ADD MLOAD PUSH2 0x1629 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x163D JUMP JUMPDEST PUSH2 0x163D DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD12 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1647 PUSH2 0x2E40 JUMP JUMPDEST DUP7 PUSH2 0x220 ADD MLOAD PUSH2 0x1666 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1675 JUMP JUMPDEST PUSH2 0x1675 DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x167F PUSH2 0x2F21 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x169E JUMPI DUP10 PUSH1 0x60 ADD MLOAD PUSH2 0x16A1 JUMP JUMPDEST DUP10 MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x16C3 JUMPI DUP10 PUSH1 0xA0 ADD MLOAD PUSH2 0x16C9 JUMP JUMPDEST DUP10 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x16EB JUMPI DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x16F1 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1714 JUMPI DUP10 PUSH2 0x140 ADD MLOAD PUSH2 0x171A JUMP JUMPDEST DUP10 PUSH1 0xE0 ADD MLOAD JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1734 JUMPI DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x173B JUMP JUMPDEST DUP10 PUSH2 0x1C0 ADD MLOAD JUMPDEST ISZERO ISZERO DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x60 ADD MLOAD TIMESTAMP LT ISZERO PUSH2 0x1968 JUMPI DUP8 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x18C1 JUMPI PUSH2 0x1764 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x178F SWAP2 SWAP1 PUSH2 0x1086 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH2 0x17B3 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST ISZERO PUSH2 0x17E4 JUMPI PUSH2 0x17C8 DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST PUSH2 0x17E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3B63 JUMP JUMPDEST PUSH2 0x17EC PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP11 MLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x1876 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH2 0x181F SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3604 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x184B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x186F SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1897 DUP12 PUSH1 0x0 ADD MLOAD DUP13 PUSH1 0x20 ADD MLOAD DUP14 PUSH1 0x40 ADD MLOAD DUP15 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1A2D JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x18B0 DUP3 DUP11 DUP6 DUP10 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD PUSH2 0x1A66 JUMP JUMPDEST SWAP10 POP SWAP10 POP POP POP POP POP POP POP POP POP PUSH2 0x307 JUMP JUMPDEST PUSH2 0x18C9 PUSH2 0x2E40 JUMP JUMPDEST DUP9 PUSH2 0x200 ADD MLOAD PUSH2 0x18E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x18F8 JUMP JUMPDEST PUSH2 0x18F8 DUP10 PUSH2 0x120 ADD MLOAD PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0x193E JUMPI PUSH2 0x190C PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1918 DUP8 DUP8 DUP7 DUP6 PUSH2 0x2617 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x192E DUP3 DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2664 JUMP JUMPDEST SWAP9 POP SWAP9 POP POP POP POP POP POP POP POP PUSH2 0x307 JUMP JUMPDEST PUSH2 0x1946 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1952 DUP8 DUP8 DUP7 DUP6 PUSH2 0x27C9 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x192E DUP3 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2664 JUMP JUMPDEST PUSH2 0x1970 PUSH2 0x2E40 JUMP JUMPDEST DUP9 PUSH2 0x220 ADD MLOAD PUSH2 0x198F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x19B0 DUP10 PUSH1 0x0 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH1 0xC0 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0x2011 JUMP JUMPDEST SWAP1 POP PUSH2 0x19BA PUSH2 0x2E40 JUMP JUMPDEST DUP10 PUSH2 0x200 ADD MLOAD PUSH2 0x19D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x19FC JUMP JUMPDEST PUSH2 0x19FC DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0x80 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2011 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A06 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1A12 DUP9 DUP9 DUP6 DUP6 PUSH2 0x2865 JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x18B0 DUP3 DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x2072 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1A46 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3618 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1A6E PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1A76 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1A80 DUP9 DUP6 PUSH2 0x2890 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A8A PUSH2 0x2E40 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 MSTORE PUSH2 0x1AAF PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1AB7 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1ABF PUSH2 0x2E40 JUMP JUMPDEST DUP7 ISZERO PUSH2 0x1B51 JUMPI PUSH2 0x1ADE DUP10 PUSH2 0x1AD9 DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x2A42 JUMP JUMPDEST SWAP3 POP PUSH2 0x1B18 PUSH2 0x1B03 PUSH2 0x1AF6 DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP12 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2A60 JUMP JUMPDEST SWAP2 POP PUSH2 0x1B4A DUP12 PUSH2 0x1B3E DUP5 PUSH2 0x1B32 DUP10 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A77 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1BDD JUMP JUMPDEST PUSH2 0x1B59 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x1B70 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x1B PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B96 DUP2 PUSH2 0x1AD9 DUP14 PUSH2 0x1B8A DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2AA0 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1BBF PUSH2 0x1B03 PUSH2 0x1BB2 DUP14 PUSH2 0x1B8A DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP3 POP PUSH2 0x1BD9 DUP13 PUSH2 0x1B3E DUP6 PUSH2 0x1B32 DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1B DUP5 EQ ISZERO PUSH2 0x1C0A JUMPI DUP5 MLOAD PUSH2 0x1C03 SWAP1 PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB5 JUMP JUMPDEST PUSH1 0x1B DUP5 GT ISZERO PUSH2 0x1C43 JUMPI PUSH1 0x0 PUSH1 0x1B DUP6 SUB SWAP1 POP PUSH2 0x1C3B DUP2 PUSH1 0xA EXP PUSH2 0x1C2F DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x11F3 AND JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1CB5 JUMP JUMPDEST PUSH1 0x1B DUP5 SWAP1 SUB PUSH1 0x0 DUP5 PUSH2 0x1C80 JUMPI PUSH1 0x0 PUSH2 0x1C71 DUP4 PUSH1 0xA EXP PUSH2 0x1C65 DUP11 PUSH1 0x0 ADD MLOAD PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2AF2 AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1C7E JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x1CB0 DUP2 PUSH2 0x1CA4 DUP5 PUSH1 0xA EXP PUSH2 0x1C98 DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x2AD6 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x11B1 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2202 AND JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAF0968FC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1D33 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3384 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1FF2 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAABAECD6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DAB SWAP2 SWAP1 PUSH2 0x3186 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7158DA7C 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DF8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1C SWAP2 SWAP1 PUSH2 0x3186 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D69BC8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E8D SWAP2 SWAP1 PUSH2 0x3186 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC52987CF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EFE SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F4B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F6F SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF3C274A6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FE0 SWAP2 SWAP1 PUSH2 0x34B0 JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP POP PUSH2 0x2008 JUMP JUMPDEST SWAP5 SWAP12 POP SWAP3 SWAP10 POP SWAP1 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH2 0x2008 SWAP1 POP JUMP JUMPDEST SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x2019 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2021 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x202C DUP5 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x2036 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2042 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x204C PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2058 DUP3 DUP11 DUP11 DUP11 PUSH2 0x2072 JUMP JUMPDEST SWAP1 POP PUSH2 0x2065 DUP4 DUP3 DUP8 PUSH2 0x222F JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x207A PUSH2 0x2E40 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x209B JUMPI POP DUP4 PUSH2 0x3AB JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x20D2 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x3642 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2121 SWAP2 SWAP1 PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x215C SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x3642 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21AB SWAP2 SWAP1 PUSH2 0x3591 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 DUP1 ISZERO PUSH2 0x21B9 JUMPI POP DUP1 JUMPDEST PUSH2 0x21D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3C95 JUMP JUMPDEST PUSH2 0x2065 PUSH2 0x21E3 DUP4 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1B8A PUSH2 0x21F1 DUP8 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP13 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3A00 JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2237 PUSH2 0x2E40 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x227D JUMPI PUSH2 0x224D DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST PUSH2 0x2266 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2276 JUMP JUMPDEST PUSH2 0x2276 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB8 JUMP JUMPDEST PUSH2 0x228D DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST PUSH2 0x22A6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1CB5 JUMP JUMPDEST PUSH2 0x1CB5 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22C0 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x22C8 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x22D8 DUP11 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2AA0 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x22EC TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST SWAP1 POP PUSH2 0xE10 DUP2 LT PUSH2 0x22FF JUMPI DUP2 SWAP3 POP PUSH2 0x23EC JUMP JUMPDEST PUSH2 0x2307 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x230F PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x231C PUSH1 0x1 SLOAD PUSH1 0x1B PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP DUP7 ISZERO PUSH2 0x234E JUMPI PUSH2 0x2347 PUSH2 0x1B03 PUSH2 0x233A DUP4 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP14 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP2 POP PUSH2 0x2378 JUMP JUMPDEST PUSH2 0x2375 DUP11 PUSH2 0x1B8A PUSH2 0x1B03 PUSH2 0x2368 DUP6 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST DUP16 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x2381 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x238C DUP4 PUSH1 0x12 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x2396 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x23A3 PUSH2 0xE10 PUSH1 0x12 PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x23CD PUSH2 0x23C0 DUP3 PUSH2 0x1B8A DUP6 PUSH2 0x1B3E DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A77 AND JUMP JUMPDEST SWAP6 POP PUSH2 0x23DF DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x2610 AND JUMP JUMPDEST ISZERO PUSH2 0x23E8 JUMPI DUP5 SWAP6 POP JUMPDEST POP POP POP JUMPDEST PUSH2 0x1BDD DUP4 DUP8 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1BEC AND JUMP JUMPDEST DUP2 MLOAD MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x2421 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x404F JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x20 ADD MLOAD MLOAD GT ISZERO PUSH2 0x2447 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3A7D JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x40 ADD MLOAD MLOAD GT ISZERO PUSH2 0x246D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3F57 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD MLOAD DUP3 MLOAD MLOAD EQ PUSH2 0x2493 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3B12 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD MLOAD DUP3 PUSH1 0x20 ADD MLOAD MLOAD EQ PUSH2 0x24BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x4132 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD MLOAD DUP3 PUSH1 0x40 ADD MLOAD MLOAD EQ PUSH2 0x24E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x4182 JUMP JUMPDEST PUSH2 0x24EF DUP3 DUP3 PUSH2 0x2B34 JUMP JUMPDEST PUSH2 0x250B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3CE8 JUMP JUMPDEST PUSH2 0x2515 DUP3 DUP3 PUSH2 0x2C6E JUMP JUMPDEST PUSH2 0x2531 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3E56 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x253D PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x255E SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2D0E AND JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x2593 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0x36DC JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x25BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0x36DC JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x25C8 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x1140 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x25F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT SWAP1 JUMP JUMPDEST PUSH2 0x261F PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x265B PUSH2 0x1B03 PUSH2 0x263F PUSH2 0x2632 DUP9 DUP9 PUSH2 0x2A42 JUMP JUMPDEST DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x264F DUP9 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x266C PUSH2 0x2E40 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x268D JUMPI POP DUP3 PUSH2 0x1CB8 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x26BE SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3604 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x270E SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x2744 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3604 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x275C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2770 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2794 SWAP2 SWAP1 PUSH2 0x3579 JUMP JUMPDEST SWAP1 POP PUSH2 0x27BF PUSH2 0x27A4 DUP3 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1B8A PUSH2 0x27B2 DUP6 PUSH1 0x8 PUSH2 0x1086 JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x27D1 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x27F2 SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2D54 AND JUMP JUMPDEST ISZERO PUSH2 0x2811 JUMPI PUSH2 0x280A PUSH2 0x1B03 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x2819 PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x2831 DUP4 PUSH2 0x1B8A DUP9 PUSH2 0x1B3E DUP4 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x283B PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x284E PUSH2 0x1B03 DUP9 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x2535 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x285A DUP3 DUP3 PUSH2 0x2A60 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x286D PUSH2 0x2E40 JUMP JUMPDEST PUSH2 0x265B PUSH2 0x2880 DUP4 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x264F DUP6 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x29FB AND JUMP JUMPDEST PUSH2 0x2898 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x28EE JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x28DA JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x2917 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x372F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2929 DUP5 TIMESTAMP PUSH4 0xFFFFFFFF PUSH2 0x116F AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 PUSH2 0x2942 PUSH1 0x1 DUP6 MLOAD PUSH2 0x116F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x294C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x2972 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x41D8 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 PUSH1 0xFF AND LT ISZERO PUSH2 0x29F2 JUMPI DUP2 DUP4 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2991 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT PUSH2 0x29EA JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 MLOAD PUSH2 0x29E0 SWAP3 SWAP1 DUP7 SWAP1 PUSH1 0xFF DUP7 AND SWAP1 DUP2 LT PUSH2 0x29C2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1B PUSH2 0x1086 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x1140 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2975 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2A03 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 PUSH2 0x2A31 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x2D5B AND JUMP JUMPDEST DUP2 PUSH2 0x2A38 JUMPI INVALID JUMPDEST SDIV SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2A4A PUSH2 0x2E40 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SLT PUSH2 0x2A59 JUMPI DUP2 PUSH2 0x113D JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A68 PUSH2 0x2E40 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SGT PUSH2 0x2A59 JUMPI DUP2 PUSH2 0x113D JUMP JUMPDEST PUSH2 0x2A7F PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x255E SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2DC6 AND JUMP JUMPDEST PUSH2 0x2AA8 PUSH2 0x2E40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 SWAP1 PUSH2 0x2A31 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x2D5B AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x2AEB JUMPI DUP2 PUSH1 0x0 SUB SWAP1 POP PUSH2 0x4E5 JUMP JUMPDEST POP DUP1 PUSH2 0x4E5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0x2E0C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x2B67 JUMPI DUP2 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x2B67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3C38 JUMP JUMPDEST DUP2 PUSH2 0x200 ADD MLOAD ISZERO DUP1 PUSH2 0x2B7C JUMPI POP DUP2 PUSH2 0x220 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2B89 JUMPI POP PUSH1 0x1 PUSH2 0x1140 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2B96 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2BB8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2BF0 JUMPI POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2C15 JUMPI POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2C3A JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2C4E JUMPI POP DUP2 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x140 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0x113D JUMPI POP DUP2 PUSH2 0x1C0 ADD MLOAD ISZERO ISZERO DUP3 PUSH2 0x1E0 ADD MLOAD ISZERO ISZERO EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x240 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2C85 JUMPI SWAP1 POP PUSH2 0x1140 JUMP JUMPDEST DUP3 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x2CC8 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CA1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x113D JUMP JUMPDEST DUP3 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x113D JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CE4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2D23 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x2D38 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2D38 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x40A4 JUMP JUMPDEST MLOAD SWAP1 MLOAD EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2D6A JUMPI POP PUSH1 0x0 PUSH2 0x1140 JUMP JUMPDEST DUP3 PUSH1 0x0 NOT EQ DUP1 ISZERO PUSH2 0x2D7E JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ JUMPDEST ISZERO PUSH2 0x2D9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3E0F JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2DA8 JUMPI INVALID JUMPDEST SDIV EQ PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3E0F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2DDB JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x2DF0 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2DF0 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x113D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP1 PUSH2 0x3AD1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2E2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0x36DC JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0x2E37 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 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 SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x2F02 PUSH2 0x2E40 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2F0F PUSH2 0x2E40 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2F1C PUSH2 0x2E40 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F5F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2F72 PUSH2 0x2F6D DUP3 PUSH2 0x429F JUMP JUMPDEST PUSH2 0x4278 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x2F93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2FBB JUMPI DUP2 CALLDATALOAD PUSH2 0x2FA9 DUP2 PUSH2 0x42BF JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2F96 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2FD7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2FEE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3018 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3026 PUSH2 0x2F6D DUP3 PUSH2 0x429F JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x3047 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2FBB JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x304A JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3077 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x3081 PUSH1 0xC0 PUSH2 0x4278 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x309B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30A7 DUP6 DUP4 DUP7 ADD PUSH2 0x2F4F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x30BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30C9 DUP6 DUP4 DUP7 ADD PUSH2 0x2F4F JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x30E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30EE DUP6 DUP4 DUP7 ADD PUSH2 0x2F4F JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3113 DUP6 DUP4 DUP7 ADD PUSH2 0x3008 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x312C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3138 DUP6 DUP4 DUP7 ADD PUSH2 0x3008 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x315E DUP5 DUP3 DUP6 ADD PUSH2 0x3008 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x317B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x113D DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3197 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x113D DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x31B7 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x31C2 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x31D2 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x31E2 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x31F2 DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3218 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3223 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x3233 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3243 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3253 DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x326F JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x327B DUP13 DUP4 DUP14 ADD PUSH2 0x2FC6 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3293 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x32A0 DUP12 DUP3 DUP13 ADD PUSH2 0x2FC6 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x32CB JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x32D6 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x32E6 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x32F6 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3306 DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x332F JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x333A DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x334A DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x335A DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x336A DUP2 PUSH2 0x42D7 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x339C JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH2 0x33A7 DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x33B8 DUP2 PUSH2 0x42BF JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH2 0x33C9 DUP2 PUSH2 0x42BF JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x33E9 DUP2 PUSH2 0x42D7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x3415 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH2 0x3420 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD PUSH2 0x3430 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH2 0x3440 DUP2 PUSH2 0x42BF JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x100 DUP11 ADD CALLDATALOAD PUSH2 0x3474 DUP2 PUSH2 0x42D7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3497 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x34A2 DUP2 PUSH2 0x42BF 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 0x34C1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x113D DUP2 PUSH2 0x42D7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34DE JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x34F4 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x3500 DUP6 DUP3 DUP7 ADD PUSH2 0x3066 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3524 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x353A JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x3546 DUP8 DUP3 DUP9 ADD PUSH2 0x3066 JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3572 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x358A JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35A3 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x35B5 DUP2 PUSH2 0x42D7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D2 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35F4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x113D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x40 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 0x36B8 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x369C JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3708 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x36EC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3719 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x6F206578706972792076616C756573 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x46 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2061756374696F6E2074696D657374 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x616D702073686F756C6420626520706F7374207661756C74206C617465737420 PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x757064617465 PUSH1 0xD0 SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20496E76616C696420746F6B656E20 PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x61646472657373 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204F746F6B656E206E6F7420657870 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1A5C9959081E595D PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E6F206578706972792075707065 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1C88189BDD5B99081D985B1D5948199BDD5B99 PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642074696D657320 PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x746F20657870697279206172726179 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206475737420616D6F756E74207368 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6F756C642062652067726561746572207468616E207A65726F00000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642076616C756573 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x206172726179 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E79206C6F6E6720 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x1BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x62 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2053686F727420617373657420616E PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0xC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x7B SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742073686F756C64206861766520636F6C6C61746572616C20616D6F75 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0x6E742067726561746572207468616E206475737420616D6F756E740000000000 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964206F7074696F6E PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x20757070657220626F756E642076616C7565 PUSH1 0x70 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3C SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742063616E6E6F742068617665206C6F6E67206F746F6B656E00000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A207072696365206174206578706972 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1E481B9BDD08199A5B985B1A5E9959081E595D PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206C6F6E67206173736574206E6F74 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x206D617267696E61626C6520666F722073686F72742061737365740000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2063616E206E6F74206C6971756964 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x30BA329032BC3834B932B2103837B9B4BA34B7B7 PUSH1 0x61 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206D756C7469706C69636174696F6E206F PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x766572666C6F77 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x41 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20636F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6574206E6F74206D617267696E61626C6520666F722073686F72742061737365 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2074696D652073686F756C64206265 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x1034B71037B93232B9 PUSH1 0xB9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964207661756C7420 PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0x7479706520746F206C6971756964617465 PUSH1 0x78 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E7920636F6C6C61 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746572616C2061737365747320696E20746865207661756C7400000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20757070657220626F756E64207661 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1B1D59481B9BDD08199BDD5B99 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206578706972792061727261792069 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x39903737BA1034B71037B93232B9 PUSH1 0x91 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x35 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E792073686F7274 PUSH1 0x40 DUP3 ADD MSTORE PUSH21 0x81BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x5A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642073706F742073 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x686F636B2076616C7565 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x30 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204C6F6E6720617373657420616E64 PUSH1 0x40 DUP3 ADD MSTORE PUSH16 0x40C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x83 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20436F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH22 0xCAE840C2DCC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x53 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x6F20757070657220626F756E642076616C7565 PUSH1 0x68 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP2 MLOAD DUP3 MSTORE MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x42B5 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x42D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x42D4 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xD9 0xE8 LOG2 CALLDATASIZE LOG3 ORIGIN 0xB5 0x4C SAR PUSH2 0x40D7 SLOAD NOT 0xD0 CODESIZE 0xC5 ORIGIN DUP3 PUSH23 0x1724C26E7B50467162817D64736F6C634300060A003300 ",
+ "sourceMap": "711:52416:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19475:326;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12157:1378;;;;;;;;;:::i;:::-;;;;;;;;10899:301;;;;;;;;;:::i;13830:1244::-;;;;;;;;;:::i;9553:327::-;;;;;;;;;:::i;:::-;;;;;;;;9137:121;;;;;;;;;:::i;1717:145:48:-;;;:::i;:::-;;7110:772:2;;;;;;;;;:::i;2683:29::-;;;:::i;:::-;;;;;;;;4884:1811;;;;;;;;;:::i;8214:463::-;;;;;;;;;:::i;1094:77:48:-;;;:::i;4219:271:2:-;;;;;;;;;:::i;15936:3223::-;;;;;;;;;:::i;:::-;;;;;;;;;;11303:101;;;:::i;8823:162::-;;;;;;;;;:::i;20544:1453::-;;;;;;;;;:::i;:::-;;;;;;;;;10256:359;;;;;;;;;:::i;1088:43::-;;;:::i;2011:240:48:-;;;;;;;;;:::i;19475:326:2:-;19602:24;;:::i;:::-;19628;;:::i;:::-;19668:31;;:::i;:::-;19702:36;19719:6;19727:10;19702:16;:36::i;:::-;19668:70;;19755:39;19774:6;19782:11;19755:18;:39::i;:::-;19748:46;;;;;19475:326;;;;;;:::o;12157:1378::-;12492:7;12511:19;12533:58;12549:11;12562:7;12571:11;12584:6;12533:15;:58::i;:::-;12511:80;;12675:36;;:::i;:::-;12714:38;12733:12;1049:1;12714:18;:38::i;:::-;12675:77;;12809:36;;:::i;:::-;12848:38;12867:12;1049:1;12848:18;:38::i;:::-;12809:77;;12953:45;;:::i;:::-;13001:42;13020:16;1049:1;13001:18;:42::i;:::-;12953:90;;13167:361;13201:253;13246:11;13279;13312:20;13354:11;13387:21;13430:6;13201:23;:253::i;:::-;13472:19;13509:5;13167:16;:361::i;:::-;13148:380;12157:1378;-1:-1:-1;;;;;;;;;;;;;;12157:1378:2:o;10899:301::-;11054:7;11073:19;11095:58;11111:11;11124:7;11133:11;11146:6;11095:15;:58::i;:::-;11171:22;;;;:9;:22;;;;;;;-1:-1:-1;;10899:301:2;;;;;;;:::o;13830:1244::-;13900:7;-1:-1:-1;;;;;13927:21:2;;13919:73;;;;-1:-1:-1;;;13919:73:2;;;;;;;;;;;;;;;;;14017:18;14049;14081:19;14114;14147:14;14175:10;14198:26;14216:7;14198:17;:26::i;:::-;14003:221;;;;;;;;;;;;14250:6;14243:3;:13;;14235:66;;;;-1:-1:-1;;;14235:66:2;;;;;;;;;14312:42;;:::i;:::-;14357:143;14391:10;14415:11;14440:6;14460:11;14485:5;14357:20;:143::i;:::-;14312:188;;14511:46;;:::i;:::-;14560:137;14601:17;14632:11;14657:10;14681:6;14560:27;:137::i;:::-;14511:186;;14915:26;14967:10;-1:-1:-1;;;;;14952:35:2;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14944:46;;;-1:-1:-1;15007:60:2;:21;14944:46;15062:4;15007:60;:34;:60;:::i;:::-;15000:67;;;;;;;;;;;13830:1244;;;;:::o;9553:327::-;9712:16;9740:19;9762:58;9778:11;9791:7;9800:11;9813:6;9762:15;:58::i;:::-;9837:36;;;;:23;:36;;;;;;;;;9830:43;;;;;;;;;;;;;;;;;9740:80;;-1:-1:-1;9830:43:2;;;;;9837:36;9830:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9553:327;;;;;;:::o;9137:121::-;-1:-1:-1;;;;;9234:17:2;9208:7;9234:17;;;:4;:17;;;;;;;9137:121::o;1717:145:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:48;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;-1:-1:-1;;;;;;1836:19:48::1;::::0;;1717:145::o;7110:772:2:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;7352:1:2::1;7343:6;:10;7335:73;;;;-1:-1:-1::0;;;7335:73:2::1;;;;;;;;;7419:19;7441:58;7457:11;7470:7;7479:11;7492:6;7441:15;:58::i;:::-;7509:19;7531:35:::0;;;:22:::1;:35;::::0;;;;;;;:50;;;;;;;;;7419:80;;-1:-1:-1;7600:16:2;7592:74:::1;;;;-1:-1:-1::0;;;7592:74:2::1;;;;;;;;;7736:35;::::0;;;:22:::1;:35;::::0;;;;;;;:50;;;;;;;;;;:59;;;7811:64;7759:11;;7811:64:::1;::::0;::::1;::::0;7772:13;;7855:11;;7789:6;;7811:64:::1;;;;;;;;;;1367:1:48;;7110:772:2::0;;;;;;:::o;2683:29::-;;;-1:-1:-1;;;;;2683:29:2;;:::o;4884:1811::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;5139:25:2;5131:85:::1;;;;-1:-1:-1::0;;;5131:85:2::1;;;;;;;;;5234:39:::0;;::::1;5226:90;;;;-1:-1:-1::0;;;5226:90:2::1;;;;;;;;;5355:19;5377:58;5393:11;5406:7;5415:11;5428:6;5377:15;:58::i;:::-;5446:29;5478:36:::0;;;:23:::1;:36;::::0;;;;5717:18;;5355:80;;-1:-1:-1;5478:36:2;5717:23;;5716:89:::1;;-1:-1:-1::0;5778:18:2;;5766:11;;5778:25:::1;::::0;5801:1:::1;5778:25;:22;:25;:::i;:::-;5766:38;;;;;;;;;;;;;;;;5746:14;;5761:1;5746:17;;;;;;;;;;;;;:58;5716:89;5695:182;;;;-1:-1:-1::0;;;5695:182:2::1;;;;;;;;;5893:9;5888:801;5908:25:::0;;::::1;5888:801;;;6023:14:::0;6012:8:::1;:1:::0;6018::::1;6012:8;:5;:8;:::i;:::-;:32;6008:169;;;6092:14:::0;;6107:8:::1;:1:::0;6113::::1;6107:8;:5;:8;:::i;:::-;6092:24;;;;;;;;;;;;;6072:14;;6087:1;6072:17;;;;;;;;;;;;;:44;6064:98;;;;-1:-1:-1::0;;;6064:98:2::1;;;;;;;;;6212:1;6199:7;;6207:1;6199:10;;;;;;;;;;;;;:14;6191:78;;;;-1:-1:-1::0;;;6191:78:2::1;;;;;;;;;6426:7;;6434:1;6426:10;;;;;;;;;;;;;6369:22;:35;6392:11;6369:35;;;;;;;;;;;:54;6405:14;;6420:1;6405:17;;;;;;;;;;;;;6369:54;;;;;;;;;;;:67;;;;6498:11;6515:14;;6530:1;6515:17;;;;;;;6498:35:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;6498:35:2;;;6515:17:::1;6498:35:::0;;;;6515:17;;;::::1;::::0;;;::::1;;6498:35:::0;;;::::1;::::0;-1:-1:-1;6571:11:2;6553:49:::1;6584:14:::0;;6599:1;6584:17;;::::1;;;;;;;;;;;6553:49;;;;;;;;;;;;;;;6635:11;6621:57;6648:14;;6663:1;6648:17;;;;;;;;;;;;;6667:7;;6675:1;6667:10;;;;;;;;;;;;;6621:57;;;;;;;;;;;;;;;;5935:3;;5888:801;;;;1367:1:48;;4884:1811:2::0;;;;;;;;:::o;8214:463::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;8426:1:2::1;8412:11;:15;8404:70;;;;-1:-1:-1::0;;;8404:70:2::1;;;;;;;;;8485:19;8507:58;8523:11;8536:7;8545:11;8558:6;8507:15;:58::i;:::-;8576:22;::::0;;;:9:::1;:22;::::0;;;;;;:36;;;8628:42;8485:80;;-1:-1:-1;8485:80:2;;8628:42:::1;::::0;::::1;::::0;8601:11;;8628:42:::1;;;;;;;;;;1367:1:48;8214:463:2::0;;;;;:::o;1094:77:48:-;1132:7;1158:6;-1:-1:-1;;;;;1158:6:48;1094:77;:::o;4219:271:2:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;4327:1:2::1;4319:5;:9;4311:79;;;;-1:-1:-1::0;;;4311:79:2::1;;;;;;;;;-1:-1:-1::0;;;;;4401:17:2;::::1;;::::0;;;:4:::1;:17;::::0;;;;;;:25;;;4442:41;::::1;::::0;::::1;::::0;4421:5;;4442:41:::1;;;;;;;;;;4219:271:::0;;:::o;15936:3223::-;16157:4;16175:7;16196;16300:10;16314:1;16300:15;16292:77;;;;-1:-1:-1;;;16292:77:2;;;;;;;;;16380:32;;:::i;:::-;16415:36;16432:6;16440:10;16415:16;:36::i;:::-;16380:71;;16530:12;:21;;;16525:48;;-1:-1:-1;16561:5:2;;-1:-1:-1;16561:5:2;;-1:-1:-1;16561:5:2;;-1:-1:-1;16553:20:2;;16525:48;16598:12;:33;;;16592:3;:39;16584:104;;;;-1:-1:-1;;;16584:104:2;;;;;;;;;16736:6;;16778:33;;16736:115;;-1:-1:-1;;;16736:115:2;;16700:13;;;;-1:-1:-1;;;;;16736:6:2;;;;:28;;:115;;16832:8;;16736:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16699:152;;;;16984:18;16972:9;:30;16951:147;;;;-1:-1:-1;;;16951:147:2;;;;;;;;;17207:38;;:::i;:::-;17248:254;;;;;;;;17294:48;17313:6;:19;;;17333:1;17313:22;;;;;;;;;;;;;;1049:1;17294:18;:48::i;:::-;17248:254;;;;17369:55;17388:12;:29;;;1049:1;17369:18;:55::i;:::-;17248:254;;;;17460:31;17479:5;1049:1;17460:18;:31::i;:::-;17248:254;;;17207:295;;17513:19;17535:199;17564:12;:33;;;17611:12;:29;;;17654:12;:33;;;17701:12;:23;;;17535:15;:199::i;:::-;17513:221;;17830:44;;:::i;:::-;17877:114;17909:6;:24;;;17934:1;17909:27;;;;;;;;;;;;;;17950:12;:31;;;17877:18;:114::i;:::-;17830:161;;18002:43;;:::i;:::-;18048:265;18085:11;18110:12;:24;;;18148:12;:33;;;18195:12;:24;;;18233:12;:33;;;18280:12;:23;;;18048;:265::i;:::-;18002:311;-1:-1:-1;18420:57:2;18002:311;18457:19;18420:57;:36;:57;:::i;:::-;18416:108;;;-1:-1:-1;18501:5:2;;-1:-1:-1;18501:5:2;;-1:-1:-1;18501:5:2;;-1:-1:-1;18493:20:2;;-1:-1:-1;;;;;;18493:20:2;18416:108;18534:34;;:::i;:::-;18571:145;18598:12;:24;;;18636:12;:33;;;18683:12;:23;;;18571:13;:145::i;:::-;18534:182;;18787:17;18807:269;18834:19;18867:12;:24;;;18905:9;18928:12;:33;;;18975:9;18998:12;:31;;;19043:12;:23;;;18807:13;:269::i;:::-;19117:33;;;;;-1:-1:-1;;;;;19112:39:2;;;;;:4;:39;;;;;;;19095:4;;-1:-1:-1;18787:289:2;;-1:-1:-1;19112:39:2;;-1:-1:-1;;;;;;;;;15936:3223:2;;;;;;;;;:::o;11303:101::-;11382:15;;11303:101;:::o;8823:162::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;8900:15:2::1;:28:::0;;;8944:34:::1;::::0;::::1;::::0;::::1;::::0;8918:10;;8944:34:::1;;;;;;;;;;8823:162:::0;:::o;20544:1453::-;20671:7;20680:4;20700:32;;:::i;:::-;20735:36;20752:6;20760:10;20735:16;:36::i;:::-;20700:71;;20849:40;20868:6;20876:12;20849:18;:40::i;:::-;20982:12;:21;;;20981:22;:47;;;;;21008:12;:20;;;21007:21;20981:47;20977:190;;;21044:14;21061:12;:26;;;:60;;21120:1;21061:60;;;21090:6;:24;;;21115:1;21090:27;;;;;;;;;;;;;;21061:60;21044:77;-1:-1:-1;21151:4:2;;-1:-1:-1;21135:21:2;;-1:-1:-1;;21135:21:2;20977:190;21252:41;;:::i;:::-;21295:43;;:::i;:::-;21342:74;21374:6;21394:12;21342:18;:74::i;:::-;21251:165;;;;21426:41;;:::i;:::-;21470:40;:16;21491:18;21470:40;:20;:40;:::i;:::-;21537:43;;;;;;;;;21575:4;21537:43;;;21426:84;;-1:-1:-1;21521:13:2;;21537:43;;21426:84;;21537:43;:37;:43;:::i;:::-;21521:59;;21590:26;21619:12;:20;;;:121;;21704:12;:36;;;21619:121;;;21654:12;:35;;;21619:121;21590:150;-1:-1:-1;21843:32:2;21878:59;:16;21590:150;21928:8;21878:59;:29;:59;:::i;:::-;21843:94;21981:8;;-1:-1:-1;20544:1453:2;;-1:-1:-1;;;;;;;;;20544:1453:2:o;10256:359::-;10441:7;10460:19;10482:58;10498:11;10511:7;10520:11;10533:6;10482:15;:58::i;:::-;10558:35;;;;:22;:35;;;;;;;;:50;;;;;;;;;;-1:-1:-1;;10256:359:2;;;;;;;:::o;1088:43::-;1127:4;1088:43;:::o;2011:240:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;-1:-1:-1;;;;;2099:22:48;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:48::1;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:48;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;-1:-1:-1;;;;;;2227:17:48::1;-1:-1:-1::0;;;;;2227:17:48;;;::::1;::::0;;;::::1;::::0;;2011:240::o;1493:601:27:-;1571:20;;:::i;:::-;1603:31;;:::i;:::-;549:2;1649:9;:26;1645:415;;;1704:29;;;;;;;;1718:14;:2;:12;:14::i;:::-;1704:29;;1691:42;-1:-1:-1;1645:415:27;;;549:2;1754:9;:25;1750:310;;;1795:11;1809:28;:9;549:2;1809:28;:13;:28;:::i;:::-;1795:42;;1864:44;;;;;;;;1878:29;1879:15;1890:3;1886:2;:7;1879:2;:6;;:15;;;;:::i;:::-;1878:27;:29::i;:::-;1864:44;;;1851:57;;1750:310;;;;2005:44;;;;;;;;;549:2;1953:25;;;;2005:44;2019:29;2020:15;:2;2027;:7;;;2020:15;:6;:15;:::i;2019:29::-;2005:44;;1992:57;-1:-1:-1;;1750:310:27;2077:10;-1:-1:-1;1493:601:27;;;;;:::o;439:162:29:-;492:6;-1:-1:-1;;;518:1:29;:10;510:57;;;;-1:-1:-1;;;510:57:29;;;;;;;;;-1:-1:-1;592:1:29;439:162::o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;:3;:39::i;2237:459::-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;43398:2408:2;43524:19;;:::i;:::-;43559:32;;:::i;:::-;-1:-1:-1;43594:381:2;;;;;;;;-1:-1:-1;43594:381:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44091:18;;;;44079:31;;:11;:31::i;:::-;44056:54;;:20;;;:54;44156:19;;44144:32;;:11;:32::i;:::-;44120:56;;:21;;;:56;44227:23;;;;44215:36;;:11;:36::i;:::-;44186:65;;:26;;;:65;44262:22;;;:35;;;44358:20;;;;44354:577;;;44394:20;44433:6;:18;;;44452:1;44433:21;;;;;;;;;;;;;;44394:61;;44768:32;44794:4;44768:17;:32::i;:::-;44469:331;;44729:22;;;44469:331;44679:32;;;44469:331;44633:28;;;44469:331;-1:-1:-1;;;;;44469:331:2;;;44587:28;;;44469:331;;;;44537:32;;;44469:331;;44487:32;;;44469:331;;;44860:59;;;-1:-1:-1;;;44860:59:2;;;;:57;;:59;;;;;-1:-1:-1;;44860:59:2;;;;;;;;44469:331;44860:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44852:68;;44814:35;;;:106;-1:-1:-1;44354:577:2;44992:12;:21;;;44988:619;;;45029:21;45069:6;:19;;;45089:1;45069:22;;;;;;;;;;;;;;45029:63;;45411:33;45437:5;45411:17;:33::i;:::-;45106:338;;45371:23;;;45106:338;45320:33;;;45106:338;45273:29;;;45106:338;-1:-1:-1;;;;;45106:338:2;;;45226:29;;;;45106:338;;;;;;;;;;;;;45124:33;;;;45106:338;;;45522:60;;-1:-1:-1;;;45522:60:2;;;;45106:338;;45522:58;;:60;;;;;;;;;;45106:338;45522:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45497:99;;45458:36;;;:138;-1:-1:-1;44988:619:2;45621:12;:26;;;45617:153;;;45720:6;:23;;;45744:1;45720:26;;;;;;;;;;;;;;-1:-1:-1;;;;;45705:51:2;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45697:62;;45663:31;;;:96;:31;43398:2408;-1:-1:-1;;;43398:2408:2:o;24086:6874::-;24229:24;;:::i;:::-;24255;;:::i;:::-;24295:36;;:::i;:::-;24334:13;:22;;;:104;;;;;;;;;;;24434:4;24334:104;;;;;;24371:48;24390:6;:19;;;24410:1;24390:22;;;;;;;24371:48;24295:143;;24448:35;;:::i;:::-;24486:13;:21;;;:102;;;;;;;;;;;24584:4;24486:102;;;;;;24522:47;24541:6;:18;;;24560:1;24541:21;;;;;;;24522:47;24448:140;;24598:41;;:::i;:::-;24642:13;:27;;;:142;;;;;;;;;;;24780:4;24642:142;;;;;;24684:81;24703:6;:24;;;24728:1;24703:27;;;;;;;24684:81;24598:186;;24794:36;;:::i;:::-;24833:13;:22;;;:112;;;;;;;;;;;24941:4;24833:112;;;;;;24870:56;24889:13;:30;;;1049:1;24870:18;:56::i;:::-;24794:151;;25004:34;;:::i;:::-;25041:540;;;;;;;;25068:13;:22;;;:95;;25130:13;:33;;;25068:95;;;25093:34;;25068:95;-1:-1:-1;;;;;25041:540:2;;;;;25177:13;:22;;;:95;;25239:13;:33;;;25177:95;;;25202:13;:34;;;25177:95;-1:-1:-1;;;;;25041:540:2;;;;;25286:13;:22;;;:87;;25344:13;:29;;;25286:87;;;25311:13;:30;;;25286:87;-1:-1:-1;;;;;25041:540:2;;;;;25387:13;:22;;;:95;;25449:13;:33;;;25387:95;;;25412:13;:34;;;25387:95;25041:540;;;;25496:13;:22;;;:75;;25548:13;:23;;;25496:75;;;25521:13;:24;;;25496:75;25041:540;;;;;25004:577;;25602:13;:26;;;25596:3;:32;25592:5362;;;25734:13;:23;;;25761:1;25734:28;25730:3674;;;25968:35;;:::i;:::-;26051:34;;;;;-1:-1:-1;;;;;26046:40:2;;;;;:4;:40;;;;26108:32;;;;26006:152;;26046:40;26006:18;:152::i;:::-;26319:36;;;;;;;;;26350:4;26319:36;;;25968:190;;-1:-1:-1;26319:36:2;;:16;;:36;:30;:36;:::i;:::-;26315:299;;;26412:42;:16;26443:10;26412:42;:30;:42;:::i;:::-;26379:216;;;;-1:-1:-1;;;26379:216:2;;;;;;;;;26695:45;;:::i;:::-;26783:6;;26799:34;;26783:51;;-1:-1:-1;;;26783:51:2;;26743:135;;-1:-1:-1;;;;;26783:6:2;;:15;;:51;;26799:34;26783:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:1;26743:18;:135::i;:::-;26695:183;;26936:19;26958:243;26995:13;:34;;;27051:13;:30;;;27103:13;:34;;;27159:13;:24;;;26958:15;:243::i;:::-;26936:265;;27345:16;27383:299;27432:11;27469;27506:20;27552:11;27589:13;:26;;;27641:13;:19;;;27383:23;:299::i;:::-;27316:384;;;;;;;;;;;;;;25730:3674;27795:35;;:::i;:::-;27833:13;:21;;;:126;;;;;;;;;;;27955:4;27833:126;;;;;;27877:55;27896:13;:29;;;1049:1;27877:18;:55::i;:::-;27795:164;;27982:13;:19;;;27978:1412;;;28025:37;;:::i;:::-;28065:195;28118:11;28155:10;28191:11;28228:10;28065:27;:195::i;:::-;28025:235;;28385:16;28427:219;28482:12;28524:13;:31;;;28585:13;:35;;;28427:25;:219::i;:::-;28352:316;;;;;;;;;;;;;27978:1412;28715:41;;:::i;:::-;28759:196;28813:11;28850:10;28886:11;28923:10;28759:28;:196::i;:::-;28715:240;;29080:16;29122:227;29177:16;29223:13;:35;;;29288:13;:35;;;29122:25;:227::i;25592:5362::-;29529:39;;:::i;:::-;29571:13;:22;;;:359;;;;;;;;;;;29926:4;29571:359;;;;;;29612:295;29654:13;:34;;;29710:13;:30;;;29762:13;:34;;;29818:13;:30;;;29870:13;:19;;;29612:20;:295::i;:::-;29529:401;;29944:38;;:::i;:::-;29985:13;:21;;;:354;;;;;;;;;;;30335:4;29985:354;;;;;;30025:291;30067:13;:33;;;30122:13;:29;;;30173:13;:33;;;30228:13;:29;;;30279:13;:19;;;30025:20;:291::i;:::-;29944:395;;30354:38;;:::i;:::-;30395:160;30439:11;30468:10;30496:14;30528:13;30395:26;:160::i;:::-;30354:201;;30657:16;30691:238;30740:13;30775;:31;;;30828:13;:35;;;30885:13;:26;;;30691:27;:238::i;51056:255::-;51214:7;51261:11;51274:7;51283:11;51296:6;51250:53;;;;;;;;;;;;;;;;;;;;;;;;;51240:64;;;;;;51233:71;;51056:255;;;;;;:::o;32029:1486::-;32326:24;;:::i;:::-;32403:46;;:::i;:::-;32452:57;32473:12;32487:21;32452:20;:57::i;:::-;32403:106;;32613:39;;:::i;:::-;-1:-1:-1;32655:50:2;;;;;;;;;-1:-1:-1;32680:23:2;;;:9;:23;;;;;;;;32655:50;;32716:26;;:::i;:::-;32752;;:::i;:::-;32788:39;;:::i;:::-;32842:6;32838:639;;;32868:59;32876:12;32890:36;:14;32909:16;32890:36;:18;:36;:::i;:::-;32868:7;:59::i;:::-;32864:63;-1:-1:-1;32945:69:2;32953:54;32970:36;:14;32989:16;32970:36;:18;:36;:::i;:::-;32953:12;;:54;:16;:54;:::i;:::-;32945:69;;;;;;;;;33009:4;32945:69;;;:7;:69::i;:::-;32941:73;-1:-1:-1;33045:53:2;33085:12;33045:35;32941:73;33045:28;:21;33071:1;33045:28;:25;:28;:::i;:::-;:32;:35;:32;:35;:::i;:::-;:39;:53;:39;:53;:::i;:::-;33028:70;;32838:639;;;33129:28;;:::i;:::-;33160:40;33179:4;947:2;33160:18;:40::i;:::-;33129:71;-1:-1:-1;33218:68:2;33129:71;33231:54;33268:16;33231:32;:12;33248:14;33231:32;:16;:32;:::i;:::-;:36;:54;:36;:54;:::i;33218:68::-;33214:72;-1:-1:-1;33304:78:2;33312:63;33320:54;33357:16;33320:32;:12;33337:14;33320:32;:16;:32;:::i;:54::-;33312:3;;:63;:7;:63;:::i;33304:78::-;33300:82;-1:-1:-1;33413:53:2;33453:12;33413:35;33300:82;33413:28;:21;33439:1;33413:28;:25;:28;:::i;:53::-;33396:70;;32838:639;;33494:14;32029:1486;-1:-1:-1;;;;;;;;;;;32029:1486:2:o;2444:809:27:-;2580:7;2599:18;549:2;2632:9;:26;2628:591;;;2687:8;;:20;;:18;:20::i;:::-;2674:33;;2628:591;;;549:2;2728:9;:25;2724:495;;;2769:11;549:2;2783:9;:25;2769:39;;2835:35;2866:3;2862:2;:7;2835:22;2836:2;:8;;;2835:20;:22::i;:::-;:26;:35;:26;:35;:::i;:::-;2822:48;;2724:495;;;;549:2;2915:25;;;2901:11;2988:10;2983:151;;3018:16;3037:35;3068:3;3064:2;:7;3037:22;3038:2;:8;;;3037:20;:22::i;:::-;:26;:35;:26;:35;:::i;:::-;3018:54;-1:-1:-1;3094:12:27;;3090:29;;3118:1;3108:11;;3090:29;2983:151;;3160:48;3200:7;3160:35;3191:3;3187:2;:7;3160:22;3161:2;:8;;;3160:20;:22::i;:::-;:26;:35;:26;:35;:::i;:::-;:39;:48;:39;:48;:::i;:::-;3147:61;;2724:495;;;3236:10;-1:-1:-1;2444:809:27;;;;;;:::o;52192:933:2:-;52296:7;52317;52338;52359;52380;52401:4;52430:22;52471:7;52430:49;;52493:6;-1:-1:-1;;;;;52493:23:2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52493:25:2;;;;;;;;-1:-1:-1;;52493:25:2;;;;;;;;;;;;;;;;52489:630;;52878:6;-1:-1:-1;;;;;52878:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52920:6;-1:-1:-1;;;;;52920:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52962:6;-1:-1:-1;;;;;52962:18:2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53000:6;-1:-1:-1;;;;;53000:18:2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53038:6;-1:-1:-1;;;;;53038:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53080:6;-1:-1:-1;;;;;53080:12:2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52853:255;;;;;;;;;;;;;;;52489:630;52737:10;;-1:-1:-1;52749:10:2;;-1:-1:-1;52761:6:2;;-1:-1:-1;52769:11:2;-1:-1:-1;52782:6:2;-1:-1:-1;52790:5:2;-1:-1:-1;52729:67:2;;-1:-1:-1;52729:67:2;52192:933;;;;;;;;:::o;22613:845::-;22811:24;;:::i;:::-;22902:36;;:::i;:::-;22941:38;22960:12;1049:1;22941:18;:38::i;:::-;22902:77;;22989:28;;:::i;:::-;23020:24;23039:1;23042;23020:18;:24::i;:::-;22989:55;;23139:48;;:::i;:::-;23190:184;23231:3;23302:11;23327:7;23348:16;23190:27;:184::i;:::-;23139:235;;23392:59;23406:11;23419:23;23444:6;23392:13;:59::i;:::-;23385:66;22613:845;-1:-1:-1;;;;;;;;;22613:845:2:o;38646:792::-;38829:24;;:::i;:::-;38880:7;-1:-1:-1;;;;;38869:18:2;:7;-1:-1:-1;;;;;38869:18:2;;38865:63;;;-1:-1:-1;38910:7:2;38903:14;;38865:63;38978:6;;:39;;-1:-1:-1;;;38978:39:2;;38938:14;;;;-1:-1:-1;;;;;38978:6:2;;;;:21;;:39;;39000:7;;39009;;38978:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39068:6;;:39;;-1:-1:-1;;;39068:39:2;;38937:80;;-1:-1:-1;38937:80:2;;-1:-1:-1;39028:14:2;;;;-1:-1:-1;;;;;39068:6:2;;:21;;:39;;39090:7;;39099;;39068:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39027:80;;;;39125:15;:34;;;;;39144:15;39125:34;39117:98;;;;-1:-1:-1;;;39117:98:2;;;;;;;;;39348:83;39398:32;39417:6;1049:1;39398:18;:32::i;:::-;39348:45;39360:32;39379:6;1049:1;39360:18;:32::i;:::-;39348:7;;:45;:11;:45;:::i;623:104:46:-;710:10;623:104;:::o;922:176:51:-;980:7;1011:5;;;1034:6;;;;1026:46;;;;-1:-1:-1;;;1026:46:51;;;;;;;;6719:146:27;6851:7;6840;;:18;;;6719:146::o;51686:427:2:-;51857:24;;:::i;:::-;51897:6;51893:107;;;51912:44;:12;51939:16;51912:44;:26;:44;:::i;:::-;:88;;;;;;;;;;;51996:4;51912:88;;;;;;51959:34;:12;51976:16;51959:34;:16;:34;:::i;:::-;51905:95;;;;51893:107;52018:44;:16;52049:12;52018:44;:30;:44;:::i;:::-;:88;;;;;;;;;;;52102:4;52018:88;;;;;;52065:34;:16;52086:12;52065:34;:20;:34;:::i;40864:2257::-;41198:7;41289:30;;:::i;:::-;41361:36;;:::i;:::-;41400:32;:16;41421:10;41400:32;:20;:32;:::i;:::-;41361:71;-1:-1:-1;41475:26:2;41504:29;:3;41512:20;41504:29;:7;:29;:::i;:::-;41475:58;;1127:4;41597:18;:34;41593:1459;;41655:11;41647:19;;41593:1459;;;41727:38;;:::i;:::-;41884:45;;:::i;:::-;41932:51;41951:15;;947:2;41932:18;:51::i;:::-;41884:99;;42006:6;42002:282;;;42052:67;42060:52;42075:36;:20;42100:10;42075:36;:24;:36;:::i;:::-;42060:10;;:52;:14;:52;:::i;42052:67::-;42036:83;;42002:282;;;42182:83;42254:10;42182:67;42190:52;42205:36;:20;42254:10;42205:36;:24;:36;:::i;:::-;42190:10;;:52;:14;:52;:::i;42182:83::-;42166:99;;42002:282;41593:1459;42386:53;;:::i;:::-;42442:42;42461:18;42481:2;42442:18;:42::i;:::-;42386:98;;42576:36;;:::i;:::-;42615;1127:4;42648:2;42615:18;:36::i;:::-;42576:75;-1:-1:-1;42784:132:2;42819:83;42576:75;42819:66;42856:28;42820:30;:11;42836:13;42820:30;:15;:30;:::i;42819:83::-;42784:13;;:132;:17;:132;:::i;:::-;42776:140;-1:-1:-1;42988:32:2;42776:140;43008:11;42988:32;:19;:32;:::i;:::-;42984:57;;;43030:11;43022:19;;42984:57;41593:1459;;;;43069:45;:5;43088:19;43109:4;43069:45;:18;:45;:::i;47223:1459::-;47407:19;;:26;47437:1;-1:-1:-1;47407:31:2;47399:97;;;;-1:-1:-1;;;47399:97:2;;;;;;;;;47543:1;47514:6;:18;;;:25;:30;;47506:95;;;;-1:-1:-1;;;47506:95:2;;;;;;;;;47653:1;47619:6;:23;;;:30;:35;;47611:105;;;;-1:-1:-1;;;47611:105:2;;;;;;;;;47778:19;;;;:26;47748:19;;:26;:56;47727:152;;;;-1:-1:-1;;;47727:152:2;;;;;;;;;47939:6;:18;;;:25;47910:6;:18;;;:25;:54;47889:149;;;;-1:-1:-1;;;47889:149:2;;;;;;;;;48103:6;:24;;;:31;48069:6;:23;;;:30;:65;48048:166;;;;-1:-1:-1;;;48048:166:2;;;;;;;;;48308:40;48326:6;48334:13;48308:17;:40::i;:::-;48287:146;;;;-1:-1:-1;;;48287:146:2;;;;;;;;;48538:46;48562:6;48570:13;48538:23;:46::i;:::-;48517:158;;;;-1:-1:-1;;;48517:158:2;;;;;;;;;47223:1459;;:::o;3772:165:27:-;3856:20;;:::i;:::-;3895:35;;;;;;;;;3921:7;;3909;;3895:35;;3909:20;;:7;:20;:11;:20;:::i;:::-;3895:35;;3888:42;3772:165;-1:-1:-1;;;3772:165:27:o;6102:149::-;6237:7;6226;;:18;;;6102:149::o;1780:217:51:-;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;3756:368::-;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o;46616:146:2:-;46686:4;46726:1;46709:7;:14;:18;:46;;;;;46753:1;-1:-1:-1;;;;;46731:24:2;:7;46739:1;46731:10;;;;;;;;;;;;;;-1:-1:-1;;;;;46731:24:2;;;46702:53;46616:146;-1:-1:-1;;46616:146:2:o;5788:141:27:-;5915:7;5905;;:17;;5788:141::o;35395:404:2:-;35647:24;;:::i;:::-;35690:102;35698:87;35733:51;35749:34;35757:12;35771:11;35749:7;:34::i;:::-;35733:11;;:51;:15;:51;:::i;:::-;35698:30;:12;35715;35698:30;:16;:30;:::i;:::-;:34;:87;:34;:87;:::i;35690:102::-;35683:109;35395:404;-1:-1:-1;;;;;35395:404:2:o;37720:579::-;37876:24;;:::i;:::-;37927:7;-1:-1:-1;;;;;37916:18:2;:7;-1:-1:-1;;;;;37916:18:2;;37912:63;;;-1:-1:-1;37957:7:2;37950:14;;37912:63;38001:6;;:24;;-1:-1:-1;;;38001:24:2;;37984:14;;-1:-1:-1;;;;;38001:6:2;;:15;;:24;;38017:7;;38001:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38052:6;;:24;;-1:-1:-1;;;38052:24:2;;37984:41;;-1:-1:-1;38035:14:2;;-1:-1:-1;;;;;38052:6:2;;;;:15;;:24;;38068:7;;38052:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38035:41;;38209:83;38259:32;38278:6;1049:1;38259:18;:32::i;:::-;38209:45;38221:32;38240:6;1049:1;38221:18;:32::i;:::-;38209:7;;:45;:11;:45;:::i;:83::-;38202:90;37720:579;-1:-1:-1;;;;;;37720:579:2:o;36377:997::-;36630:24;;:::i;:::-;36718:25;;;;;;;;;36738:4;36718:25;;;;;:11;;:25;:19;:25;:::i;:::-;36714:107;;;36766:44;36774:29;:12;36791:11;36774:29;:16;:29;:::i;36766:44::-;36759:51;;;;36714:107;37042:34;;:::i;:::-;37079:64;37131:11;37079:47;37113:12;37079:29;37131:11;37095:12;37079:29;:15;:29;:::i;:64::-;37042:101;;37237:35;;:::i;:::-;37275:44;37283:29;:12;37300:11;37283:29;:16;:29;:::i;37275:44::-;37237:82;;37337:30;37345:9;37356:10;37337:7;:30::i;:::-;37330:37;36377:997;-1:-1:-1;;;;;;;36377:997:2:o;46114:377::-;46371:24;;:::i;:::-;46414:70;46452:31;:14;46471:11;46452:31;:18;:31;:::i;:::-;46414:33;:15;46434:12;46414:33;:19;:33;:::i;33911:1125::-;34036:24;;:::i;:::-;34166:37;;;;:23;:37;;;;;;;;;34133:70;;;;;;;;;;;;;;;;;:30;;:70;;;34166:37;34133:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34288:13;:20;34312:1;34288:25;;34280:85;;;;-1:-1:-1;;;34280:85:2;;;;;;;;;34376:26;34405:25;:16;34426:3;34405:25;:20;:25;:::i;:::-;34376:54;;34579:18;34533:13;34547:27;34572:1;34547:13;:20;:24;;:27;;;;:::i;:::-;34533:42;;;;;;;;;;;;;;:64;;34512:162;;;;-1:-1:-1;;;34512:162:2;;;;;;;;;34804:7;34799:231;34821:13;:20;34817:1;:24;;;34799:231;;;34886:18;34866:13;34880:1;34866:16;;;;;;;;;;;;;;;;:38;34862:157;;34948:36;;;;:22;:36;;;;;34985:16;;34929:90;;34948:36;34985:13;;:16;;;;;;;;;;;;;;;;34948:54;;;;;;;;;;;;947:2;34929:18;:90::i;:::-;34922:97;;;;;;;34862:157;34843:3;;34799:231;;;;33911:1125;;;;;;:::o;4113:184:27:-;4197:20;;:::i;:::-;4236:54;;;;;;;;;4263:7;;4251;;4236:54;;498:4;;4251:20;;;:11;:20;:::i;:::-;4250:39;;;;;;4236:54;;4229:61;4113:184;-1:-1:-1;;;4113:184:27:o;4839:155::-;4923:20;;:::i;:::-;4972:7;;4962;;:17;:25;;4986:1;4962:25;;;-1:-1:-1;4982:1:27;;4839:155;-1:-1:-1;4839:155:27:o;5178:::-;5262:20;;:::i;:::-;5311:7;;5301;;:17;:25;;5325:1;5301:25;;3427:165;3511:20;;:::i;:::-;3550:35;;;;;;;;;3576:7;;3564;;3550:35;;3564:20;;:7;:20;:11;:20;:::i;4471:184::-;4555:20;;:::i;:::-;4594:54;;;;;;;;;4640:7;;4609;;4594:54;;4640:7;4609:27;;498:4;4609:27;:11;:27;:::i;784:179:29:-;836:7;863:1;859;:5;855:102;;;896:1;895:2;;880:18;;;;855:102;-1:-1:-1;944:1:29;929:17;;4568:128:51;4626:7;4652:37;4656:1;4659;4652:37;;;;;;;;;;;;;;;;;:3;:37::i;49004:933:2:-;49146:4;49170:13;:23;;;49197:1;49170:28;49166:141;;;49221:13;:21;;;49220:22;49212:95;;;;-1:-1:-1;;;49212:95:2;;;;;;;;;49385:13;:21;;;49384:22;:49;;;;49411:13;:22;;;49410:23;49384:49;49380:66;;;-1:-1:-1;49442:4:2;49435:11;;49380:66;49501:19;;:22;;:19;;:22;;;;;;;;;;-1:-1:-1;;;;;49476:47:2;:6;:18;;;49495:1;49476:21;;;;;;;;;;;;;;-1:-1:-1;;;;;49476:47:2;;;:134;;;;;49576:13;:34;;;-1:-1:-1;;;;;49539:71:2;:13;:33;;;-1:-1:-1;;;;;49539:71:2;;49476:134;:213;;;;;49659:13;:30;;;-1:-1:-1;;;;;49626:63:2;:13;:29;;;-1:-1:-1;;;;;49626:63:2;;49476:213;:300;;;;;49742:13;:34;;;-1:-1:-1;;;;;49705:71:2;:13;:33;;;-1:-1:-1;;;;;49705:71:2;;49476:300;:387;;;;;49829:13;:34;;;49792:13;:33;;;:71;49476:387;:454;;;;;49906:13;:24;;;49879:51;;:13;:23;;;:51;;;49457:473;;49004:933;;;;:::o;50226:571::-;50434:27;;;;50374:4;;50414;;50429:53;;50470:12;-1:-1:-1;50463:19:2;;50429:53;50497:13;:22;;;50493:268;;;50588:6;:23;;;50612:1;50588:26;;;;;;;;;;;;;;-1:-1:-1;;;;;50550:64:2;:13;:34;;;-1:-1:-1;;;;;50550:64:2;;50535:79;;50493:268;;;50635:13;:21;;;50631:130;;;50724:6;:23;;;50748:1;50724:26;;;;;;;;;;;;;;-1:-1:-1;;;;;50687:63:2;:13;:33;;;-1:-1:-1;;;;;50687:63:2;;50672:78;;50778:12;-1:-1:-1;50226:571:2;;;;:::o;2055:213:52:-;2111:6;2140:5;;;2164:6;;;;;;:16;;;2179:1;2174;:6;;2164:16;2163:38;;;;2190:1;2186;:5;:14;;;;;2199:1;2195;:5;2186:14;2155:87;;;;-1:-1:-1;;;2155:87:52;;;;;;;;5492:136:27;5614:7;5603;;:18;;5492:136::o;538:554:52:-;594:6;834;830:45;;-1:-1:-1;863:1:52;856:8;;830:45;895:1;-1:-1:-1;;895:7:52;:27;;;;;-1:-1:-1;;;906:1:52;:16;895:27;893:30;885:82;;;;-1:-1:-1;;;885:82:52;;;;;;;;;989:5;;;993:1;989;:5;:1;1012:5;;;;;:10;1004:62;;;;-1:-1:-1;;;1004:62:52;;;;;;;;2501:210;2557:6;2586:5;;;2610:6;;;;;;:16;;;2625:1;2620;:6;;2610:16;2609:38;;;;2636:1;2632;:5;:14;;;;;2645:1;2641;:5;2632:14;2601:84;;;;-1:-1:-1;;;2601:84:52;;;;;;;;5160:193:51;5276:7;5311:12;5303:6;5295:29;;;;-1:-1:-1;;;5295:29:51;;;;;;;;;;;5345:1;5341;:5;;;;;;;5160:193;-1:-1:-1;;;;5160:193:51:o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;301:707::-;;418:3;411:4;403:6;399:17;395:27;385:2;;-1:-1;;426:12;385:2;473:6;460:20;495:80;510:64;567:6;510:64;;;495:80;;;603:21;;;486:89;-1:-1;647:4;660:14;;;;635:17;;;749;;;740:27;;;;737:36;-1:-1;734:2;;;786:1;;776:12;734:2;811:1;796:206;821:6;818:1;815:13;796:206;;;85:6;72:20;97:33;124:5;97:33;;;889:50;;953:14;;;;981;;;;843:1;836:9;796:206;;;800:14;;;;;378:630;;;;;1034:352;;;1164:3;1157:4;1149:6;1145:17;1141:27;1131:2;;-1:-1;;1172:12;1131:2;-1:-1;1202:20;;1242:18;1231:30;;1228:2;;;-1:-1;;1264:12;1228:2;1308:4;1300:6;1296:17;1284:29;;1359:3;1308:4;;1343:6;1339:17;1300:6;1325:32;;1322:41;1319:2;;;1376:1;;1366:12;1412:707;;1529:3;1522:4;1514:6;1510:17;1506:27;1496:2;;-1:-1;;1537:12;1496:2;1584:6;1571:20;1606:80;1621:64;1678:6;1621:64;;1606:80;1714:21;;;1597:89;-1:-1;1758:4;1771:14;;;;1746:17;;;1860;;;1851:27;;;;1848:36;-1:-1;1845:2;;;1897:1;;1887:12;1845:2;1922:1;1907:206;1932:6;1929:1;1926:13;1907:206;;;4263:20;;2000:50;;2064:14;;;;2092;;;;1954:1;1947:9;1907:206;;2424:1765;;2537:4;2525:9;2520:3;2516:19;2512:30;2509:2;;;-1:-1;;2545:12;2509:2;2573:20;2537:4;2573:20;;;2564:29;;2664:17;2651:31;2702:18;;2694:6;2691:30;2688:2;;;2679:1;;2724:12;2688:2;2769:74;2839:3;2830:6;2819:9;2815:22;2769:74;;;2751:16;2744:100;2940:2;2929:9;2925:18;2912:32;2898:46;;2702:18;2956:6;2953:30;2950:2;;;2679:1;;2986:12;2950:2;3031:74;3101:3;3092:6;3081:9;3077:22;3031:74;;;2940:2;3017:5;3013:16;3006:100;3207:2;3196:9;3192:18;3179:32;3165:46;;2702:18;3223:6;3220:30;3217:2;;;2679:1;;3253:12;3217:2;3298:74;3368:3;3359:6;3348:9;3344:22;3298:74;;;3207:2;3284:5;3280:16;3273:100;3470:2;3459:9;3455:18;3442:32;3428:46;;2702:18;3486:6;3483:30;3480:2;;;2679:1;;3516:12;3480:2;3561:74;3631:3;3622:6;3611:9;3607:22;3561:74;;;3470:2;3547:5;3543:16;3536:100;3732:3;3721:9;3717:19;3704:33;3690:47;;2702:18;3749:6;3746:30;3743:2;;;2679:1;;3779:12;3743:2;3824:74;3894:3;3885:6;3874:9;3870:22;3824:74;;;3732:3;3810:5;3806:16;3799:100;4001:3;3990:9;3986:19;3973:33;3959:47;;2702:18;4018:6;4015:30;4012:2;;;2679:1;;4048:12;4012:2;;4093:74;4163:3;4154:6;4143:9;4139:22;4093:74;;;4001:3;4079:5;4075:16;4068:100;;2503:1686;;;;;4611:241;;4715:2;4703:9;4694:7;4690:23;4686:32;4683:2;;;-1:-1;;4721:12;4683:2;85:6;72:20;97:33;124:5;97:33;;4859:263;;4974:2;4962:9;4953:7;4949:23;4945:32;4942:2;;;-1:-1;;4980:12;4942:2;226:6;220:13;238:33;265:5;238:33;;5129:611;;;;;5281:3;5269:9;5260:7;5256:23;5252:33;5249:2;;;-1:-1;;5288:12;5249:2;85:6;72:20;97:33;124:5;97:33;;;5340:63;-1:-1;5440:2;5479:22;;72:20;97:33;72:20;97:33;;;5448:63;-1:-1;5548:2;5587:22;;72:20;97:33;72:20;97:33;;;5556:63;-1:-1;5656:2;5692:22;;2191:20;2216:30;2191:20;2216:30;;;5243:497;;;;-1:-1;5243:497;;-1:-1;;5243:497;5747:1175;;;;;;;;;6003:3;5991:9;5982:7;5978:23;5974:33;5971:2;;;-1:-1;;6010:12;5971:2;85:6;72:20;97:33;124:5;97:33;;;6062:63;-1:-1;6162:2;6201:22;;72:20;97:33;72:20;97:33;;;6170:63;-1:-1;6270:2;6309:22;;72:20;97:33;72:20;97:33;;;6278:63;-1:-1;6378:2;6414:22;;2191:20;2216:30;2191:20;2216:30;;;6386:60;-1:-1;6511:3;6496:19;;6483:33;6536:18;6525:30;;;6522:2;;;-1:-1;;6558:12;6522:2;6596:80;6668:7;6659:6;6648:9;6644:22;6596:80;;;6586:90;;-1:-1;6586:90;-1:-1;6741:3;6726:19;;6713:33;;-1:-1;6755:30;;;6752:2;;;-1:-1;;6788:12;6752:2;;6826:80;6898:7;6889:6;6878:9;6874:22;6826:80;;;5965:957;;;;-1:-1;5965:957;;-1:-1;5965:957;;;;;;6816:90;-1:-1;;;5965:957;6929:737;;;;;;7098:3;7086:9;7077:7;7073:23;7069:33;7066:2;;;-1:-1;;7105:12;7066:2;85:6;72:20;97:33;124:5;97:33;;;7157:63;-1:-1;7257:2;7296:22;;72:20;97:33;72:20;97:33;;;7265:63;-1:-1;7365:2;7404:22;;72:20;97:33;72:20;97:33;;;7373:63;-1:-1;7473:2;7509:22;;2191:20;2216:30;2191:20;2216:30;;;7060:606;;;;-1:-1;7060:606;;7578:3;7618:22;4263:20;;7060:606;-1:-1;;7060:606;7673:863;;;;;;;7859:3;7847:9;7838:7;7834:23;7830:33;7827:2;;;-1:-1;;7866:12;7827:2;85:6;72:20;97:33;124:5;97:33;;;7918:63;-1:-1;8018:2;8057:22;;72:20;97:33;72:20;97:33;;;8026:63;-1:-1;8126:2;8165:22;;72:20;97:33;72:20;97:33;;;8134:63;-1:-1;8234:2;8270:22;;2191:20;2216:30;2191:20;2216:30;;;7821:715;;;;-1:-1;7821:715;;8339:3;8379:22;;4263:20;;8448:3;8488:22;;;4263:20;;-1:-1;7821:715;-1:-1;;7821:715;8543:940;;;;;;;8740:3;8728:9;8719:7;8715:23;8711:33;8708:2;;;-1:-1;;8747:12;8708:2;226:6;220:13;238:33;265:5;238:33;;;8910:2;8960:22;;220:13;8799:74;;-1:-1;238:33;220:13;238:33;;;9029:2;9079:22;;220:13;8918:74;;-1:-1;238:33;220:13;238:33;;;9037:74;;;;9148:2;9202:9;9198:22;4411:13;9156:74;;9267:3;9322:9;9318:22;4411:13;9276:74;;9387:3;9439:9;9435:22;2333:13;2351:30;2375:5;2351:30;;;9396:71;;;;8702:781;;;;;;;;;9490:1241;;;;;;;;;;9727:3;9715:9;9706:7;9702:23;9698:33;9695:2;;;-1:-1;;9734:12;9695:2;85:6;72:20;97:33;124:5;97:33;;;9786:63;-1:-1;9886:2;9925:22;;72:20;97:33;72:20;97:33;;;9894:63;-1:-1;9994:2;10033:22;;72:20;97:33;72:20;97:33;;;10002:63;-1:-1;10102:2;10141:22;;4263:20;;-1:-1;10210:3;10250:22;;4263:20;;-1:-1;10319:3;10359:22;;4263:20;;-1:-1;10428:3;10468:22;;4263:20;;-1:-1;10537:3;10577:22;;4263:20;;-1:-1;10646:3;10683:22;;2191:20;2216:30;2191:20;2216:30;;;10655:60;;;;9689:1042;;;;;;;;;;;;10738:366;;;10859:2;10847:9;10838:7;10834:23;10830:32;10827:2;;;-1:-1;;10865:12;10827:2;85:6;72:20;97:33;124:5;97:33;;;10917:63;11017:2;11056:22;;;;4263:20;;-1:-1;;;10821:283;11111:257;;11223:2;11211:9;11202:7;11198:23;11194:32;11191:2;;;-1:-1;;11229:12;11191:2;2339:6;2333:13;2351:30;2375:5;2351:30;;11375:500;;;11520:2;11508:9;11499:7;11495:23;11491:32;11488:2;;;-1:-1;;11526:12;11488:2;11584:17;11571:31;11622:18;11614:6;11611:30;11608:2;;;-1:-1;;11644:12;11608:2;11674:77;11743:7;11734:6;11723:9;11719:22;11674:77;;;11664:87;11788:2;11827:22;;;;4263:20;;-1:-1;;;;11482:393;11882:751;;;;;12061:3;12049:9;12040:7;12036:23;12032:33;12029:2;;;-1:-1;;12068:12;12029:2;12126:17;12113:31;12164:18;12156:6;12153:30;12150:2;;;-1:-1;;12186:12;12150:2;12216:77;12285:7;12276:6;12265:9;12261:22;12216:77;;;12206:87;12330:2;12369:22;;4263:20;;-1:-1;12438:2;12477:22;;4263:20;;12546:2;12585:22;4263:20;;-1:-1;12023:610;-1:-1;;;;12023:610;12640:241;;12744:2;12732:9;12723:7;12719:23;12715:32;12712:2;;;-1:-1;;12750:12;12712:2;-1:-1;4263:20;;12706:175;-1:-1;12706:175;12888:263;;13003:2;12991:9;12982:7;12978:23;12974:32;12971:2;;;-1:-1;;13009:12;12971:2;-1:-1;4411:13;;12965:186;-1:-1;12965:186;13158:393;;;13287:2;13275:9;13266:7;13262:23;13258:32;13255:2;;;-1:-1;;13293:12;13255:2;4417:6;4411:13;13345:74;;13456:2;13507:9;13503:22;2333:13;2351:30;2375:5;2351:30;;;13464:71;;;;13249:302;;;;;;13558:399;;;13690:2;13678:9;13669:7;13665:23;13661:32;13658:2;;;-1:-1;;13696:12;13658:2;-1:-1;;4411:13;;13859:2;13909:22;;;4411:13;;;;;-1:-1;13652:305;13964:259;;14077:2;14065:9;14056:7;14052:23;14048:32;14045:2;;;-1:-1;;14083:12;14045:2;4556:6;4550:13;52562:4;53832:5;52551:16;53809:5;53806:33;53796:2;;-1:-1;;53843:12;30611:222;-1:-1;;;;;52346:54;;;;14483:37;;30738:2;30723:18;;30709:124;30840:544;-1:-1;;;;;52346:54;;;14483:37;;52346:54;;;31210:2;31195:18;;14483:37;52346:54;;31293:2;31278:18;;14483:37;52180:13;;52173:21;31370:2;31355:18;;15326:34;31045:3;31030:19;;31016:368;31391:333;-1:-1;;;;;52346:54;;;;14483:37;;31710:2;31695:18;;15612:36;31546:2;31531:18;;31517:207;31731:329;-1:-1;;;;;52346:54;;;;14483:37;;52651:22;52640:34;32046:2;32031:18;;30563:36;31884:2;31869:18;;31855:205;32067:370;32244:2;32258:47;;;51372:12;;32229:18;;;51776:19;;;32067:370;;32244:2;51226:14;;;;51816;;;;32067:370;14971:260;14996:6;14993:1;14990:13;14971:260;;;15057:13;;15612:36;;51631:14;;;;14384;;;;15018:1;15011:9;14971:260;;;-1:-1;32311:116;;32215:222;-1:-1;;;;;;32215:222;32444:432;52180:13;;52173:21;15326:34;;32779:2;32764:18;;15612:36;;;;32862:2;32847:18;;15612:36;32621:2;32606:18;;32592:284;33160:310;;33307:2;;33328:17;33321:47;15805:5;51372:12;51788:6;33307:2;33296:9;33292:18;51776:19;-1:-1;53074:101;53088:6;53085:1;53082:13;53074:101;;;53155:11;;;;;53149:18;53136:11;;;51816:14;53136:11;53129:39;53103:10;;53074:101;;;53190:6;53187:1;53184:13;53181:2;;;-1:-1;51816:14;53246:6;33296:9;53237:16;;53230:27;53181:2;-1:-1;53362:7;53346:14;-1:-1;;53342:28;15963:39;;;;51816:14;15963:39;;33278:192;-1:-1;;;33278:192;33477:416;33677:2;33691:47;;;16239:2;33662:18;;;51776:19;16275:34;51816:14;;;16255:55;-1:-1;;;16330:12;;;16323:39;16381:12;;;33648:245;33900:416;34100:2;34114:47;;;16632:2;34085:18;;;51776:19;16668:34;51816:14;;;16648:55;16737:34;16723:12;;;16716:56;-1:-1;;;16792:12;;;16785:30;16834:12;;;34071:245;34323:416;34523:2;34537:47;;;17085:2;34508:18;;;51776:19;17121:34;51816:14;;;17101:55;-1:-1;;;17176:12;;;17169:31;17219:12;;;34494:245;34746:416;34946:2;34960:47;;;17470:2;34931:18;;;51776:19;17506:34;51816:14;;;17486:55;-1:-1;;;17561:12;;;17554:32;17605:12;;;34917:245;35169:416;35369:2;35383:47;;;17856:2;35354:18;;;51776:19;17892:34;51816:14;;;17872:55;-1:-1;;;17947:12;;;17940:43;18002:12;;;35340:245;35592:416;35792:2;35806:47;;;18253:2;35777:18;;;51776:19;18289:34;51816:14;;;18269:55;-1:-1;;;18344:12;;;18337:39;18395:12;;;35763:245;36015:416;36215:2;36229:47;;;18646:2;36200:18;;;51776:19;18682:34;51816:14;;;18662:55;-1:-1;;;18737:12;;;18730:30;18779:12;;;36186:245;36438:416;36638:2;36652:47;;;19030:2;36623:18;;;51776:19;19066:34;51816:14;;;19046:55;19135:27;19121:12;;;19114:49;19182:12;;;36609:245;36861:416;37061:2;37075:47;;;19433:2;37046:18;;;51776:19;19469:34;51816:14;;;19449:55;-1:-1;;;19524:12;;;19517:26;19562:12;;;37032:245;37284:416;37484:2;37498:47;;;19813:2;37469:18;;;51776:19;19849:29;51816:14;;;19829:50;19898:12;;;37455:245;37707:416;37907:2;37921:47;;;20149:2;37892:18;;;51776:19;20185:34;51816:14;;;20165:55;-1:-1;;;20240:12;;;20233:30;20282:12;;;37878:245;38130:416;38330:2;38344:47;;;20533:2;38315:18;;;51776:19;20569:34;51816:14;;;20549:55;-1:-1;;;20624:12;;;20617:44;20680:12;;;38301:245;38553:416;38753:2;38767:47;;;20931:2;38738:18;;;51776:19;20967:34;51816:14;;;20947:55;-1:-1;;;21022:12;;;21015:25;21059:12;;;38724:245;38976:416;39176:2;39190:47;;;21310:2;39161:18;;;51776:19;21346:34;51816:14;;;21326:55;-1:-1;;;21401:12;;;21394:41;21454:12;;;39147:245;39399:416;39599:2;39613:47;;;21705:2;39584:18;;;51776:19;21741:34;51816:14;;;21721:55;21810:34;21796:12;;;21789:56;21879:29;21865:12;;;21858:51;21928:12;;;39570:245;39822:416;40022:2;40036:47;;;22179:2;40007:18;;;51776:19;22215:34;51816:14;;;22195:55;-1:-1;;;22270:12;;;22263:42;22324:12;;;39993:245;40245:416;40445:2;40459:47;;;22575:2;40430:18;;;51776:19;22611:34;51816:14;;;22591:55;22680:30;22666:12;;;22659:52;22730:12;;;40416:245;40668:416;40868:2;40882:47;;;22981:2;40853:18;;;51776:19;23017:34;51816:14;;;22997:55;-1:-1;;;23072:12;;;23065:43;23127:12;;;40839:245;41091:416;41291:2;41305:47;;;23378:2;41276:18;;;51776:19;23414:34;51816:14;;;23394:55;23483:29;23469:12;;;23462:51;23532:12;;;41262:245;41514:416;41714:2;41728:47;;;23783:2;41699:18;;;51776:19;23819:34;51816:14;;;23799:55;-1:-1;;;23874:12;;;23867:44;23930:12;;;41685:245;41937:416;42137:2;42151:47;;;24181:2;42122:18;;;51776:19;24217:34;51816:14;;;24197:55;-1:-1;;;24272:12;;;24265:25;24309:12;;;42108:245;42360:416;42560:2;42574:47;;;42545:18;;;51776:19;24596:34;51816:14;;;24576:55;24650:12;;;42531:245;42783:416;42983:2;42997:47;;;24901:2;42968:18;;;51776:19;24937:34;51816:14;;;24917:55;-1:-1;;;24992:12;;;24985:31;25035:12;;;42954:245;43206:416;43406:2;43420:47;;;25286:2;43391:18;;;51776:19;25322:34;51816:14;;;25302:55;25391:34;25377:12;;;25370:56;-1:-1;;;25446:12;;;25439:25;25483:12;;;43377:245;43629:416;43829:2;43843:47;;;25734:2;43814:18;;;51776:19;25770:34;51816:14;;;25750:55;-1:-1;;;25825:12;;;25818:33;25870:12;;;43800:245;44052:416;44252:2;44266:47;;;26121:2;44237:18;;;51776:19;26157:34;51816:14;;;26137:55;-1:-1;;;26212:12;;;26205:41;26265:12;;;44223:245;44475:416;44675:2;44689:47;;;26516:2;44660:18;;;51776:19;26552:34;51816:14;;;26532:55;26621:27;26607:12;;;26600:49;26668:12;;;44646:245;44898:416;45098:2;45112:47;;;26919:2;45083:18;;;51776:19;26955:34;51816:14;;;26935:55;-1:-1;;;27010:12;;;27003:37;27059:12;;;45069:245;45321:416;45521:2;45535:47;;;27310:2;45506:18;;;51776:19;27346:34;51816:14;;;27326:55;-1:-1;;;27401:12;;;27394:38;27451:12;;;45492:245;45744:416;45944:2;45958:47;;;27702:2;45929:18;;;51776:19;27738:34;51816:14;;;27718:55;-1:-1;;;27793:12;;;27786:45;27850:12;;;45915:245;46167:416;46367:2;46381:47;;;28101:2;46352:18;;;51776:19;28137:34;51816:14;;;28117:55;-1:-1;;;28192:12;;;28185:28;28232:12;;;46338:245;46590:416;46790:2;46804:47;;;28483:2;46775:18;;;51776:19;28519:34;51816:14;;;28499:55;-1:-1;;;28574:12;;;28567:34;28620:12;;;46761:245;47013:416;47213:2;47227:47;;;28871:2;47198:18;;;51776:19;28907:34;51816:14;;;28887:55;-1:-1;;;28962:12;;;28955:40;29014:12;;;47184:245;47436:416;47636:2;47650:47;;;29265:2;47621:18;;;51776:19;29301:34;51816:14;;;29281:55;-1:-1;;;29356:12;;;29349:46;29414:12;;;47607:245;47859:416;48059:2;48073:47;;;29665:2;48044:18;;;51776:19;29701:34;51816:14;;;29681:55;-1:-1;;;29756:12;;;29749:43;29811:12;;;48030:245;48282:589;30146:23;;15612:36;;30146:23;48857:2;48842:18;;15612:36;48565:2;48550:18;;48536:335;48878:222;15612:36;;;49005:2;48990:18;;48976:124;49107:321;15612:36;;;52180:13;52173:21;49414:2;49399:18;;15326:34;49256:2;49241:18;;49227:201;49435:333;15612:36;;;49754:2;49739:18;;15612:36;49590:2;49575:18;;49561:207;49775:444;15612:36;;;50122:2;50107:18;;15612:36;;;;50205:2;50190:18;;15612:36;49958:2;49943:18;;49929:290;50226:256;50288:2;50282:9;50314:17;;;50389:18;50374:34;;50410:22;;;50371:62;50368:2;;;50446:1;;50436:12;50368:2;50288;50455:22;50266:216;;-1:-1;50266:216;50489:304;;50648:18;50640:6;50637:30;50634:2;;;-1:-1;;50670:12;50634:2;-1:-1;50715:4;50703:17;;;50768:15;;50571:222;53383:117;-1:-1;;;;;52346:54;;53442:35;;53432:2;;53491:1;;53481:12;53432:2;53426:74;;53507:111;53588:5;52180:13;52173:21;53566:5;53563:32;53553:2;;53609:1;;53599:12"
+ },
+ "methodIdentifiers": {
+ "AUCTION_TIME()": "e592301a",
+ "getCollateralDust(address)": "6ccb9506",
+ "getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)": "cd43fbfb",
+ "getExpiredPayoutRate(address)": "47840930",
+ "getMarginRequired((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)": "053fe57c",
+ "getMaxPrice(address,address,address,bool,uint256)": "dc1b3f00",
+ "getNakedMarginRequired(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)": "0b0509fb",
+ "getOracleDeviation()": "b29d5ee8",
+ "getSpotShock(address,address,address,bool)": "46345900",
+ "getTimesToExpiry(address,address,address,bool)": "47d438a5",
+ "isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)": "a6c56907",
+ "oracle()": "7dc0d1d0",
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "setCollateralDust(address,uint256)": "9a783d11",
+ "setOracleDeviation(uint256)": "c73547e3",
+ "setSpotShock(address,address,address,bool,uint256)": "8aab8fa5",
+ "setUpperBoundValues(address,address,address,bool,uint256[],uint256[])": "7f519b72",
+ "transferOwnership(address)": "f2fde38b",
+ "updateUpperBoundValue(address,address,address,bool,uint256,uint256)": "7ad7f800"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dust\",\"type\":\"uint256\"}],\"name\":\"CollateralDustUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"MaxPriceAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"MaxPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oracleDeviation\",\"type\":\"uint256\"}],\"name\":\"OracleDeviationUpdated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"product\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"spotShock\",\"type\":\"uint256\"}],\"name\":\"SpotShockUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"}],\"name\":\"TimeToExpiryAdded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AUCTION_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"getCollateralDust\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"}],\"name\":\"getExcessCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"getExpiredPayoutRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"}],\"name\":\"getMarginRequired\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_timeToExpiry\",\"type\":\"uint256\"}],\"name\":\"getMaxPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_shortAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shortExpiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_collateralDecimals\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getNakedMarginRequired\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracleDeviation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getSpotShock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getTimesToExpiry\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_vaultLatestUpdate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_roundId\",\"type\":\"uint256\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_dust\",\"type\":\"uint256\"}],\"name\":\"setCollateralDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deviation\",\"type\":\"uint256\"}],\"name\":\"setOracleDeviation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_shockValue\",\"type\":\"uint256\"}],\"name\":\"setSpotShock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"_timesToExpiry\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"setUpperBoundValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"updateUpperBoundValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn\",\"methods\":{\"constructor\":{\"params\":{\"_oracle\":\"oracle module address\"}},\"getCollateralDust(address)\":{\"params\":{\"_collateral\":\"collateral asset address\"},\"returns\":{\"_0\":\"dust amount\"}},\"getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"details\":\"return amount is denominated in the collateral asset for the oToken in the vault, or the collateral asset in the vault\",\"params\":{\"_vault\":\"theoretical vault that needs to be checked\",\"_vaultType\":\"vault type (0 for spread/max loss, 1 for naked margin)\"},\"returns\":{\"_0\":\"excessCollateral the amount by which the margin is above or below the required amount\",\"_1\":\"isExcess True if there is excess margin in the vault, False if there is a deficit of margin in the vault if True, collateral can be taken out from the vault, if False, additional collateral needs to be added to vault\"}},\"getExpiredPayoutRate(address)\":{\"params\":{\"_otoken\":\"oToken address\"},\"returns\":{\"_0\":\"how much collateral can be taken out by 1 otoken unit, scaled by 1e8, or how much collateral can be taken out for 1 (1e8) oToken\"}},\"getMarginRequired((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"params\":{\"_vault\":\"theoretical vault that needs to be checked\",\"_vaultType\":\"vault type\"},\"returns\":{\"_0\":\"the vault collateral amount, and marginRequired the minimal amount of collateral needed in a vault, scaled to 1e27\"}},\"getMaxPrice(address,address,address,bool,uint256)\":{\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_timeToExpiry\":\"option time to expiry timestamp\",\"_underlying\":\"otoken underlying asset\"},\"returns\":{\"_0\":\"option upper bound value (1e27)\"}},\"getNakedMarginRequired(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)\":{\"details\":\"_shortAmount, _strikePrice and _underlyingPrice should be scaled by 1e8\",\"params\":{\"_collateral\":\"collateral asset address\",\"_collateralDecimals\":\"otoken collateral asset decimals\",\"_isPut\":\"otoken type\",\"_shortAmount\":\"amount of short otoken\",\"_shortExpiryTimestamp\":\"otoken expiry timestamp\",\"_strike\":\"strike asset address\",\"_strikePrice\":\"otoken strike price\",\"_underlying\":\"underlying asset address\",\"_underlyingPrice\":\"otoken underlying price\"},\"returns\":{\"_0\":\"collateral required for a naked margin vault, in collateral asset decimals\"}},\"getOracleDeviation()\":{\"returns\":{\"_0\":\"oracle deviation value (1e27)\"}},\"getSpotShock(address,address,address,bool)\":{\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_underlying\":\"otoken underlying asset\"},\"returns\":{\"_0\":\"_shockValue spot shock value (1e27)\"}},\"getTimesToExpiry(address,address,address,bool)\":{\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_underlying\":\"otoken underlying asset\"},\"returns\":{\"_0\":\"array of times to expiry\"}},\"isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)\":{\"details\":\"if the vault is of type 0, the function will revert\",\"params\":{\"_roundId\":\"chainlink round id\",\"_vault\":\"vault struct\",\"_vaultLatestUpdate\":\"vault latest update (timestamp when latest vault state change happened)\",\"_vaultType\":\"vault type (0 for max loss/spread and 1 for naked margin vault)\"},\"returns\":{\"_0\":\"isLiquidatable, true if vault is undercollateralized, liquidation price and collateral dust amount\"}},\"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.\"},\"setCollateralDust(address,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"collateral asset address\",\"_dust\":\"dust amount, should be scaled by collateral asset decimals\"}},\"setOracleDeviation(uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_deviation\":\"deviation value\"}},\"setSpotShock(address,address,address,bool,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_shockValue\":\"spot shock value\",\"_strike\":\"otoken strike asset\",\"_underlying\":\"otoken underlying asset\"}},\"setUpperBoundValues(address,address,address,bool,uint256[],uint256[])\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_timesToExpiry\":\"array of times to expiry timestamp\",\"_underlying\":\"otoken underlying asset\",\"_values\":\"upper bound values array\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateUpperBoundValue(address,address,address,bool,uint256,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_timeToExpiry\":\"option time to expiry timestamp\",\"_underlying\":\"otoken underlying asset\",\"_value\":\"upper bound value\"}}},\"stateVariables\":{\"BASE\":{\"details\":\"decimals used by strike price and oracle price\"},\"SCALING_FACTOR\":{\"details\":\"decimals option upper bound value, spot shock and oracle deviation\"},\"ZERO\":{\"details\":\"FixedPoint 0\"},\"dust\":{\"details\":\"mapping to store dust amount per option collateral asset (scaled by collateral asset decimals)\"},\"maxPriceAtTimeToExpiry\":{\"details\":\"mapping to store option upper bound value at specific time to expiry for a given product (1e27)\"},\"oracle\":{\"details\":\"oracle module\"},\"oracleDeviation\":{\"details\":\"oracle deviation value (1e27)\"},\"spotShock\":{\"details\":\"mapping to store shock value for spot price of a given product (1e27)\"},\"timesToExpiryForProduct\":{\"details\":\"mapping to store array of time to expiry for a given product\"}},\"title\":\"MarginCalculator\"},\"userdoc\":{\"methods\":{\"AUCTION_TIME()\":{\"notice\":\"auction length\"},\"constructor\":\"constructor\",\"getCollateralDust(address)\":{\"notice\":\"get dust amount for collateral asset\"},\"getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"notice\":\"returns the amount of collateral that can be removed from an actual or a theoretical vault\"},\"getExpiredPayoutRate(address)\":{\"notice\":\"return the cash value of an expired oToken, denominated in collateral\"},\"getMarginRequired((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"notice\":\"calculate required collateral margin for a vault\"},\"getMaxPrice(address,address,address,bool,uint256)\":{\"notice\":\"get option upper bound value for specific time to expiry\"},\"getNakedMarginRequired(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)\":{\"notice\":\"return the collateral required for naked margin vault, in collateral asset decimals\"},\"getOracleDeviation()\":{\"notice\":\"get oracle deviation\"},\"getSpotShock(address,address,address,bool)\":{\"notice\":\"get spot shock value\"},\"getTimesToExpiry(address,address,address,bool)\":{\"notice\":\"get times to expiry for a specific product\"},\"isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)\":{\"notice\":\"check if a specific vault is undercollateralized at a specific chainlink round\"},\"setCollateralDust(address,uint256)\":{\"notice\":\"set dust amount for collateral asset\"},\"setOracleDeviation(uint256)\":{\"notice\":\"set oracle deviation (1e27)\"},\"setSpotShock(address,address,address,bool,uint256)\":{\"notice\":\"set spot shock value, scaled to 1e27\"},\"setUpperBoundValues(address,address,address,bool,uint256[],uint256[])\":{\"notice\":\"set product upper bound values\"},\"updateUpperBoundValue(address,address,address,bool,uint256,uint256)\":{\"notice\":\"set option upper bound value for specific time to expiry (1e27)\"}},\"notice\":\"Calculator module that checks if a given vault is valid, calculates margin requirements, and settlement proceeds\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/MarginCalculator.sol\":\"MarginCalculator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/MarginCalculator.sol\":{\"keccak256\":\"0xd0d0b141dd945e6f81b3850b5907b90dde9dc40d30f9aa2ac9204c1252a1724c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f93bcf524b9ec42f5e85e16dbb332071bf65710323215078421fc3cae1e5fa74\",\"dweb:/ipfs/QmTF69ehzP2T2J6iWpSoDjcDkbw7uwqh5vz8dgi4ywg3oP\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]},\"contracts/libs/FixedPointInt256.sol\":{\"keccak256\":\"0x430dc07238bfc5b1c422ac67366b7bf7cfeb7ff64f158bf0b5293a21aa4bb2ab\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fdd0edd9eb050609f26da31fb5d6e8e610a6aadaf7b751224b31aa9f656bfcf0\",\"dweb:/ipfs/QmbmZEW49thzmKqUUqdcEFwLahx5REXQZ4kQMBr1yfc1XB\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/libs/SignedConverter.sol\":{\"keccak256\":\"0xcd580557dc2c337a870d632b1120f2ec0f7494056d48620598a11d09418dcfa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cfa5fb05fa755dde57c74abf107eaf806794c48fa571cf17abaf856074fddd30\",\"dweb:/ipfs/QmV5L5XdK6BwmKDxj4zqPVh7MnHJeY8pUxZ2JLHqzW1B22\"]},\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/SignedSafeMath.sol\":{\"keccak256\":\"0x5c37725e4c762112901151ff9fbd6678f2edd936666f987d0904865b528647e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://072c740989fea30fe46f9410377697fafadc8b79a0c297a0ebfbd38f5a40f305\",\"dweb:/ipfs/QmSb7ggwKV5LU9QDHHZ6tUDUEhCyiFEoD12ZS4FFFnqjkF\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/MarginPool.sol": {
+ "MarginPool": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "AssetFarmed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldAddress",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newAddress",
+ "type": "address"
+ }
+ ],
+ "name": "FarmerUpdated",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "TransferToPool",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "TransferToUser",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "_asset",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "_user",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_amount",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferToPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "_asset",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "_user",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_amount",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferToUser",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "farm",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "farmer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getStoredBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "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": "_farmer",
+ "type": "address"
+ }
+ ],
+ "name": "setFarmer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_user",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferToPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_user",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferToUser",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b5060405161175e38038061175e8339818101604052602081101561003357600080fd5b505160006100486001600160e01b0361011216565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0381166100ed576040805162461bcd60e51b815260206004820152601460248201527f496e76616c6964206164647265737320626f6f6b000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610116565b3390565b611639806101256000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063d811fcf011610071578063d811fcf01461049f578063dd2c99f7146104a7578063e2ed781c146104dd578063f2fde38b14610503578063f5887cdd14610529578063fa93b2a514610531576100b4565b80634979cd14146100b9578063715018a61461026057806386a19c5e146102685780638da5cb5b1461040d578063baf46ba614610431578063c595b00714610467575b600080fd5b61025e600480360360608110156100cf57600080fd5b810190602081018135600160201b8111156100e957600080fd5b8201836020820111156100fb57600080fd5b803590602001918460208302840111600160201b8311171561011c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561016b57600080fd5b82018360208201111561017d57600080fd5b803590602001918460208302840111600160201b8311171561019e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460208302840111600160201b8311171561022057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610567945050505050565b005b61025e6106d2565b61025e6004803603606081101561027e57600080fd5b810190602081018135600160201b81111561029857600080fd5b8201836020820111156102aa57600080fd5b803590602001918460208302840111600160201b831117156102cb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561031a57600080fd5b82018360208201111561032c57600080fd5b803590602001918460208302840111600160201b8311171561034d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561039c57600080fd5b8201836020820111156103ae57600080fd5b803590602001918460208302840111600160201b831117156103cf57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610786945050505050565b6104156108eb565b604080516001600160a01b039092168252519081900360200190f35b61025e6004803603606081101561044757600080fd5b506001600160a01b038135811691602081013590911690604001356108fa565b61048d6004803603602081101561047d57600080fd5b50356001600160a01b0316610aea565b60408051918252519081900360200190f35b610415610b05565b61025e600480360360608110156104bd57600080fd5b506001600160a01b03813581169160208101359091169060400135610b14565b61025e600480360360208110156104f357600080fd5b50356001600160a01b0316610cba565b61025e6004803603602081101561051957600080fd5b50356001600160a01b0316610d80565b610415610e8a565b61025e6004803603606081101561054757600080fd5b506001600160a01b03813581169160208101359091169060400135610e99565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b557600080fd5b505afa1580156105c9573d6000803e3d6000fd5b505050506040513d60208110156105df57600080fd5b50516001600160a01b031633146106275760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b81518351148015610639575080518251145b6106745760405162461bcd60e51b815260040180806020018281038252603b815260200180611540603b913960400191505060405180910390fd5b60005b83518110156106cc576106c484828151811061068f57fe5b60200260200101518483815181106106a357fe5b60200260200101518484815181106106b757fe5b6020026020010151610b14565b600101610677565b50505050565b6106da611047565b6000546001600160a01b0390811691161461073c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d457600080fd5b505afa1580156107e8573d6000803e3d6000fd5b505050506040513d60208110156107fe57600080fd5b50516001600160a01b031633146108465760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b81518351148015610858575080518251145b6108935760405162461bcd60e51b815260040180806020018281038252603b8152602001806115c9603b913960400191505060405180910390fd5b60005b83518110156106cc576108e38482815181106108ae57fe5b60200260200101518483815181106108c257fe5b60200260200101518484815181106108d657fe5b6020026020010151610e99565b600101610896565b6000546001600160a01b031690565b6002546001600160a01b03163314610959576040805162461bcd60e51b815260206004820181905260248201527f4d617267696e506f6f6c3a2053656e646572206973206e6f74206661726d6572604482015290519081900360640190fd5b6001600160a01b03821661099e5760405162461bcd60e51b815260040180806020018281038252602481526020018061157b6024913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156109e857600080fd5b505afa1580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b50516001600160a01b038516600090815260036020526040902054909150610a40828263ffffffff61104b16565b831115610a7e5760405162461bcd60e51b81526004018080602001828103825260288152602001806115186028913960400191505060405180910390fd5b610a986001600160a01b038616858563ffffffff61109416565b836001600160a01b0316856001600160a01b03167f2bfce9f5efc2d7cd579270748ddf9d23bc6c0af5193a2759314c2300af9956b1856040518082815260200191505060405180910390a35050505050565b6001600160a01b031660009081526003602052604090205490565b6002546001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6257600080fd5b505afa158015610b76573d6000803e3d6000fd5b505050506040513d6020811015610b8c57600080fd5b50516001600160a01b03163314610bd45760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b60008111610c135760405162461bcd60e51b815260040180806020018281038252602f815260200180611472602f913960400191505060405180910390fd5b6001600160a01b038316600090815260036020526040902054610c3c908263ffffffff6110eb16565b6001600160a01b038416600081815260036020526040902091909155610c6a9083308463ffffffff61114516565b816001600160a01b0316836001600160a01b03167f9b4f8cdd00ca1dad21e1b00707351fe747dd74738cf95f60f66518c52c35e645836040518082815260200191505060405180910390a3505050565b610cc2611047565b6000546001600160a01b03908116911614610d24576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002546040516001600160a01b038084169216907fec2062989428d4fc69d3ba2664807361f4647daf215450588331bbe51efb6a6890600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b610d88611047565b6000546001600160a01b03908116911614610dea576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610e2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806114a16026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee757600080fd5b505afa158015610efb573d6000803e3d6000fd5b505050506040513d6020811015610f1157600080fd5b50516001600160a01b03163314610f595760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b6001600160a01b038216301415610fa15760405162461bcd60e51b815260040180806020018281038252602d8152602001806114eb602d913960400191505060405180910390fd5b6001600160a01b038316600090815260036020526040902054610fca908263ffffffff61104b16565b6001600160a01b038416600081815260036020526040902091909155610ff790838363ffffffff61109416565b816001600160a01b0316836001600160a01b03167f2d6ff46a316ec627f7677daafa6ad7d6f36bcf938c5f47bf6e671b09d27b415f836040518082815260200191505060405180910390a3505050565b3390565b600061108d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061119f565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110e6908490611236565b505050565b60008282018381101561108d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526106cc908590611236565b6000818484111561122e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111f35781810151838201526020016111db565b50505050905090810190601f1680156112205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061128b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166112e79092919063ffffffff16565b8051909150156110e6578080602001905160208110156112aa57600080fd5b50516110e65760405162461bcd60e51b815260040180806020018281038252602a81526020018061159f602a913960400191505060405180910390fd5b60606112f684846000856112fe565b949350505050565b60606113098561146b565b61135a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106113995780518252601f19909201916020918201910161137a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146113fb576040519150601f19603f3d011682016040523d82523d6000602084013e611400565b606091505b509150915081156114145791506112f69050565b8051156114245780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156111f35781810151838201526020016111db565b3b15159056fe4d617267696e506f6f6c3a207472616e73666572546f506f6f6c20616d6f756e7420697320657175616c20746f20304f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d617267696e506f6f6c3a2053656e646572206973206e6f7420436f6e74726f6c6c65724d617267696e506f6f6c3a2063616e6e6f74207472616e736665722061737365747320746f206f6e6573656c664d617267696e506f6f6c3a20616d6f756e7420746f206661726d2065786365656473206c696d69744d617267696e506f6f6c3a2062617463685472616e73666572546f506f6f6c206172726179206c656e6774687320617265206e6f7420657175616c4d617267696e506f6f6c3a20696e76616c696420726563656976657220616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565644d617267696e506f6f6c3a2062617463685472616e73666572546f55736572206172726179206c656e6774687320617265206e6f7420657175616ca26469706673582212206948ad5b42a37c029e944d5355bcbc0f258e24afb865ce066c30960edfa4eb8764736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x175E CODESIZE SUB DUP1 PUSH2 0x175E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 PUSH2 0x48 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x112 AND JUMP JUMPDEST PUSH1 0x0 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 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964206164647265737320626F6F6B000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD 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 SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x116 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x1639 DUP1 PUSH2 0x125 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 0xD811FCF0 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD811FCF0 EQ PUSH2 0x49F JUMPI DUP1 PUSH4 0xDD2C99F7 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xE2ED781C EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xFA93B2A5 EQ PUSH2 0x531 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x4979CD14 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0x86A19C5E EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0xBAF46BA6 EQ PUSH2 0x431 JUMPI DUP1 PUSH4 0xC595B007 EQ PUSH2 0x467 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x17D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x567 SWAP5 POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25E PUSH2 0x6D2 JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x786 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x415 PUSH2 0x8EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x8FA JUMP JUMPDEST PUSH2 0x48D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAEA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x415 PUSH2 0xB05 JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD80 JUMP JUMPDEST PUSH2 0x415 PUSH2 0xE8A JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xE99 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x627 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x639 JUMPI POP DUP1 MLOAD DUP3 MLOAD EQ JUMPDEST PUSH2 0x674 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1540 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x6CC JUMPI PUSH2 0x6C4 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x68F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x6A3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x6B7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x677 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x6DA PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x73C JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x846 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x858 JUMPI POP DUP1 MLOAD DUP3 MLOAD EQ JUMPDEST PUSH2 0x893 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15C9 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x6CC JUMPI PUSH2 0x8E3 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x8AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x8C2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8D6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xE99 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x896 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x959 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D617267696E506F6F6C3A2053656E646572206973206E6F74206661726D6572 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x157B PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0xA40 DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x104B AND JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0xA7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1518 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA98 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP6 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1094 AND JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2BFCE9F5EFC2D7CD579270748DDF9D23BC6C0AF5193A2759314C2300AF9956B1 DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP 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 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBD4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xC13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1472 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC3C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x10EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xC6A SWAP1 DUP4 ADDRESS DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1145 AND JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9B4F8CDD00CA1DAD21E1B00707351FE747DD74738CF95F60F66518C52C35E645 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0xCC2 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xD24 JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xEC2062989428D4FC69D3BA2664807361F4647DAF215450588331BBE51EFB6A68 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x2 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 PUSH2 0xD88 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xDEA JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE2F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14A1 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF59 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH2 0xFA1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14EB PUSH1 0x2D SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFCA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x104B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xFF7 SWAP1 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1094 AND JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2D6FF46A316EC627F7677DAAFA6AD7D6F36BCF938C5F47BF6E671B09D27B415F DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x108D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x119F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP 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 0x10E6 SWAP1 DUP5 SWAP1 PUSH2 0x1236 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x108D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x6CC SWAP1 DUP6 SWAP1 PUSH2 0x1236 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x122E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11DB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1220 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x128B 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 0x12E7 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x10E6 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x10E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x159F PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x12F6 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x12FE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1309 DUP6 PUSH2 0x146B JUMP JUMPDEST PUSH2 0x135A JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1399 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x137A JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x13FB 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 0x1400 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x1414 JUMPI SWAP2 POP PUSH2 0x12F6 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1424 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP7 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP7 MLOAD DUP8 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x11F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11DB JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP INVALID 0x4D PUSH2 0x7267 PUSH10 0x6E506F6F6C3A20747261 PUSH15 0x73666572546F506F6F6C20616D6F75 PUSH15 0x7420697320657175616C20746F2030 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F20616464726573734D617267696E506F6F6C3A2053656E64 PUSH6 0x72206973206E PUSH16 0x7420436F6E74726F6C6C65724D617267 PUSH10 0x6E506F6F6C3A2063616E PUSH15 0x6F74207472616E7366657220617373 PUSH6 0x747320746F20 PUSH16 0x6E6573656C664D617267696E506F6F6C GASPRICE KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420746F206661726D2065786365656473206C696D PUSH10 0x744D617267696E506F6F PUSH13 0x3A2062617463685472616E7366 PUSH6 0x72546F506F6F PUSH13 0x206172726179206C656E677468 PUSH20 0x20617265206E6F7420657175616C4D617267696E POP PUSH16 0x6F6C3A20696E76616C69642072656365 PUSH10 0x76657220616464726573 PUSH20 0x5361666545524332303A204552433230206F7065 PUSH19 0x6174696F6E20646964206E6F74207375636365 PUSH6 0x644D61726769 PUSH15 0x506F6F6C3A2062617463685472616E PUSH20 0x666572546F55736572206172726179206C656E67 PUSH21 0x687320617265206E6F7420657175616CA264697066 PUSH20 0x582212206948AD5B42A37C029E944D5355BCBC0F 0x25 DUP15 0x24 0xAF 0xB8 PUSH6 0xCE066C30960E 0xDF LOG4 0xEB DUP8 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "478:6230:3:-:0;;;988:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;988:154:3;893:17:48;913:12;-1:-1:-1;;;;;913:10:48;:12;:::i;:::-;935:6;:18;;-1:-1:-1;;;;;;935:18:48;-1:-1:-1;;;;;935:18:48;;;;;;;968:43;;935:18;;-1:-1:-1;935:18:48;968:43;;935:6;;968:43;-1:-1:-1;;;;;;1047:26:3;;1039:59;;;;;-1:-1:-1;;;1039:59:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1109:11;:26;;-1:-1:-1;;;;;;1109:26:3;-1:-1:-1;;;;;1109:26:3;;;;;;;;;;478:6230;;623:104:46;710:10;623:104;:::o;478:6230:3:-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c8063d811fcf011610071578063d811fcf01461049f578063dd2c99f7146104a7578063e2ed781c146104dd578063f2fde38b14610503578063f5887cdd14610529578063fa93b2a514610531576100b4565b80634979cd14146100b9578063715018a61461026057806386a19c5e146102685780638da5cb5b1461040d578063baf46ba614610431578063c595b00714610467575b600080fd5b61025e600480360360608110156100cf57600080fd5b810190602081018135600160201b8111156100e957600080fd5b8201836020820111156100fb57600080fd5b803590602001918460208302840111600160201b8311171561011c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561016b57600080fd5b82018360208201111561017d57600080fd5b803590602001918460208302840111600160201b8311171561019e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460208302840111600160201b8311171561022057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610567945050505050565b005b61025e6106d2565b61025e6004803603606081101561027e57600080fd5b810190602081018135600160201b81111561029857600080fd5b8201836020820111156102aa57600080fd5b803590602001918460208302840111600160201b831117156102cb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561031a57600080fd5b82018360208201111561032c57600080fd5b803590602001918460208302840111600160201b8311171561034d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561039c57600080fd5b8201836020820111156103ae57600080fd5b803590602001918460208302840111600160201b831117156103cf57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610786945050505050565b6104156108eb565b604080516001600160a01b039092168252519081900360200190f35b61025e6004803603606081101561044757600080fd5b506001600160a01b038135811691602081013590911690604001356108fa565b61048d6004803603602081101561047d57600080fd5b50356001600160a01b0316610aea565b60408051918252519081900360200190f35b610415610b05565b61025e600480360360608110156104bd57600080fd5b506001600160a01b03813581169160208101359091169060400135610b14565b61025e600480360360208110156104f357600080fd5b50356001600160a01b0316610cba565b61025e6004803603602081101561051957600080fd5b50356001600160a01b0316610d80565b610415610e8a565b61025e6004803603606081101561054757600080fd5b506001600160a01b03813581169160208101359091169060400135610e99565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b557600080fd5b505afa1580156105c9573d6000803e3d6000fd5b505050506040513d60208110156105df57600080fd5b50516001600160a01b031633146106275760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b81518351148015610639575080518251145b6106745760405162461bcd60e51b815260040180806020018281038252603b815260200180611540603b913960400191505060405180910390fd5b60005b83518110156106cc576106c484828151811061068f57fe5b60200260200101518483815181106106a357fe5b60200260200101518484815181106106b757fe5b6020026020010151610b14565b600101610677565b50505050565b6106da611047565b6000546001600160a01b0390811691161461073c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d457600080fd5b505afa1580156107e8573d6000803e3d6000fd5b505050506040513d60208110156107fe57600080fd5b50516001600160a01b031633146108465760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b81518351148015610858575080518251145b6108935760405162461bcd60e51b815260040180806020018281038252603b8152602001806115c9603b913960400191505060405180910390fd5b60005b83518110156106cc576108e38482815181106108ae57fe5b60200260200101518483815181106108c257fe5b60200260200101518484815181106108d657fe5b6020026020010151610e99565b600101610896565b6000546001600160a01b031690565b6002546001600160a01b03163314610959576040805162461bcd60e51b815260206004820181905260248201527f4d617267696e506f6f6c3a2053656e646572206973206e6f74206661726d6572604482015290519081900360640190fd5b6001600160a01b03821661099e5760405162461bcd60e51b815260040180806020018281038252602481526020018061157b6024913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156109e857600080fd5b505afa1580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b50516001600160a01b038516600090815260036020526040902054909150610a40828263ffffffff61104b16565b831115610a7e5760405162461bcd60e51b81526004018080602001828103825260288152602001806115186028913960400191505060405180910390fd5b610a986001600160a01b038616858563ffffffff61109416565b836001600160a01b0316856001600160a01b03167f2bfce9f5efc2d7cd579270748ddf9d23bc6c0af5193a2759314c2300af9956b1856040518082815260200191505060405180910390a35050505050565b6001600160a01b031660009081526003602052604090205490565b6002546001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6257600080fd5b505afa158015610b76573d6000803e3d6000fd5b505050506040513d6020811015610b8c57600080fd5b50516001600160a01b03163314610bd45760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b60008111610c135760405162461bcd60e51b815260040180806020018281038252602f815260200180611472602f913960400191505060405180910390fd5b6001600160a01b038316600090815260036020526040902054610c3c908263ffffffff6110eb16565b6001600160a01b038416600081815260036020526040902091909155610c6a9083308463ffffffff61114516565b816001600160a01b0316836001600160a01b03167f9b4f8cdd00ca1dad21e1b00707351fe747dd74738cf95f60f66518c52c35e645836040518082815260200191505060405180910390a3505050565b610cc2611047565b6000546001600160a01b03908116911614610d24576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002546040516001600160a01b038084169216907fec2062989428d4fc69d3ba2664807361f4647daf215450588331bbe51efb6a6890600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b610d88611047565b6000546001600160a01b03908116911614610dea576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610e2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806114a16026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee757600080fd5b505afa158015610efb573d6000803e3d6000fd5b505050506040513d6020811015610f1157600080fd5b50516001600160a01b03163314610f595760405162461bcd60e51b81526004018080602001828103825260248152602001806114c76024913960400191505060405180910390fd5b6001600160a01b038216301415610fa15760405162461bcd60e51b815260040180806020018281038252602d8152602001806114eb602d913960400191505060405180910390fd5b6001600160a01b038316600090815260036020526040902054610fca908263ffffffff61104b16565b6001600160a01b038416600081815260036020526040902091909155610ff790838363ffffffff61109416565b816001600160a01b0316836001600160a01b03167f2d6ff46a316ec627f7677daafa6ad7d6f36bcf938c5f47bf6e671b09d27b415f836040518082815260200191505060405180910390a3505050565b3390565b600061108d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061119f565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110e6908490611236565b505050565b60008282018381101561108d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526106cc908590611236565b6000818484111561122e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111f35781810151838201526020016111db565b50505050905090810190601f1680156112205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061128b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166112e79092919063ffffffff16565b8051909150156110e6578080602001905160208110156112aa57600080fd5b50516110e65760405162461bcd60e51b815260040180806020018281038252602a81526020018061159f602a913960400191505060405180910390fd5b60606112f684846000856112fe565b949350505050565b60606113098561146b565b61135a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106113995780518252601f19909201916020918201910161137a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146113fb576040519150601f19603f3d011682016040523d82523d6000602084013e611400565b606091505b509150915081156114145791506112f69050565b8051156114245780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156111f35781810151838201526020016111db565b3b15159056fe4d617267696e506f6f6c3a207472616e73666572546f506f6f6c20616d6f756e7420697320657175616c20746f20304f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d617267696e506f6f6c3a2053656e646572206973206e6f7420436f6e74726f6c6c65724d617267696e506f6f6c3a2063616e6e6f74207472616e736665722061737365747320746f206f6e6573656c664d617267696e506f6f6c3a20616d6f756e7420746f206661726d2065786365656473206c696d69744d617267696e506f6f6c3a2062617463685472616e73666572546f506f6f6c206172726179206c656e6774687320617265206e6f7420657175616c4d617267696e506f6f6c3a20696e76616c696420726563656976657220616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565644d617267696e506f6f6c3a2062617463685472616e73666572546f55736572206172726179206c656e6774687320617265206e6f7420657175616ca26469706673582212206948ad5b42a37c029e944d5355bcbc0f258e24afb865ce066c30960edfa4eb8764736f6c634300060a0033",
+ "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 0xD811FCF0 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD811FCF0 EQ PUSH2 0x49F JUMPI DUP1 PUSH4 0xDD2C99F7 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xE2ED781C EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xFA93B2A5 EQ PUSH2 0x531 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x4979CD14 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0x86A19C5E EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0xBAF46BA6 EQ PUSH2 0x431 JUMPI DUP1 PUSH4 0xC595B007 EQ PUSH2 0x467 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x17D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x567 SWAP5 POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25E PUSH2 0x6D2 JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 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 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x786 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x415 PUSH2 0x8EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x8FA JUMP JUMPDEST PUSH2 0x48D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAEA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x415 PUSH2 0xB05 JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD80 JUMP JUMPDEST PUSH2 0x415 PUSH2 0xE8A JUMP JUMPDEST PUSH2 0x25E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xE99 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x627 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x639 JUMPI POP DUP1 MLOAD DUP3 MLOAD EQ JUMPDEST PUSH2 0x674 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1540 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x6CC JUMPI PUSH2 0x6C4 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x68F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x6A3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x6B7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x677 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x6DA PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x73C JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x846 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x858 JUMPI POP DUP1 MLOAD DUP3 MLOAD EQ JUMPDEST PUSH2 0x893 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15C9 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x6CC JUMPI PUSH2 0x8E3 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x8AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x8C2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8D6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xE99 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x896 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x959 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D617267696E506F6F6C3A2053656E646572206973206E6F74206661726D6572 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x157B PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0xA40 DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x104B AND JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0xA7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1518 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA98 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP6 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1094 AND JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2BFCE9F5EFC2D7CD579270748DDF9D23BC6C0AF5193A2759314C2300AF9956B1 DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP 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 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBD4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xC13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1472 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC3C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x10EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xC6A SWAP1 DUP4 ADDRESS DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1145 AND JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9B4F8CDD00CA1DAD21E1B00707351FE747DD74738CF95F60F66518C52C35E645 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0xCC2 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xD24 JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xEC2062989428D4FC69D3BA2664807361F4647DAF215450588331BBE51EFB6A68 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x2 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 PUSH2 0xD88 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xDEA JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE2F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14A1 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 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 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF59 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14C7 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH2 0xFA1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14EB PUSH1 0x2D SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFCA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x104B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xFF7 SWAP1 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1094 AND JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2D6FF46A316EC627F7677DAAFA6AD7D6F36BCF938C5F47BF6E671B09D27B415F DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x108D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x119F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP 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 0x10E6 SWAP1 DUP5 SWAP1 PUSH2 0x1236 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x108D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x6CC SWAP1 DUP6 SWAP1 PUSH2 0x1236 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x122E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11DB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1220 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x128B 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 0x12E7 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x10E6 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x10E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x159F PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x12F6 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x12FE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1309 DUP6 PUSH2 0x146B JUMP JUMPDEST PUSH2 0x135A JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1399 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x137A JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x13FB 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 0x1400 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x1414 JUMPI SWAP2 POP PUSH2 0x12F6 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1424 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP7 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP7 MLOAD DUP8 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x11F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11DB JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP INVALID 0x4D PUSH2 0x7267 PUSH10 0x6E506F6F6C3A20747261 PUSH15 0x73666572546F506F6F6C20616D6F75 PUSH15 0x7420697320657175616C20746F2030 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F20616464726573734D617267696E506F6F6C3A2053656E64 PUSH6 0x72206973206E PUSH16 0x7420436F6E74726F6C6C65724D617267 PUSH10 0x6E506F6F6C3A2063616E PUSH15 0x6F74207472616E7366657220617373 PUSH6 0x747320746F20 PUSH16 0x6E6573656C664D617267696E506F6F6C GASPRICE KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420746F206661726D2065786365656473206C696D PUSH10 0x744D617267696E506F6F PUSH13 0x3A2062617463685472616E7366 PUSH6 0x72546F506F6F PUSH13 0x206172726179206C656E677468 PUSH20 0x20617265206E6F7420657175616C4D617267696E POP PUSH16 0x6F6C3A20696E76616C69642072656365 PUSH10 0x76657220616464726573 PUSH20 0x5361666545524332303A204552433230206F7065 PUSH19 0x6174696F6E20646964206E6F74207375636365 PUSH6 0x644D61726769 PUSH15 0x506F6F6C3A2062617463685472616E PUSH20 0x666572546F55736572206172726179206C656E67 PUSH21 0x687320617265206E6F7420657175616CA264697066 PUSH20 0x582212206948AD5B42A37C029E944D5355BCBC0F 0x25 DUP15 0x24 0xAF 0xB8 PUSH6 0xCE066C30960E 0xDF LOG4 0xEB DUP8 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "478:6230:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4217:528;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4217:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4217:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4217:528:3;;;;;;;;-1:-1:-1;4217:528:3;;-1:-1:-1;;;;;4217:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4217:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4217:528:3;;;;;;;;-1:-1:-1;4217:528:3;;-1:-1:-1;;;;;4217:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4217:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4217:528:3;;-1:-1:-1;4217:528:3;;-1:-1:-1;;;;;4217:528:3:i;:::-;;1717:145:48;;;:::i;5017:528:3:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5017:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5017:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5017:528:3;;;;;;;;-1:-1:-1;5017:528:3;;-1:-1:-1;;;;;5017:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5017:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5017:528:3;;;;;;;;-1:-1:-1;5017:528:3;;-1:-1:-1;;;;;5017:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5017:528:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5017:528:3;;-1:-1:-1;5017:528:3;;-1:-1:-1;;;;;5017:528:3:i;1094:77:48:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1094:77:48;;;;;;;;;;;;;;5843:573:3;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5843:573:3;;;;;;;;;;;;;;;;;:::i;3828:118::-;;;;;;;;;;;;;;;;-1:-1:-1;3828:118:3;-1:-1:-1;;;;;3828:118:3;;:::i;:::-;;;;;;;;;;;;;;;;739:21;;;:::i;2511:466::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2511:466:3;;;;;;;;;;;;;;;;;:::i;6572:134::-;;;;;;;;;;;;;;;;-1:-1:-1;6572:134:3;-1:-1:-1;;;;;6572:134:3;;:::i;2011:240:48:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:48;-1:-1:-1;;;;;2011:240:48;;:::i;623:26:3:-;;;:::i;3236:456::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3236:456:3;;;;;;;;;;;;;;;;;:::i;4217:528::-;1944:11;;;;;;;;;-1:-1:-1;;;;;1944:11:3;-1:-1:-1;;;;;1923:47:3;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1923:49:3;-1:-1:-1;;;;;1909:63:3;:10;:63;1888:146;;;;-1:-1:-1;;;1888:146:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4423:5:::1;:12;4406:6;:13;:29;:63;;;;;4455:7;:14;4439:5;:12;:30;4406:63;4385:169;;;;-1:-1:-1::0;;;4385:169:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4570:9;4565:174;4589:6;:13;4585:1;:17;4565:174;;;4681:47;4696:6;4703:1;4696:9;;;;;;;;;;;;;;4707:5;4713:1;4707:8;;;;;;;;;;;;;;4717:7;4725:1;4717:10;;;;;;;;;;;;;;4681:14;:47::i;:::-;4604:3;;4565:174;;;;4217:528:::0;;;:::o;1717:145:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:48;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;-1:-1:-1;;;;;;1836:19:48::1;::::0;;1717:145::o;5017:528:3:-;1944:11;;;;;;;;;-1:-1:-1;;;;;1944:11:3;-1:-1:-1;;;;;1923:47:3;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1923:49:3;-1:-1:-1;;;;;1909:63:3;:10;:63;1888:146;;;;-1:-1:-1;;;1888:146:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5223:5:::1;:12;5206:6;:13;:29;:63;;;;;5255:7;:14;5239:5;:12;:30;5206:63;5185:169;;;;-1:-1:-1::0;;;5185:169:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5370:9;5365:174;5389:6;:13;5385:1;:17;5365:174;;;5481:47;5496:6;5503:1;5496:9;;;;;;;;;;;;;;5507:5;5513:1;5507:8;;;;;;;;;;;;;;5517:7;5525:1;5517:10;;;;;;;;;;;;;;5481:14;:47::i;:::-;5404:3;;5365:174;;1094:77:48::0;1132:7;1158:6;-1:-1:-1;;;;;1158:6:48;1094:77;:::o;5843:573:3:-;2186:6;;-1:-1:-1;;;;;2186:6:3;2172:10;:20;2164:65;;;;;-1:-1:-1;;;2164:65:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5977:23:3;::::1;5969:72;;;;-1:-1:-1::0;;;5969:72:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6078:47;::::0;;-1:-1:-1;;;6078:47:3;;6119:4:::1;6078:47;::::0;::::1;::::0;;;6052:23:::1;::::0;-1:-1:-1;;;;;6078:32:3;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6078:47:3;-1:-1:-1;;;;;6159:20:3;::::1;6135:21;6159:20:::0;;;:12:::1;6078:47;6159:20:::0;;;;;6078:47;;-1:-1:-1;6209:34:3::1;6078:47:::0;6159:20;6209:34:::1;:19;:34;:::i;:::-;6198:7;:45;;6190:98;;;;-1:-1:-1::0;;;6190:98:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6299:55;-1:-1:-1::0;;;;;6299:35:3;::::1;6335:9:::0;6346:7;6299:55:::1;:35;:55;:::i;:::-;6390:9;-1:-1:-1::0;;;;;6370:39:3::1;6382:6;-1:-1:-1::0;;;;;6370:39:3::1;;6401:7;6370:39;;;;;;;;;;;;;;;;;;2240:1;;5843:573:::0;;;:::o;3828:118::-;-1:-1:-1;;;;;3919:20:3;3893:7;3919:20;;;:12;:20;;;;;;;3828:118::o;739:21::-;;;-1:-1:-1;;;;;739:21:3;;:::o;2511:466::-;1944:11;;;;;;;;;-1:-1:-1;;;;;1944:11:3;-1:-1:-1;;;;;1923:47:3;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1923:49:3;-1:-1:-1;;;;;1909:63:3;:10;:63;1888:146;;;;-1:-1:-1;;;1888:146:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:1:::1;2653:7;:11;2645:71;;;;-1:-1:-1::0;;;2645:71:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;2749:20:3;::::1;;::::0;;;:12:::1;:20;::::0;;;;;:33:::1;::::0;2774:7;2749:33:::1;:24;:33;:::i;:::-;-1:-1:-1::0;;;;;2726:20:3;::::1;;::::0;;;:12:::1;:20;::::0;;;;:56;;;;2847:70:::1;::::0;2887:5;2902:4:::1;2909:7:::0;2847:70:::1;:39;:70;:::i;:::-;2955:5;-1:-1:-1::0;;;;;2932:38:3::1;2947:6;-1:-1:-1::0;;;;;2932:38:3::1;;2962:7;2932:38;;;;;;;;;;;;;;;;;;2511:466:::0;;;:::o;6572:134::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6656:6:3::1;::::0;6642:30:::1;::::0;-1:-1:-1;;;;;6642:30:3;;::::1;::::0;6656:6:::1;::::0;6642:30:::1;::::0;6656:6:::1;::::0;6642:30:::1;6683:6;:16:::0;;-1:-1:-1;;;;;;6683:16:3::1;-1:-1:-1::0;;;;;6683:16:3;;;::::1;::::0;;;::::1;::::0;;6572:134::o;2011:240:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:22:48;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:48::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:48;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;-1:-1:-1;;;;;;2227:17:48::1;-1:-1:-1::0;;;;;2227:17:48;;;::::1;::::0;;;::::1;::::0;;2011:240::o;623:26:3:-;;;-1:-1:-1;;;;;623:26:3;;:::o;3236:456::-;1944:11;;;;;;;;;-1:-1:-1;;;;;1944:11:3;-1:-1:-1;;;;;1923:47:3;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1923:49:3;-1:-1:-1;;;;;1909:63:3;:10;:63;1888:146;;;;-1:-1:-1;;;1888:146:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3378:22:3;::::1;3395:4;3378:22;;3370:80;;;;-1:-1:-1::0;;;3370:80:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3483:20:3;::::1;;::::0;;;:12:::1;:20;::::0;;;;;:33:::1;::::0;3508:7;3483:33:::1;:24;:33;:::i;:::-;-1:-1:-1::0;;;;;3460:20:3;::::1;;::::0;;;:12:::1;:20;::::0;;;;:56;;;;3581:51:::1;::::0;3617:5;3624:7;3581:51:::1;:35;:51;:::i;:::-;3670:5;-1:-1:-1::0;;;;;3647:38:3::1;3662:6;-1:-1:-1::0;;;;;3647:38:3::1;;3677:7;3647:38;;;;;;;;;;;;;;;;;;3236:456:::0;;;:::o;623:104:46:-;710:10;623:104;:::o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1439:50;1362:134;-1:-1:-1;;;1362:134:51:o;763:213:50:-;910:58;;;-1:-1:-1;;;;;910:58:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;910:58:50;-1:-1:-1;;;910:58:50;;;883:86;;903:5;;883:19;:86::i;:::-;763:213;;;:::o;922:176:51:-;980:7;1011:5;;;1034:6;;;;1026:46;;;;;-1:-1:-1;;;1026:46:51;;;;;;;;;;;;;;;;;;;;;;;;;;;982:249:50;1155:68;;;-1:-1:-1;;;;;1155:68:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1155:68:50;-1:-1:-1;;;1155:68:50;;;1128:96;;1148:5;;1128:19;:96::i;1780:217:51:-;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;3279:771:50:-;3706:23;3732:69;3760:4;3732:69;;;;;;;;;;;;;;;;;3740:5;-1:-1:-1;;;;;3732:27:50;;;:69;;;;;:::i;:::-;3815:17;;3706:95;;-1:-1:-1;3815:21:50;3811:233;;3967:10;3956:30;;;;;;;;;;;;;;;-1:-1:-1;3956:30:50;3948:85;;;;-1:-1:-1;;;3948:85:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3626:224:45;3759:12;3790:53;3813:6;3821:4;3827:1;3830:12;3790:22;:53::i;:::-;3783:60;3626:224;-1:-1:-1;;;;3626:224:45:o;5071:994::-;5239:12;5271:18;5282:6;5271:10;:18::i;:::-;5263:60;;;;;-1:-1:-1;;;5263:60:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;5394:12;5408:23;5435:6;-1:-1:-1;;;;;5435:11:45;5454:8;5464:4;5435:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5435:34:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:76;;;;5483:7;5479:580;;;5513:10;-1:-1:-1;5506:17:45;;-1:-1:-1;5506:17:45;5479:580;5624:17;;:21;5620:429;;5882:10;5876:17;5942:15;5929:10;5925:2;5921:19;5914:44;5831:145;6014:20;;-1:-1:-1;;;6014:20:45;;;;;;;;;;;;;;;;;6021:12;;6014:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;751:433;1123:20;1169:8;;;751:433::o"
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "batchTransferToPool(address[],address[],uint256[])": "4979cd14",
+ "batchTransferToUser(address[],address[],uint256[])": "86a19c5e",
+ "farm(address,address,uint256)": "baf46ba6",
+ "farmer()": "d811fcf0",
+ "getStoredBalance(address)": "c595b007",
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "setFarmer(address)": "e2ed781c",
+ "transferOwnership(address)": "f2fde38b",
+ "transferToPool(address,address,uint256)": "dd2c99f7",
+ "transferToUser(address,address,uint256)": "fa93b2a5"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AssetFarmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FarmerUpdated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToUser\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_asset\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_user\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amount\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_asset\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_user\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amount\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferToUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"farm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"farmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getStoredBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":\"_farmer\",\"type\":\"address\"}],\"name\":\"setFarmer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"batchTransferToPool(address[],address[],uint256[])\":{\"params\":{\"_amount\":\"amount of each token to transfer to pool\",\"_asset\":\"addresses of the assets to transfer\",\"_user\":\"addresses of the users to transfer assets to\"}},\"batchTransferToUser(address[],address[],uint256[])\":{\"params\":{\"_amount\":\"amount of each token to transfer to _user\",\"_asset\":\"addresses of the assets to transfer\",\"_user\":\"addresses of the users to transfer assets to\"}},\"constructor\":{\"params\":{\"_addressBook\":\"AddressBook module\"}},\"farm(address,address,uint256)\":{\"details\":\"can only be called by the farmer address. Do not farm otokens.\",\"params\":{\"_amount\":\"amount to remove from pool\",\"_asset\":\"asset address\",\"_receiver\":\"receiver address\"}},\"getStoredBalance(address)\":{\"params\":{\"_asset\":\"asset address\"},\"returns\":{\"_0\":\"asset balance\"}},\"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.\"},\"setFarmer(address)\":{\"details\":\"can only be called by MarginPool owner\",\"params\":{\"_farmer\":\"farmer address\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferToPool(address,address,uint256)\":{\"params\":{\"_amount\":\"amount of the token to transfer from _user\",\"_asset\":\"address of the asset to transfer\",\"_user\":\"address of the user to transfer assets from\"}},\"transferToUser(address,address,uint256)\":{\"params\":{\"_amount\":\"amount of the token to transfer to _user\",\"_asset\":\"address of the asset to transfer\",\"_user\":\"address of the user to transfer assets to\"}}},\"stateVariables\":{\"assetBalance\":{\"details\":\"mapping between an asset and the amount of the asset in the pool\"},\"farmer\":{\"details\":\"the address that has the ability to withdraw excess assets in the pool\"}},\"title\":\"MarginPool\"},\"userdoc\":{\"methods\":{\"addressBook()\":{\"notice\":\"AddressBook module\"},\"batchTransferToPool(address[],address[],uint256[])\":{\"notice\":\"transfers multiple assets from users to the pool\"},\"batchTransferToUser(address[],address[],uint256[])\":{\"notice\":\"transfers multiple assets from the pool to users\"},\"constructor\":\"contructor\",\"farm(address,address,uint256)\":{\"notice\":\"function to collect the excess balance of a particular asset\"},\"getStoredBalance(address)\":{\"notice\":\"get the stored balance of an asset\"},\"setFarmer(address)\":{\"notice\":\"function to set farmer address\"},\"transferToPool(address,address,uint256)\":{\"notice\":\"transfers an asset from a user to the pool\"},\"transferToUser(address,address,uint256)\":{\"notice\":\"transfers an asset from the pool to a user\"}},\"notice\":\"Contract that holds all protocol funds\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/MarginPool.sol\":\"MarginPool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/MarginPool.sol\":{\"keccak256\":\"0x0007fedebd965d561bc0f43e3a6aaa879ce29a7e6c6ddc1bed20754b2f7a092e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://320b138d744ebb8e793c8364c821530b958108dd743880a8cd0855cff5775d37\",\"dweb:/ipfs/QmdVVQWam6qxqGwPtS4TDqmzaZeg1v3mF3JyZ7FikzNuy4\"]},\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/Oracle.sol": {
+ "Oracle": {
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newDisputer",
+ "type": "address"
+ }
+ ],
+ "name": "DisputerUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "disputedPrice",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newPrice",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "disputeTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "ExpiryPriceDisputed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "price",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "onchainTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "ExpiryPriceUpdated",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pricer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "disputePeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "PricerDisputePeriodUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pricer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "lockingPeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "PricerLockingPeriodUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pricer",
+ "type": "address"
+ }
+ ],
+ "name": "PricerUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "price",
+ "type": "uint256"
+ }
+ ],
+ "name": "StablePriceUpdated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "disputeExpiryPrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "endMigration",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getChainlinkRoundData",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getDisputer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "getExpiryPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getPricer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "getPricerDisputePeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "getPricerLockingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "isDisputePeriodOver",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLockingPeriodOver",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_expiries",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_prices",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "migrateOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "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": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "setAssetPricer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_disputePeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "setDisputePeriod",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_disputer",
+ "type": "address"
+ }
+ ],
+ "name": "setDisputer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_lockingPeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "setLockingPeriod",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setStablePrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b5060006100246001600160e01b0361007316565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610077565b3390565b6116a8806100866000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063b7e1d1451161007c578063b7e1d1451461047c578063d2f3b4e8146104a2578063def3cb05146104ce578063ee531409146104d6578063f19ae73414610508578063f2fde38b1461053457610137565b8063715018a6146103f45780638b3cddaf146103fc5780638da5cb5b146104285780638ee5074d146104305780639c7fe9d61461045657610137565b806341976e09116100ff57806341976e091461031657806357a37dca1461034e5780635fdc714914610380578063601407eb146103c05780636c525d04146103ec57610137565b806301957f811461013c5780631b85462d146101815780632e4cf6ea146101d25780632ecd8857146102a65780633fd3ec8f146102e8575b600080fd5b6101686004803603604081101561015257600080fd5b506001600160a01b03813516906020013561055a565b6040805192835290151560208301528051918290030190f35b6101b96004803603604081101561019757600080fd5b5080356001600160a01b0316906020013569ffffffffffffffffffff166105ba565b6040805192835260208301919091528051918290030190f35b6102a4600480360360608110156101e857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561021357600080fd5b82018360208201111561022557600080fd5b8035906020019184602083028401116401000000008311171561024757600080fd5b91939092909160208101903564010000000081111561026557600080fd5b82018360208201111561027757600080fd5b8035906020019184602083028401116401000000008311171561029957600080fd5b5090925090506106d7565b005b6102cc600480360360208110156102bc57600080fd5b50356001600160a01b031661087c565b604080516001600160a01b039092168252519081900360200190f35b6102a4600480360360408110156102fe57600080fd5b506001600160a01b038135811691602001351661089a565b61033c6004803603602081101561032c57600080fd5b50356001600160a01b03166109e3565b60408051918252519081900360200190f35b6102a46004803603606081101561036457600080fd5b506001600160a01b038135169060208101359060400135610ada565b6103ac6004803603604081101561039657600080fd5b506001600160a01b038135169060200135610c3a565b604080519115158252519081900360200190f35b6102a4600480360360408110156103d657600080fd5b506001600160a01b038135169060200135610d01565b6102a4610e04565b6102a4610e71565b6102a46004803603604081101561041257600080fd5b506001600160a01b038135169060200135610f13565b6102cc610fbf565b6102a46004803603602081101561044657600080fd5b50356001600160a01b0316610fce565b61033c6004803603602081101561046c57600080fd5b50356001600160a01b0316611070565b61033c6004803603602081101561049257600080fd5b50356001600160a01b031661108b565b6103ac600480360360408110156104b857600080fd5b506001600160a01b0381351690602001356110a6565b6102cc61110c565b6102a4600480360360608110156104ec57600080fd5b506001600160a01b03813516906020810135906040013561111b565b6102a46004803603604081101561051e57600080fd5b506001600160a01b0381351690602001356112b0565b6102a46004803603602081101561054a57600080fd5b50356001600160a01b031661135c565b6001600160a01b03821660009081526006602052604081205481906001816105af576001600160a01b038616600090815260056020908152604080832088845290915290205491506105ac8686610c3a565b90505b909590945092505050565b6001600160a01b038216600090815260066020526040812054819042816105af576001600160a01b03868116600090815260046020526040902054166106315760405162461bcd60e51b81526004018080602001828103825260258152602001806115316025913960400191505060405180910390fd5b6001600160a01b038087166000908152600460208190526040918290205482516303bb0ddf60e61b815269ffffffffffffffffffff8a1692810192909252825193169263eec377c092602480840193919291829003018186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d60408110156106c157600080fd5b5080516020909101519097909650945050505050565b6106df611454565b6000546001600160a01b0390811691161461072f576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b600154600160a01b900460ff161561078e576040805162461bcd60e51b815260206004820152601e60248201527f4f7261636c653a206d6967726174696f6e20616c726561647920646f6e650000604482015290519081900360640190fd5b8281146107e2576040805162461bcd60e51b815260206004820152601e60248201527f4f7261636c653a20696e76616c6964206d6967726174696f6e20646174610000604482015290519081900360640190fd5b60005b8381101561087457604051806040016040528084848481811061080457fe5b9050602002013581526020014281525060056000886001600160a01b03166001600160a01b03168152602001908152602001600020600087878581811061084757fe5b602090810292909201358352508181019290925260400160002082518155910151600191820155016107e5565b505050505050565b6001600160a01b039081166000908152600460205260409020541690565b6108a2611454565b6000546001600160a01b039081169116146108f2576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b0381166109375760405162461bcd60e51b81526004018080602001828103825260278152602001806116186027913960400191505060405180910390fd5b6001600160a01b0382166000908152600660205260409020541561098c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806115e9602f913960400191505060405180910390fd5b6001600160a01b0382811660008181526004602052604080822080546001600160a01b0319169486169485179055517fac44f446a94cf337a8403cfa1764d3ab060f166e1e6d0fb2e7ccbb4889ce948d9190a35050565b6001600160a01b03811660009081526006602052604081205480610ad4576001600160a01b0383811660009081526004602052604090205416610a575760405162461bcd60e51b81526004018080602001828103825260258152602001806115316025913960400191505060405180910390fd5b6001600160a01b03808416600090815260046020818152604092839020548351634c6afee560e11b815293519416936398d5fdca938084019390829003018186803b158015610aa557600080fd5b505afa158015610ab9573d6000803e3d6000fd5b505050506040513d6020811015610acf57600080fd5b505190505b92915050565b6001546001600160a01b03163314610b235760405162461bcd60e51b81526004018080602001828103825260228152602001806114d46022913960400191505060405180910390fd5b610b2d8383610c3a565b15610b7f576040805162461bcd60e51b815260206004820152601b60248201527f4f7261636c653a206469737075746520706572696f64206f7665720000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260056020908152604080832085845290915290206001810154610be25760405162461bcd60e51b815260040180806020018281038252602781526020018061157c6027913960400191505060405180910390fd5b805482825560408051828152602081018590524281830152905185916001600160a01b038816917f4c65ea297e9cdfe46f796ae9f245f80e9952cc9ee0544e9c5e5384e06e396ee09181900360600190a35050505050565b6001600160a01b03821660009081526006602052604081205480610cf757610c606114b9565b506001600160a01b038416600090815260056020908152604080832086845282529182902082518084019093528054835260010154908201819052610caa57600092505050610ad4565b6001600160a01b0380861660009081526004602090815260408083205490931680835260038252929091205490830151610cea908263ffffffff61145816565b4211945050505050610ad4565b5060019392505050565b610d09611454565b6000546001600160a01b03908116911614610d59576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b038281166000908152600460205260409020541615610db05760405162461bcd60e51b815260040180806020018281038252603b8152602001806114f6603b913960400191505060405180910390fd5b6001600160a01b038216600081815260066020908152604091829020849055815184815291517f4e5ecd60f0bbcaa2960ee093d3c7a8bf1e265338cae3032cc13adf65e95fa3259281900390910190a25050565b610e0c611454565b6000546001600160a01b03908116911614610e5c576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055565b610e79611454565b6000546001600160a01b03908116911614610ec9576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610f1b611454565b6000546001600160a01b03908116911614610f6b576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260036020908152604091829020849055815184815291517ff43f15b56789f3f735684531c1885129263b256f59dc4c71b211722a2f954d969281900390910190a25050565b6000546001600160a01b031690565b610fd6611454565b6000546001600160a01b03908116911614611026576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc0c3569eac4e1b890a966a247a7b7f0d496af49f2fc482b2959899b634693cfd90600090a250565b6001600160a01b031660009081526003602052604090205490565b6001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526006602052604081205480610cf7576001600160a01b03808516600090815260046020908152604080832054909316808352600290915291902054611100858263ffffffff61145816565b42119350505050610ad4565b6001546001600160a01b031690565b6001600160a01b038381166000908152600460205260409020541633146111735760405162461bcd60e51b815260040180806020018281038252603481526020018061163f6034913960400191505060405180910390fd5b61117d83836110a6565b6111b85760405162461bcd60e51b81526004018080602001828103825260268152602001806115c36026913960400191505060405180910390fd5b6001600160a01b038316600090815260056020908152604080832085845290915290206001015415611231576040805162461bcd60e51b815260206004820152601e60248201527f4f7261636c653a206469737075746520706572696f6420737461727465640000604482015290519081900360640190fd5b6040805180820182528281524260208083018281526001600160a01b0388166000818152600584528681208982528452869020945185559051600190940193909355835185815290810191909152825185937f0160752083b78189f1650efb0abdaa0dd2110e5782f553c825705746ac2a5718928290030190a3505050565b6112b8611454565b6000546001600160a01b03908116911614611308576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020849055815184815291517fa8c3fc8bc370addd6cd25f335fb22ea56d17079376e28f460ca770f6d46b2c599281900390910190a25050565b611364611454565b6000546001600160a01b039081169116146113b4576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b0381166113f95760405162461bcd60e51b81526004018080602001828103825260268152602001806115566026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6000828201838110156114b2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60405180604001604052806000815260200160008152509056fe4f7261636c653a2063616c6c6572206973206e6f74207468652064697370757465724f7261636c653a20636f756c64206e6f742073657420737461626c6520707269636520666f7220616e2061737365742077697468207072696365724f7261636c653a2050726963657220666f722074686973206173736574206e6f74207365744f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f7261636c653a20707269636520746f206469737075746520646f6573206e6f742065786973744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f7261636c653a206c6f636b696e6720706572696f64206973206e6f74206f766572207965744f7261636c653a20636f756c64206e6f742073657420612070726963657220666f7220737461626c652061737365744f7261636c653a2063616e6e6f74207365742070726963657220746f20616464726573732830294f7261636c653a2063616c6c6572206973206e6f7420617574686f72697a656420746f2073657420657870697279207072696365a264697066735822122069091f8d8cabd8e75e8b07b02216e72ec0bea70dba8e84f1bf21e6ba99c9e2f364736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x24 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x73 AND JUMP JUMPDEST PUSH1 0x0 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 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x77 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x16A8 DUP1 PUSH2 0x86 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 0x137 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xB7E1D145 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xB7E1D145 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD2F3B4E8 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xDEF3CB05 EQ PUSH2 0x4CE JUMPI DUP1 PUSH4 0xEE531409 EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0xF19AE734 EQ PUSH2 0x508 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x534 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x8B3CDDAF EQ PUSH2 0x3FC JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x428 JUMPI DUP1 PUSH4 0x8EE5074D EQ PUSH2 0x430 JUMPI DUP1 PUSH4 0x9C7FE9D6 EQ PUSH2 0x456 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x41976E09 GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0x316 JUMPI DUP1 PUSH4 0x57A37DCA EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x5FDC7149 EQ PUSH2 0x380 JUMPI DUP1 PUSH4 0x601407EB EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0x6C525D04 EQ PUSH2 0x3EC JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x1957F81 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x1B85462D EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x2E4CF6EA EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x2ECD8857 EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x3FD3EC8F EQ PUSH2 0x2E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x55A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5BA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x265 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x6D7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x87C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x89A JUMP JUMPDEST PUSH2 0x33C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xADA JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x396 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xC3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD01 JUMP JUMPDEST PUSH2 0x2A4 PUSH2 0xE04 JUMP JUMPDEST PUSH2 0x2A4 PUSH2 0xE71 JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xF13 JUMP JUMPDEST PUSH2 0x2CC PUSH2 0xFBF JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x446 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFCE JUMP JUMPDEST PUSH2 0x33C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x33C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x492 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x108B JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x10A6 JUMP JUMPDEST PUSH2 0x2CC PUSH2 0x110C JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x111B JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x12B0 JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x135C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0x1 DUP2 PUSH2 0x5AF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 POP PUSH2 0x5AC DUP7 DUP7 PUSH2 0xC3A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 TIMESTAMP DUP2 PUSH2 0x5AF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0x631 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1531 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH4 0x3BB0DDF PUSH1 0xE6 SHL DUP2 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 MLOAD SWAP4 AND SWAP3 PUSH4 0xEEC377C0 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP8 SWAP1 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x6DF PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x72F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x78E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A206D6967726174696F6E20616C726561647920646F6E650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP2 EQ PUSH2 0x7E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A20696E76616C6964206D6967726174696F6E20646174610000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x874 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x804 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD TIMESTAMP DUP2 MSTORE POP PUSH1 0x5 PUSH1 0x0 DUP9 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 DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0x847 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD DUP4 MSTORE POP DUP2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP3 MLOAD DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 DUP3 ADD SSTORE ADD PUSH2 0x7E5 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x8A2 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x8F2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x937 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1618 PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST 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 ISZERO PUSH2 0x98C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15E9 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0xAC44F446A94CF337A8403CFA1764D3AB060F166E1E6D0FB2E7CCBB4889CE948D SWAP2 SWAP1 LOG3 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 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0xAD4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0xA57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1531 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD DUP4 MLOAD PUSH4 0x4C6AFEE5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 MLOAD SWAP5 AND SWAP4 PUSH4 0x98D5FDCA SWAP4 DUP1 DUP5 ADD SWAP4 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB23 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14D4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB2D DUP4 DUP4 PUSH2 0xC3A JUMP JUMPDEST ISZERO PUSH2 0xB7F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A206469737075746520706572696F64206F7665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0xBE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x157C PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD DUP3 DUP3 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE TIMESTAMP DUP2 DUP4 ADD MSTORE SWAP1 MLOAD DUP6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0x4C65EA297E9CDFE46F796AE9F245F80E9952CC9EE0544E9C5E5384E06E396EE0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0xCF7 JUMPI PUSH2 0xC60 PUSH2 0x14B9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xCAA JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0xAD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x3 DUP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 DUP4 ADD MLOAD PUSH2 0xCEA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1458 AND JUMP JUMPDEST TIMESTAMP GT SWAP5 POP POP POP POP POP PUSH2 0xAD4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD09 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xD59 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0xDB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14F6 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x4E5ECD60F0BBCAA2960EE093D3C7A8BF1E265338CAE3032CC13ADF65E95FA325 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0xE0C PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xE5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xE79 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xEC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xF1B PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xF6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xF43F15B56789F3F735684531C1885129263B256F59DC4C71B211722A2F954D96 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xFD6 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1026 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD 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 DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC0C3569EAC4E1B890A966A247A7B7F0D496AF49F2FC482B2959899B634693CFD SWAP1 PUSH1 0x0 SWAP1 LOG2 POP 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 SWAP1 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 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0xCF7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x1100 DUP6 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1458 AND JUMP JUMPDEST TIMESTAMP GT SWAP4 POP POP POP POP PUSH2 0xAD4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ PUSH2 0x1173 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x163F PUSH1 0x34 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x117D DUP4 DUP4 PUSH2 0x10A6 JUMP JUMPDEST PUSH2 0x11B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15C3 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0x1231 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A206469737075746520706572696F6420737461727465640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP1 DUP4 ADD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP5 MSTORE DUP7 DUP2 KECCAK256 DUP10 DUP3 MSTORE DUP5 MSTORE DUP7 SWAP1 KECCAK256 SWAP5 MLOAD DUP6 SSTORE SWAP1 MLOAD PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP6 SWAP4 PUSH32 0x160752083B78189F1650EFB0ABDAA0DD2110E5782F553C825705746AC2A5718 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x12B8 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1308 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xA8C3FC8BC370ADDD6CD25F335FB22EA56D17079376E28F460CA770F6D46B2C59 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x1364 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x13B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x13F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1556 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x14B2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID 0x4F PUSH19 0x61636C653A2063616C6C6572206973206E6F74 KECCAK256 PUSH21 0x68652064697370757465724F7261636C653A20636F PUSH22 0x6C64206E6F742073657420737461626C652070726963 PUSH6 0x20666F722061 PUSH15 0x206173736574207769746820707269 PUSH4 0x65724F72 PUSH2 0x636C PUSH6 0x3A2050726963 PUSH6 0x7220666F7220 PUSH21 0x686973206173736574206E6F74207365744F776E61 PUSH3 0x6C653A KECCAK256 PUSH15 0x6577206F776E657220697320746865 KECCAK256 PUSH27 0x65726F20616464726573734F7261636C653A20707269636520746F KECCAK256 PUSH5 0x6973707574 PUSH6 0x20646F657320 PUSH15 0x6F742065786973744F776E61626C65 GASPRICE KECCAK256 PUSH4 0x616C6C65 PUSH19 0x206973206E6F7420746865206F776E65724F72 PUSH2 0x636C PUSH6 0x3A206C6F636B PUSH10 0x6E6720706572696F6420 PUSH10 0x73206E6F74206F766572 KECCAK256 PUSH26 0x65744F7261636C653A20636F756C64206E6F7420736574206120 PUSH17 0x726963657220666F7220737461626C6520 PUSH2 0x7373 PUSH6 0x744F7261636C PUSH6 0x3A2063616E6E PUSH16 0x74207365742070726963657220746F20 PUSH2 0x6464 PUSH19 0x6573732830294F7261636C653A2063616C6C65 PUSH19 0x206973206E6F7420617574686F72697A656420 PUSH21 0x6F2073657420657870697279207072696365A26469 PUSH17 0x66735822122069091F8D8CABD8E75E8B07 0xB0 0x22 AND 0xE7 0x2E 0xC0 0xBE 0xA7 0xD 0xBA DUP15 DUP5 CALL 0xBF 0x21 0xE6 0xBA SWAP10 0xC9 0xE2 RETURN PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "492:12855:4:-:0;;;;;;;;;;;;-1:-1:-1;893:17:48;913:12;-1:-1:-1;;;;;913:10:48;:12;:::i;:::-;935:6;:18;;-1:-1:-1;;;;;;935:18:48;-1:-1:-1;;;;;935:18:48;;;;;;;968:43;;935:18;;-1:-1:-1;935:18:48;968:43;;935:6;;968:43;860:158;492:12855:4;;623:104:46;710:10;623:104;:::o;492:12855:4:-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063b7e1d1451161007c578063b7e1d1451461047c578063d2f3b4e8146104a2578063def3cb05146104ce578063ee531409146104d6578063f19ae73414610508578063f2fde38b1461053457610137565b8063715018a6146103f45780638b3cddaf146103fc5780638da5cb5b146104285780638ee5074d146104305780639c7fe9d61461045657610137565b806341976e09116100ff57806341976e091461031657806357a37dca1461034e5780635fdc714914610380578063601407eb146103c05780636c525d04146103ec57610137565b806301957f811461013c5780631b85462d146101815780632e4cf6ea146101d25780632ecd8857146102a65780633fd3ec8f146102e8575b600080fd5b6101686004803603604081101561015257600080fd5b506001600160a01b03813516906020013561055a565b6040805192835290151560208301528051918290030190f35b6101b96004803603604081101561019757600080fd5b5080356001600160a01b0316906020013569ffffffffffffffffffff166105ba565b6040805192835260208301919091528051918290030190f35b6102a4600480360360608110156101e857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561021357600080fd5b82018360208201111561022557600080fd5b8035906020019184602083028401116401000000008311171561024757600080fd5b91939092909160208101903564010000000081111561026557600080fd5b82018360208201111561027757600080fd5b8035906020019184602083028401116401000000008311171561029957600080fd5b5090925090506106d7565b005b6102cc600480360360208110156102bc57600080fd5b50356001600160a01b031661087c565b604080516001600160a01b039092168252519081900360200190f35b6102a4600480360360408110156102fe57600080fd5b506001600160a01b038135811691602001351661089a565b61033c6004803603602081101561032c57600080fd5b50356001600160a01b03166109e3565b60408051918252519081900360200190f35b6102a46004803603606081101561036457600080fd5b506001600160a01b038135169060208101359060400135610ada565b6103ac6004803603604081101561039657600080fd5b506001600160a01b038135169060200135610c3a565b604080519115158252519081900360200190f35b6102a4600480360360408110156103d657600080fd5b506001600160a01b038135169060200135610d01565b6102a4610e04565b6102a4610e71565b6102a46004803603604081101561041257600080fd5b506001600160a01b038135169060200135610f13565b6102cc610fbf565b6102a46004803603602081101561044657600080fd5b50356001600160a01b0316610fce565b61033c6004803603602081101561046c57600080fd5b50356001600160a01b0316611070565b61033c6004803603602081101561049257600080fd5b50356001600160a01b031661108b565b6103ac600480360360408110156104b857600080fd5b506001600160a01b0381351690602001356110a6565b6102cc61110c565b6102a4600480360360608110156104ec57600080fd5b506001600160a01b03813516906020810135906040013561111b565b6102a46004803603604081101561051e57600080fd5b506001600160a01b0381351690602001356112b0565b6102a46004803603602081101561054a57600080fd5b50356001600160a01b031661135c565b6001600160a01b03821660009081526006602052604081205481906001816105af576001600160a01b038616600090815260056020908152604080832088845290915290205491506105ac8686610c3a565b90505b909590945092505050565b6001600160a01b038216600090815260066020526040812054819042816105af576001600160a01b03868116600090815260046020526040902054166106315760405162461bcd60e51b81526004018080602001828103825260258152602001806115316025913960400191505060405180910390fd5b6001600160a01b038087166000908152600460208190526040918290205482516303bb0ddf60e61b815269ffffffffffffffffffff8a1692810192909252825193169263eec377c092602480840193919291829003018186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d60408110156106c157600080fd5b5080516020909101519097909650945050505050565b6106df611454565b6000546001600160a01b0390811691161461072f576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b600154600160a01b900460ff161561078e576040805162461bcd60e51b815260206004820152601e60248201527f4f7261636c653a206d6967726174696f6e20616c726561647920646f6e650000604482015290519081900360640190fd5b8281146107e2576040805162461bcd60e51b815260206004820152601e60248201527f4f7261636c653a20696e76616c6964206d6967726174696f6e20646174610000604482015290519081900360640190fd5b60005b8381101561087457604051806040016040528084848481811061080457fe5b9050602002013581526020014281525060056000886001600160a01b03166001600160a01b03168152602001908152602001600020600087878581811061084757fe5b602090810292909201358352508181019290925260400160002082518155910151600191820155016107e5565b505050505050565b6001600160a01b039081166000908152600460205260409020541690565b6108a2611454565b6000546001600160a01b039081169116146108f2576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b0381166109375760405162461bcd60e51b81526004018080602001828103825260278152602001806116186027913960400191505060405180910390fd5b6001600160a01b0382166000908152600660205260409020541561098c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806115e9602f913960400191505060405180910390fd5b6001600160a01b0382811660008181526004602052604080822080546001600160a01b0319169486169485179055517fac44f446a94cf337a8403cfa1764d3ab060f166e1e6d0fb2e7ccbb4889ce948d9190a35050565b6001600160a01b03811660009081526006602052604081205480610ad4576001600160a01b0383811660009081526004602052604090205416610a575760405162461bcd60e51b81526004018080602001828103825260258152602001806115316025913960400191505060405180910390fd5b6001600160a01b03808416600090815260046020818152604092839020548351634c6afee560e11b815293519416936398d5fdca938084019390829003018186803b158015610aa557600080fd5b505afa158015610ab9573d6000803e3d6000fd5b505050506040513d6020811015610acf57600080fd5b505190505b92915050565b6001546001600160a01b03163314610b235760405162461bcd60e51b81526004018080602001828103825260228152602001806114d46022913960400191505060405180910390fd5b610b2d8383610c3a565b15610b7f576040805162461bcd60e51b815260206004820152601b60248201527f4f7261636c653a206469737075746520706572696f64206f7665720000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260056020908152604080832085845290915290206001810154610be25760405162461bcd60e51b815260040180806020018281038252602781526020018061157c6027913960400191505060405180910390fd5b805482825560408051828152602081018590524281830152905185916001600160a01b038816917f4c65ea297e9cdfe46f796ae9f245f80e9952cc9ee0544e9c5e5384e06e396ee09181900360600190a35050505050565b6001600160a01b03821660009081526006602052604081205480610cf757610c606114b9565b506001600160a01b038416600090815260056020908152604080832086845282529182902082518084019093528054835260010154908201819052610caa57600092505050610ad4565b6001600160a01b0380861660009081526004602090815260408083205490931680835260038252929091205490830151610cea908263ffffffff61145816565b4211945050505050610ad4565b5060019392505050565b610d09611454565b6000546001600160a01b03908116911614610d59576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b038281166000908152600460205260409020541615610db05760405162461bcd60e51b815260040180806020018281038252603b8152602001806114f6603b913960400191505060405180910390fd5b6001600160a01b038216600081815260066020908152604091829020849055815184815291517f4e5ecd60f0bbcaa2960ee093d3c7a8bf1e265338cae3032cc13adf65e95fa3259281900390910190a25050565b610e0c611454565b6000546001600160a01b03908116911614610e5c576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055565b610e79611454565b6000546001600160a01b03908116911614610ec9576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610f1b611454565b6000546001600160a01b03908116911614610f6b576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260036020908152604091829020849055815184815291517ff43f15b56789f3f735684531c1885129263b256f59dc4c71b211722a2f954d969281900390910190a25050565b6000546001600160a01b031690565b610fd6611454565b6000546001600160a01b03908116911614611026576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc0c3569eac4e1b890a966a247a7b7f0d496af49f2fc482b2959899b634693cfd90600090a250565b6001600160a01b031660009081526003602052604090205490565b6001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526006602052604081205480610cf7576001600160a01b03808516600090815260046020908152604080832054909316808352600290915291902054611100858263ffffffff61145816565b42119350505050610ad4565b6001546001600160a01b031690565b6001600160a01b038381166000908152600460205260409020541633146111735760405162461bcd60e51b815260040180806020018281038252603481526020018061163f6034913960400191505060405180910390fd5b61117d83836110a6565b6111b85760405162461bcd60e51b81526004018080602001828103825260268152602001806115c36026913960400191505060405180910390fd5b6001600160a01b038316600090815260056020908152604080832085845290915290206001015415611231576040805162461bcd60e51b815260206004820152601e60248201527f4f7261636c653a206469737075746520706572696f6420737461727465640000604482015290519081900360640190fd5b6040805180820182528281524260208083018281526001600160a01b0388166000818152600584528681208982528452869020945185559051600190940193909355835185815290810191909152825185937f0160752083b78189f1650efb0abdaa0dd2110e5782f553c825705746ac2a5718928290030190a3505050565b6112b8611454565b6000546001600160a01b03908116911614611308576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020849055815184815291517fa8c3fc8bc370addd6cd25f335fb22ea56d17079376e28f460ca770f6d46b2c599281900390910190a25050565b611364611454565b6000546001600160a01b039081169116146113b4576040805162461bcd60e51b815260206004820181905260248201526000805160206115a3833981519152604482015290519081900360640190fd5b6001600160a01b0381166113f95760405162461bcd60e51b81526004018080602001828103825260268152602001806115566026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6000828201838110156114b2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60405180604001604052806000815260200160008152509056fe4f7261636c653a2063616c6c6572206973206e6f74207468652064697370757465724f7261636c653a20636f756c64206e6f742073657420737461626c6520707269636520666f7220616e2061737365742077697468207072696365724f7261636c653a2050726963657220666f722074686973206173736574206e6f74207365744f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f7261636c653a20707269636520746f206469737075746520646f6573206e6f742065786973744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f7261636c653a206c6f636b696e6720706572696f64206973206e6f74206f766572207965744f7261636c653a20636f756c64206e6f742073657420612070726963657220666f7220737461626c652061737365744f7261636c653a2063616e6e6f74207365742070726963657220746f20616464726573732830294f7261636c653a2063616c6c6572206973206e6f7420617574686f72697a656420746f2073657420657870697279207072696365a264697066735822122069091f8d8cabd8e75e8b07b02216e72ec0bea70dba8e84f1bf21e6ba99c9e2f364736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x137 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xB7E1D145 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xB7E1D145 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD2F3B4E8 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xDEF3CB05 EQ PUSH2 0x4CE JUMPI DUP1 PUSH4 0xEE531409 EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0xF19AE734 EQ PUSH2 0x508 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x534 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x8B3CDDAF EQ PUSH2 0x3FC JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x428 JUMPI DUP1 PUSH4 0x8EE5074D EQ PUSH2 0x430 JUMPI DUP1 PUSH4 0x9C7FE9D6 EQ PUSH2 0x456 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x41976E09 GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0x316 JUMPI DUP1 PUSH4 0x57A37DCA EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x5FDC7149 EQ PUSH2 0x380 JUMPI DUP1 PUSH4 0x601407EB EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0x6C525D04 EQ PUSH2 0x3EC JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x1957F81 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x1B85462D EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x2E4CF6EA EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x2ECD8857 EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x3FD3EC8F EQ PUSH2 0x2E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x55A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5BA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x265 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x6D7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x87C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x89A JUMP JUMPDEST PUSH2 0x33C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xADA JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x396 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xC3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD01 JUMP JUMPDEST PUSH2 0x2A4 PUSH2 0xE04 JUMP JUMPDEST PUSH2 0x2A4 PUSH2 0xE71 JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xF13 JUMP JUMPDEST PUSH2 0x2CC PUSH2 0xFBF JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x446 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFCE JUMP JUMPDEST PUSH2 0x33C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x33C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x492 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x108B JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x10A6 JUMP JUMPDEST PUSH2 0x2CC PUSH2 0x110C JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x111B JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x12B0 JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x135C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0x1 DUP2 PUSH2 0x5AF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 POP PUSH2 0x5AC DUP7 DUP7 PUSH2 0xC3A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 TIMESTAMP DUP2 PUSH2 0x5AF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0x631 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1531 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH4 0x3BB0DDF PUSH1 0xE6 SHL DUP2 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 MLOAD SWAP4 AND SWAP3 PUSH4 0xEEC377C0 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP8 SWAP1 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x6DF PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x72F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x78E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A206D6967726174696F6E20616C726561647920646F6E650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP2 EQ PUSH2 0x7E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A20696E76616C6964206D6967726174696F6E20646174610000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x874 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x804 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD TIMESTAMP DUP2 MSTORE POP PUSH1 0x5 PUSH1 0x0 DUP9 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 DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0x847 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD DUP4 MSTORE POP DUP2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP3 MLOAD DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 DUP3 ADD SSTORE ADD PUSH2 0x7E5 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x8A2 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x8F2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x937 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1618 PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST 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 ISZERO PUSH2 0x98C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15E9 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0xAC44F446A94CF337A8403CFA1764D3AB060F166E1E6D0FB2E7CCBB4889CE948D SWAP2 SWAP1 LOG3 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 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0xAD4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0xA57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1531 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD DUP4 MLOAD PUSH4 0x4C6AFEE5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 MLOAD SWAP5 AND SWAP4 PUSH4 0x98D5FDCA SWAP4 DUP1 DUP5 ADD SWAP4 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB23 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14D4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB2D DUP4 DUP4 PUSH2 0xC3A JUMP JUMPDEST ISZERO PUSH2 0xB7F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A206469737075746520706572696F64206F7665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0xBE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x157C PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD DUP3 DUP3 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE TIMESTAMP DUP2 DUP4 ADD MSTORE SWAP1 MLOAD DUP6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0x4C65EA297E9CDFE46F796AE9F245F80E9952CC9EE0544E9C5E5384E06E396EE0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0xCF7 JUMPI PUSH2 0xC60 PUSH2 0x14B9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xCAA JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0xAD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x3 DUP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 DUP4 ADD MLOAD PUSH2 0xCEA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1458 AND JUMP JUMPDEST TIMESTAMP GT SWAP5 POP POP POP POP POP PUSH2 0xAD4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD09 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xD59 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0xDB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x14F6 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x4E5ECD60F0BBCAA2960EE093D3C7A8BF1E265338CAE3032CC13ADF65E95FA325 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0xE0C PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xE5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xE79 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xEC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xF1B PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xF6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xF43F15B56789F3F735684531C1885129263B256F59DC4C71B211722A2F954D96 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xFD6 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1026 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD 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 DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC0C3569EAC4E1B890A966A247A7B7F0D496AF49F2FC482B2959899B634693CFD SWAP1 PUSH1 0x0 SWAP1 LOG2 POP 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 SWAP1 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 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0xCF7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x1100 DUP6 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1458 AND JUMP JUMPDEST TIMESTAMP GT SWAP4 POP POP POP POP PUSH2 0xAD4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ PUSH2 0x1173 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x163F PUSH1 0x34 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x117D DUP4 DUP4 PUSH2 0x10A6 JUMP JUMPDEST PUSH2 0x11B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15C3 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0x1231 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7261636C653A206469737075746520706572696F6420737461727465640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP1 DUP4 ADD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP5 MSTORE DUP7 DUP2 KECCAK256 DUP10 DUP3 MSTORE DUP5 MSTORE DUP7 SWAP1 KECCAK256 SWAP5 MLOAD DUP6 SSTORE SWAP1 MLOAD PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP6 SWAP4 PUSH32 0x160752083B78189F1650EFB0ABDAA0DD2110E5782F553C825705746AC2A5718 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x12B8 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1308 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xA8C3FC8BC370ADDD6CD25F335FB22EA56D17079376E28F460CA770F6D46B2C59 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x1364 PUSH2 0x1454 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x13B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x15A3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x13F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1556 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x14B2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID 0x4F PUSH19 0x61636C653A2063616C6C6572206973206E6F74 KECCAK256 PUSH21 0x68652064697370757465724F7261636C653A20636F PUSH22 0x6C64206E6F742073657420737461626C652070726963 PUSH6 0x20666F722061 PUSH15 0x206173736574207769746820707269 PUSH4 0x65724F72 PUSH2 0x636C PUSH6 0x3A2050726963 PUSH6 0x7220666F7220 PUSH21 0x686973206173736574206E6F74207365744F776E61 PUSH3 0x6C653A KECCAK256 PUSH15 0x6577206F776E657220697320746865 KECCAK256 PUSH27 0x65726F20616464726573734F7261636C653A20707269636520746F KECCAK256 PUSH5 0x6973707574 PUSH6 0x20646F657320 PUSH15 0x6F742065786973744F776E61626C65 GASPRICE KECCAK256 PUSH4 0x616C6C65 PUSH19 0x206973206E6F7420746865206F776E65724F72 PUSH2 0x636C PUSH6 0x3A206C6F636B PUSH10 0x6E6720706572696F6420 PUSH10 0x73206E6F74206F766572 KECCAK256 PUSH26 0x65744F7261636C653A20636F756C64206E6F7420736574206120 PUSH17 0x726963657220666F7220737461626C6520 PUSH2 0x7373 PUSH6 0x744F7261636C PUSH6 0x3A2063616E6E PUSH16 0x74207365742070726963657220746F20 PUSH2 0x6464 PUSH19 0x6573732830294F7261636C653A2063616C6C65 PUSH19 0x206973206E6F7420617574686F72697A656420 PUSH21 0x6F2073657420657870697279207072696365A26469 PUSH17 0x66735822122069091F8D8CABD8E75E8B07 0xB0 0x22 AND 0xE7 0x2E 0xC0 0xBE 0xA7 0xD 0xBA DUP15 DUP5 CALL 0xBF 0x21 0xE6 0xBA SWAP10 0xC9 0xE2 RETURN PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "492:12855:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9305:402;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9305:402:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11384:465;;;;;;;;;;;;;;;;-1:-1:-1;11384:465:4;;-1:-1:-1;;;;;11384:465:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3421:438;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3421:438:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3421:438:4;;-1:-1:-1;3421:438:4;-1:-1:-1;3421:438:4;:::i;:::-;;9837:110;;;;;;;;;;;;;;;;-1:-1:-1;9837:110:4;-1:-1:-1;;;;;9837:110:4;;:::i;:::-;;;;-1:-1:-1;;;;;9837:110:4;;;;;;;;;;;;;;4279:346;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4279:346:4;;;;;;;;;;:::i;8659:349::-;;;;;;;;;;;;;;;;-1:-1:-1;8659:349:4;-1:-1:-1;;;;;8659:349:4;;:::i;:::-;;;;;;;;;;;;;;;;6852:647;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6852:647:4;;;;;;;;;;;;;:::i;12729:616::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12729:616:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6260:286;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6260:286:4;;;;;;;;:::i;4022:75::-;;;:::i;1717:145:48:-;;;:::i;5596:215:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5596:215:4;;;;;;;;:::i;1094:77:48:-;;;:::i;5958:138:4:-;;;;;;;;;;;;;;;;-1:-1:-1;5958:138:4;-1:-1:-1;;;;;5958:138:4;;:::i;10934:133::-;;;;;;;;;;;;;;;;-1:-1:-1;10934:133:4;-1:-1:-1;;;;;10934:133:4;;:::i;10457:::-;;;;;;;;;;;;;;;;-1:-1:-1;10457:133:4;-1:-1:-1;;;;;10457:133:4;;:::i;12126:387::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12126:387:4;;;;;;;;:::i;10041:87::-;;;:::i;7849:588::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7849:588:4;;;;;;;;;;;;;:::i;4824:215::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4824:215:4;;;;;;;;:::i;2011:240:48:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:48;-1:-1:-1;;;;;2011:240:48;;:::i;9305:402:4:-;-1:-1:-1;;;;;9435:19:4;;9394:7;9435:19;;;:11;:19;;;;;;9394:7;;9483:4;9502:10;9498:165;;-1:-1:-1;;;;;9536:19:4;;;;;;:11;:19;;;;;;;;:37;;;;;;;;:43;;-1:-1:-1;9607:45:4;9548:6;9556:16;9607:19;:45::i;:::-;9593:59;;9498:165;9681:5;;;;-1:-1:-1;9305:402:4;-1:-1:-1;;;9305:402:4:o;11384:465::-;-1:-1:-1;;;;;11515:19:4;;11471:7;11515:19;;;:11;:19;;;;;;11471:7;;11564:3;11582:10;11578:229;;-1:-1:-1;;;;;11616:19:4;;;11647:1;11616:19;;;:11;:19;;;;;;;11608:83;;;;-1:-1:-1;;;11608:83:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11747:19:4;;;;;;;:11;:19;;;;;;;;;;11727:69;;-1:-1:-1;;;11727:69:4;;;;;;;;;;;;;;11747:19;;;11727:59;;:69;;;;;11747:19;;11727:69;;;;;;11747:19;11727:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11727:69:4;;;;;;;;;;;-1:-1:-1;11384:465:4;-1:-1:-1;;;;;11384:465:4:o;3421:438::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;3586:8:4::1;::::0;-1:-1:-1;;;3586:8:4;::::1;;;3585:9;3577:52;;;::::0;;-1:-1:-1;;;3577:52:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3647:34:::0;;::::1;3639:77;;;::::0;;-1:-1:-1;;;3639:77:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3732:9;3727:126;3743:20:::0;;::::1;3727:126;;;3820:22;;;;;;;;3826:7;;3834:1;3826:10;;;;;;;;;;;;;3820:22;;;;3838:3;3820:22;;::::0;3784:11:::1;:19;3796:6;-1:-1:-1::0;;;;;3784:19:4::1;-1:-1:-1::0;;;;;3784:19:4::1;;;;;;;;;;;;:33;3804:9;;3814:1;3804:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;3784:33:::0;;-1:-1:-1;3784:33:4;;::::1;::::0;;;;;;-1:-1:-1;3784:33:4;:58;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;3765:3:::1;3727:126;;;;3421:438:::0;;;;;:::o;9837:110::-;-1:-1:-1;;;;;9921:19:4;;;9895:7;9921:19;;;:11;:19;;;;;;;;9837:110::o;4279:346::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;4373:21:4;::::1;4365:73;;;;-1:-1:-1::0;;;4365:73:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;4456:19:4;::::1;;::::0;;;:11:::1;:19;::::0;;;;;:24;4448:84:::1;;;;-1:-1:-1::0;;;4448:84:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;4543:19:4;;::::1;;::::0;;;:11:::1;:19;::::0;;;;;:29;;-1:-1:-1;;;;;;4543:29:4::1;::::0;;::::1;::::0;;::::1;::::0;;4588:30;::::1;::::0;4543:19;4588:30:::1;4279:346:::0;;:::o;8659:349::-;-1:-1:-1;;;;;8751:19:4;;8716:7;8751:19;;;:11;:19;;;;;;8785:10;8781:198;;-1:-1:-1;;;;;8819:19:4;;;8850:1;8819:19;;;:11;:19;;;;;;;8811:83;;;;-1:-1:-1;;;8811:83:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8937:19:4;;;;;;;:11;:19;;;;;;;;;;8917:51;;-1:-1:-1;;;8917:51:4;;;;8937:19;;;8917:49;;:51;;;;;;;;;;8937:19;8917:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8917:51:4;;-1:-1:-1;8781:198:4;8996:5;8659:349;-1:-1:-1;;8659:349:4:o;6852:647::-;7009:8;;-1:-1:-1;;;;;7009:8:4;6995:10;:22;6987:69;;;;-1:-1:-1;;;6987:69:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7075:45;7095:6;7103:16;7075:19;:45::i;:::-;7074:46;7066:86;;;;;-1:-1:-1;;;7066:86:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7193:19:4;;7163:27;7193:19;;;:11;:19;;;;;;;;:37;;;;;;;;7249:23;;;;7241:80;;;;-1:-1:-1;;;7241:80:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7351:19;;7380:28;;;7424:68;;;;;;;;;;;;7488:3;7424:68;;;;;;7452:16;;-1:-1:-1;;;;;7424:68:4;;;;;;;;;;;;6852:647;;;;;:::o;12729:616::-;-1:-1:-1;;;;;12853:19:4;;12821:4;12853:19;;;:11;:19;;;;;;12887:10;12883:434;;12986:18;;:::i;:::-;-1:-1:-1;;;;;;13007:19:4;;;;;;:11;:19;;;;;;;;:37;;;;;;;;;12986:58;;;;;;;;;;;;;;;;;;;;;13058:71;;13109:5;13102:12;;;;;;13058:71;-1:-1:-1;;;;;13160:19:4;;;13143:14;13160:19;;;:11;:19;;;;;;;;;;;;13217:27;;;:19;:27;;;;;;;13272:15;;;;:34;;13217:27;13272:34;:19;:34;:::i;:::-;13266:3;:40;13259:47;;;;;;;;12883:434;-1:-1:-1;13334:4:4;;12729:616;-1:-1:-1;;;12729:616:4:o;6260:286::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;6353:19:4;;::::1;6384:1;6353:19:::0;;;:11:::1;:19;::::0;;;;;::::1;:33:::0;6345:105:::1;;;;-1:-1:-1::0;;;6345:105:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;6461:19:4;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;;6505:34;;;;;;;::::1;::::0;;;;;;;;::::1;6260:286:::0;;:::o;4022:75::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;4086:4:4::1;4075:15:::0;;-1:-1:-1;;;;4075:15:4::1;-1:-1:-1::0;;;4075:15:4::1;::::0;;4022:75::o;1717:145:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:48;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;-1:-1:-1;;;;;;1836:19:48::1;::::0;;1717:145::o;5596:215:4:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;5692:28:4;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:45;;;5753:51;;;;;;;::::1;::::0;;;;;;;;::::1;5596:215:::0;;:::o;1094:77:48:-;1132:7;1158:6;-1:-1:-1;;;;;1158:6:48;1094:77;:::o;5958:138:4:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;6027:8:4::1;:20:::0;;-1:-1:-1;;;;;;6027:20:4::1;-1:-1:-1::0;;;;;6027:20:4;::::1;::::0;;::::1;::::0;;;6063:26:::1;::::0;::::1;::::0;-1:-1:-1;;6063:26:4::1;5958:138:::0;:::o;10934:133::-;-1:-1:-1;;;;;11032:28:4;11006:7;11032:28;;;:19;:28;;;;;;;10934:133::o;10457:::-;-1:-1:-1;;;;;10555:28:4;10529:7;10555:28;;;:19;:28;;;;;;;10457:133::o;12126:387::-;-1:-1:-1;;;;;12250:19:4;;12218:4;12250:19;;;:11;:19;;;;;;12284:10;12280:205;;-1:-1:-1;;;;;12327:19:4;;;12310:14;12327:19;;;:11;:19;;;;;;;;;;;;12384:27;;;:19;:27;;;;;;;12439:35;:16;12384:27;12439:35;:20;:35;:::i;:::-;12433:3;:41;12426:48;;;;;;;10041:87;10113:8;;-1:-1:-1;;;;;10113:8:4;10041:87;:::o;7849:588::-;-1:-1:-1;;;;;8002:19:4;;;;;;;:11;:19;;;;;;;7988:10;:33;7980:98;;;;-1:-1:-1;;;7980:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8096:45;8116:6;8124:16;8096:19;:45::i;:::-;8088:96;;;;-1:-1:-1;;;8088:96:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8202:19:4;;;;;;:11;:19;;;;;;;;:37;;;;;;;;:47;;;:52;8194:95;;;;;-1:-1:-1;;;8194:95:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;8340:18;;;;;;;;;;;8354:3;8340:18;;;;;;;-1:-1:-1;;;;;8300:19:4;;-1:-1:-1;8300:19:4;;;:11;:19;;;;;:37;;;;;;;;:58;;;;;;;;;;;;;;8373:57;;;;;;;;;;;;;;8320:16;;8373:57;;;;;;;;7849:588;;;:::o;4824:215::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;4920:28:4;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:45;;;4981:51;;;;;;;::::1;::::0;;;;;;;;::::1;4824:215:::0;;:::o;2011:240:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:22:48;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:48::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:48;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;-1:-1:-1;;;;;;2227:17:48::1;-1:-1:-1::0;;;;;2227:17:48;;;::::1;::::0;;;::::1;::::0;;2011:240::o;623:104:46:-;710:10;623:104;:::o;922:176:51:-;980:7;1011:5;;;1034:6;;;;1026:46;;;;;-1:-1:-1;;;1026:46:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;1090:1;922:176;-1:-1:-1;;;922:176:51:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "disputeExpiryPrice(address,uint256,uint256)": "57a37dca",
+ "endMigration()": "6c525d04",
+ "getChainlinkRoundData(address,uint80)": "1b85462d",
+ "getDisputer()": "def3cb05",
+ "getExpiryPrice(address,uint256)": "01957f81",
+ "getPrice(address)": "41976e09",
+ "getPricer(address)": "2ecd8857",
+ "getPricerDisputePeriod(address)": "9c7fe9d6",
+ "getPricerLockingPeriod(address)": "b7e1d145",
+ "isDisputePeriodOver(address,uint256)": "5fdc7149",
+ "isLockingPeriodOver(address,uint256)": "d2f3b4e8",
+ "migrateOracle(address,uint256[],uint256[])": "2e4cf6ea",
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "setAssetPricer(address,address)": "3fd3ec8f",
+ "setDisputePeriod(address,uint256)": "8b3cddaf",
+ "setDisputer(address)": "8ee5074d",
+ "setExpiryPrice(address,uint256,uint256)": "ee531409",
+ "setLockingPeriod(address,uint256)": "f19ae734",
+ "setStablePrice(address,uint256)": "601407eb",
+ "transferOwnership(address)": "f2fde38b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDisputer\",\"type\":\"address\"}],\"name\":\"DisputerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"expiryTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputedPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputeTimestamp\",\"type\":\"uint256\"}],\"name\":\"ExpiryPriceDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"expiryTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"onchainTimestamp\",\"type\":\"uint256\"}],\"name\":\"ExpiryPriceUpdated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pricer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputePeriod\",\"type\":\"uint256\"}],\"name\":\"PricerDisputePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pricer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lockingPeriod\",\"type\":\"uint256\"}],\"name\":\"PricerLockingPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pricer\",\"type\":\"address\"}],\"name\":\"PricerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"StablePriceUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"disputeExpiryPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getChainlinkRoundData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"getExpiryPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getPricer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"getPricerDisputePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"getPricerLockingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"isDisputePeriodOver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"isLockingPeriodOver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_expiries\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_prices\",\"type\":\"uint256[]\"}],\"name\":\"migrateOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"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\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"setAssetPricer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_disputePeriod\",\"type\":\"uint256\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"setDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setExpiryPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lockingPeriod\",\"type\":\"uint256\"}],\"name\":\"setLockingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setStablePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"disputeExpiryPrice(address,uint256,uint256)\":{\"details\":\"only the disputer can dispute a price during the dispute period, by setting a new one\",\"params\":{\"_asset\":\"asset address\",\"_expiryTimestamp\":\"expiry timestamp\",\"_price\":\"the correct price\"}},\"endMigration()\":{\"details\":\"can only be called by owner, should be called before setting Oracle module into AddressBook\"},\"getChainlinkRoundData(address,uint80)\":{\"details\":\"if asset is a stable asset, will return stored price and timestamp equal to now\",\"params\":{\"_asset\":\"asset address to get it's historical price\",\"_roundId\":\"chainlink round id\"},\"returns\":{\"_0\":\"price and round timestamp\"}},\"getDisputer()\":{\"returns\":{\"_0\":\"disputer address\"}},\"getExpiryPrice(address,uint256)\":{\"params\":{\"_asset\":\"asset address\",\"_expiryTimestamp\":\"expiry timestamp\"},\"returns\":{\"_0\":\"price scaled by 1e8, denominated in USD\",\"_1\":\"isFinalized True, if the price is finalized, False if not\"}},\"getPrice(address)\":{\"params\":{\"_asset\":\"asset address\"},\"returns\":{\"_0\":\"price scaled by 1e8, denominated in USD e.g. 17568900000 => 175.689 USD\"}},\"getPricer(address)\":{\"params\":{\"_asset\":\"asset address\"},\"returns\":{\"_0\":\"pricer address\"}},\"getPricerDisputePeriod(address)\":{\"details\":\"during the dispute period, the disputer can dispute the submitted price and modify it\",\"params\":{\"_pricer\":\"pricer address\"},\"returns\":{\"_0\":\"dispute period\"}},\"getPricerLockingPeriod(address)\":{\"details\":\"during the locking period an expiry price can not be submitted to this contract\",\"params\":{\"_pricer\":\"pricer address\"},\"returns\":{\"_0\":\"locking period\"}},\"isDisputePeriodOver(address,uint256)\":{\"params\":{\"_asset\":\"asset address\",\"_expiryTimestamp\":\"expiry timestamp\"},\"returns\":{\"_0\":\"True if dispute period is over, False if not\"}},\"isLockingPeriodOver(address,uint256)\":{\"params\":{\"_asset\":\"asset address\",\"_expiryTimestamp\":\"expiry timestamp\"},\"returns\":{\"_0\":\"True if locking period is over, False if not\"}},\"migrateOracle(address,uint256[],uint256[])\":{\"details\":\"this can only be called by owner, should be used at the deployment time before setting Oracle module into AddressBook\",\"params\":{\"_asset\":\"asset address\",\"_expiries\":\"array of expiries timestamps\",\"_prices\":\"array of prices\"}},\"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.\"},\"setAssetPricer(address,address)\":{\"details\":\"can only be called by the owner\",\"params\":{\"_asset\":\"asset address\",\"_pricer\":\"pricer address\"}},\"setDisputePeriod(address,uint256)\":{\"details\":\"can only be called by the owner for a composite pricer (ie CompoundPricer) that depends on or calls other pricers, ensure that the dispute period for the composite pricer is longer than the dispute period for the asset pricer that it calls to ensure safe usage as a dispute in the other pricer will cause the need for a dispute with the composite pricer's price\",\"params\":{\"_disputePeriod\":\"dispute period\",\"_pricer\":\"pricer address\"}},\"setDisputer(address)\":{\"details\":\"can only be called by the owner\",\"params\":{\"_disputer\":\"disputer address\"}},\"setExpiryPrice(address,uint256,uint256)\":{\"details\":\"asset price can only be set after the locking period is over and before the dispute period has started\",\"params\":{\"_asset\":\"asset address\",\"_expiryTimestamp\":\"expiry timestamp\",\"_price\":\"asset price at expiry\"}},\"setLockingPeriod(address,uint256)\":{\"details\":\"can only be called by the owner\",\"params\":{\"_lockingPeriod\":\"locking period\",\"_pricer\":\"pricer address\"}},\"setStablePrice(address,uint256)\":{\"details\":\"price should be scaled by 1e8\",\"params\":{\"_asset\":\"asset address\",\"_price\":\"price\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"assetPricer\":{\"details\":\"mapping between an asset and its pricer\"},\"disputer\":{\"details\":\"disputer is a role defined by the owner that has the ability to dispute a price during the dispute period\"},\"pricerDisputePeriod\":{\"details\":\"mapping of asset pricer to its dispute period dispute period is the period of time after an expiry price has been pushed where a price can be disputed\"},\"pricerLockingPeriod\":{\"details\":\"mapping of asset pricer to its locking period locking period is the period of time after the expiry timestamp where a price can not be pushed\"},\"stablePrice\":{\"details\":\"mapping between stable asset and price\"},\"storedPrice\":{\"details\":\"mapping between asset, expiry timestamp, and the Price structure at the expiry timestamp\"}},\"title\":\"Oracle Module\"},\"userdoc\":{\"methods\":{\"disputeExpiryPrice(address,uint256,uint256)\":{\"notice\":\"dispute an asset price during the dispute period\"},\"endMigration()\":{\"notice\":\"end migration process\"},\"getChainlinkRoundData(address,uint80)\":{\"notice\":\"get historical asset price and timestamp\"},\"getDisputer()\":{\"notice\":\"get the disputer address\"},\"getExpiryPrice(address,uint256)\":{\"notice\":\"get the asset price at specific expiry timestamp\"},\"getPrice(address)\":{\"notice\":\"get a live asset price from the asset's pricer contract\"},\"getPricer(address)\":{\"notice\":\"get the pricer for an asset\"},\"getPricerDisputePeriod(address)\":{\"notice\":\"get a pricer's dispute period dispute period is the period of time after an expiry price has been pushed where a price can be disputed\"},\"getPricerLockingPeriod(address)\":{\"notice\":\"get a pricer's locking period locking period is the period of time after the expiry timestamp where a price can not be pushed\"},\"isDisputePeriodOver(address,uint256)\":{\"notice\":\"check if the dispute period is over\"},\"isLockingPeriodOver(address,uint256)\":{\"notice\":\"check if the locking period is over for setting the asset price at a particular expiry timestamp\"},\"migrateOracle(address,uint256[],uint256[])\":{\"notice\":\"function to mgirate asset prices from old oracle to new deployed oracle\"},\"setAssetPricer(address,address)\":{\"notice\":\"sets the pricer for an asset\"},\"setDisputePeriod(address,uint256)\":{\"notice\":\"sets the dispute period for a pricer\"},\"setDisputer(address)\":{\"notice\":\"set the disputer address\"},\"setExpiryPrice(address,uint256,uint256)\":{\"notice\":\"submits the expiry price to the oracle, can only be set from the pricer\"},\"setLockingPeriod(address,uint256)\":{\"notice\":\"sets the locking period for a pricer\"},\"setStablePrice(address,uint256)\":{\"notice\":\"set stable asset price\"}},\"notice\":\"The Oracle module sets, retrieves, and stores USD prices (USD per asset) for underlying, collateral, and strike assets manages pricers that are used for different assets\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/Oracle.sol\":\"Oracle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/Oracle.sol\":{\"keccak256\":\"0xb40aca22d0f74239b3d4c338aa39388377765d90568098891b82ca9732c2f6b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://bdc2a70dc5c9fc1de944c2cc97a12ccbfa71f359f126d5b1ea97c80dabe2b743\",\"dweb:/ipfs/QmZ4AiaUTre5Rp5y8ZRvtSqFg3kSZSshbgDYv84QnJAgt5\"]},\"contracts/interfaces/OpynPricerInterface.sol\":{\"keccak256\":\"0xa937e5fa413ff096600cd4bb62795cda1aa6916a3ad4b1e50ab11aaf5cdd07c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://194bd27f9bbbac1a58c920bda262886f9cdc315985ad152c584f9715261d8317\",\"dweb:/ipfs/QmQGXWP6dNSBxhqrW93mAsS3E2ahBSNgnG5mBais6rgdaK\"]},\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/Otoken.sol": {
+ "Otoken": {
+ "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": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "collateralAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "controller",
+ "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": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "expiryTimestamp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenDetails",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "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": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "init",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isPut",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mintOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "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": "amount",
+ "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": [],
+ "name": "strikeAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "strikePrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlyingAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50612f89806100206000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80637ecebe00116100de578063af0968fc11610097578063dd62ed3e11610071578063dd62ed3e146104bc578063f3c274a6146104ea578063f630df34146104f2578063f77c47911461054657610173565b8063af0968fc14610419578063c52987cf14610463578063d505accf1461046b57610173565b80637ecebe001461038357806395d89b41146103a9578063a457c2d7146103b1578063a9059cbb146103dd578063aabaecd614610409578063ade6e2aa1461041157610173565b80633644e515116101305780633644e515146102c757806339509351146102cf57806351b0a410146102fb57806356d878f71461032957806370a08231146103555780637158da7c1461037b57610173565b806306fdde0314610178578063095ea7b3146101f557806317d69bc81461023557806318160ddd1461025957806323b872dd14610273578063313ce567146102a9575b600080fd5b61018061054e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ba5781810151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102216004803603604081101561020b57600080fd5b506001600160a01b0381351690602001356105e5565b604080519115158252519081900360200190f35b61023d610602565b604080516001600160a01b039092168252519081900360200190f35b610261610612565b60408051918252519081900360200190f35b6102216004803603606081101561028957600080fd5b506001600160a01b03813581169160208101359091169060400135610618565b6102b16106a5565b6040805160ff9092168252519081900360200190f35b6102616106ae565b610221600480360360408110156102e557600080fd5b506001600160a01b0381351690602001356106bd565b6103276004803603604081101561031157600080fd5b506001600160a01b038135169060200135610711565b005b6103276004803603604081101561033f57600080fd5b506001600160a01b038135169060200135610768565b6102616004803603602081101561036b57600080fd5b50356001600160a01b03166107bb565b61023d6107da565b6102616004803603602081101561039957600080fd5b50356001600160a01b03166107e9565b610180610810565b610221600480360360408110156103c757600080fd5b506001600160a01b038135169060200135610871565b610221600480360360408110156103f357600080fd5b506001600160a01b0381351690602001356108df565b61023d6108f3565b610261610903565b61042161090a565b604080516001600160a01b039788168152958716602087015293909516848401526060840191909152608083015291151560a082015290519081900360c00190f35b610261610940565b610327600480360360e081101561048157600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610947565b610261600480360360408110156104d257600080fd5b506001600160a01b0381358116916020013516610adf565b610221610b0a565b610327600480360360e081101561050857600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001351515610b14565b61023d610cb4565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105da5780601f106105af576101008083540402835291602001916105da565b820191906000526020600020905b8154815290600101906020018083116105bd57829003601f168201915b505050505090505b90565b60006105f96105f2610cc3565b8484610cc7565b50600192915050565b610100546001600160a01b031681565b60675490565b6000610625848484610db3565b61069b84610631610cc3565b61069685604051806060016040528060288152602001612e6f602891396001600160a01b038a1660009081526066602052604081209061066f610cc3565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610f1c16565b610cc7565b5060019392505050565b606a5460ff1690565b60006106b8610fb3565b905090565b60006105f96106ca610cc3565b8461069685606660006106db610cc3565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610fe616565b60fe546001600160a01b0316331461075a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612df56028913960400191505060405180910390fd5b6107648282611047565b5050565b60fe546001600160a01b031633146107b15760405162461bcd60e51b8152600401808060200182810382526028815260200180612d596028913960400191505060405180910390fd5b6107648282611145565b6001600160a01b0381166000908152606560205260409020545b919050565b60ff546001600160a01b031681565b6001600160a01b038116600090815260cb6020526040812061080a9061124d565b92915050565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105da5780601f106105af576101008083540402835291602001916105da565b60006105f961087e610cc3565b8461069685604051806060016040528060258152602001612f2f60259139606660006108a8610cc3565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610f1c16565b60006105f96108ec610cc3565b8484610db3565b610101546001600160a01b031681565b6101035481565b6101015460ff8054610100546101025461010354610104546001600160a01b039687169794871696909316949193909290911690565b6101025481565b8342111561099c576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc548888886109d160cb60008e6001600160a01b03166001600160a01b0316815260200190815260200160002061124d565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e0909101909152805191012090506000610a2f82611251565b90506000610a3f8287878761129d565b9050896001600160a01b0316816001600160a01b031614610aa7576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb60205260409020610ac890611417565b610ad38a8a8a610cc7565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101045460ff1681565b600054610100900460ff1680610b2d5750610b2d611420565b80610b3b575060005460ff16155b610b765760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015610ba1576000805460ff1961ff0019909116610100171660011790555b876001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bda57600080fd5b505afa158015610bee573d6000803e3d6000fd5b505050506040513d6020811015610c0457600080fd5b505160fe80546001600160a01b03199081166001600160a01b039384161790915560ff805482168a8416179055610100805482168984161790556101018054909116918716919091179055610102849055610103839055610104805460ff1916831515179055606080610c75611426565b91509150610c838282611dd9565b610c8c82611eb2565b610c966008611f88565b50508015610caa576000805461ff00191690555b5050505050505050565b60fe546001600160a01b031681565b3390565b6001600160a01b038316610d0c5760405162461bcd60e51b8152600401808060200182810382526024815260200180612f0b6024913960400191505060405180910390fd5b6001600160a01b038216610d515760405162461bcd60e51b8152600401808060200182810382526022815260200180612cef6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610df85760405162461bcd60e51b8152600401808060200182810382526025815260200180612ee66025913960400191505060405180910390fd5b6001600160a01b038216610e3d5760405162461bcd60e51b8152600401808060200182810382526023815260200180612caa6023913960400191505060405180910390fd5b610e48838383611ead565b610e8b81604051806060016040528060268152602001612d11602691396001600160a01b038616600090815260656020526040902054919063ffffffff610f1c16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610ec0908263ffffffff610fe616565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610fab5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f70578181015183820152602001610f58565b50505050905090810190601f168015610f9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106b86040518080612e1d6052913960520190506040518091039020610fd9611f9e565b610fe1611fa4565b611faa565b600082820183811015611040576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166110a2576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6110ae60008383611ead565b6067546110c1908263ffffffff610fe616565b6067556001600160a01b0382166000908152606560205260409020546110ed908263ffffffff610fe616565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b03821661118a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612ec56021913960400191505060405180910390fd5b61119682600083611ead565b6111d981604051806060016040528060228152602001612ccd602291396001600160a01b038516600090815260656020526040902054919063ffffffff610f1c16565b6001600160a01b038316600090815260656020526040902055606754611205908263ffffffff61200016565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b600061125b610fb3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112fe5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d376022913960400191505060405180910390fd5b8360ff16601b148061131357508360ff16601c145b61134e5760405162461bcd60e51b8152600401808060200182810382526022815260200180612dd36022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa1580156113a6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661140e576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b303b1590565b606080606060ff60009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114b657600080fd5b81019080805160405193929190846401000000008211156114d657600080fd5b9083019060208201858111156114eb57600080fd5b825164010000000081118282018810171561150557600080fd5b82525081516020918201929091019080838360005b8381101561153257818101518382015260200161151a565b50505050905090810190601f16801561155f5780820380516001836020036101000a031916815260200191505b506040818152610100546395d89b4160e01b835290519596506060956001600160a01b0390911694506395d89b41935060048083019350600092829003018186803b1580156115ad57600080fd5b505afa1580156115c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156115ea57600080fd5b810190808051604051939291908464010000000082111561160a57600080fd5b90830190602082018581111561161f57600080fd5b825164010000000081118282018810171561163957600080fd5b82525081516020918201929091019080838360005b8381101561166657818101518382015260200161164e565b50505050905090810190601f1680156116935780820380516001836020036101000a031916815260200191505b506040818152610101546395d89b4160e01b835290519596506060956001600160a01b0390911694506395d89b41935060048083019350600092829003018186803b1580156116e157600080fd5b505afa1580156116f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561171e57600080fd5b810190808051604051939291908464010000000082111561173e57600080fd5b90830190602082018581111561175357600080fd5b825164010000000081118282018810171561176d57600080fd5b82525081516020918201929091019080838360005b8381101561179a578181015183820152602001611782565b50505050905090810190601f1680156117c75780820380516001836020036101000a031916815260200191505b50604052505050905060606117de61010254612042565b905060008060006117f1610103546121b4565b610104549295509093509150606090819061180e9060ff166121d3565b9150915060608061181e8661225c565b915091508a8a61182d876125f4565b836118378b612697565b8c888f6040516020018089805190602001908083835b6020831061186c5780518252601f19909201916020918201910161184d565b51815160209384036101000a60001901801990921691161790528b5191909301928b0191508083835b602083106118b45780518252601f199092019160209182019101611895565b6001836020036101000a03801982511681845116808217855250505050505090500180600160fd1b81525060010187805190602001908083835b6020831061190d5780518252601f1990920191602091820191016118ee565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010186805190602001908083835b602083106119665780518252601f199092019160209182019101611947565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010185805190602001908083835b602083106119bf5780518252601f1990920191602091820191016119a0565b6001836020036101000a03801982511681845116808217855250505050505090500180600160fd1b81525060010184805190602001908083835b60208310611a185780518252601f1990920191602091820191016119f9565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b60208310611a605780518252601f199092019160209182019101611a41565b6001836020036101000a03801982511681845116808217855250505050505090500180600160fd1b81525060010182805190602001908083835b60208310611ab95780518252601f199092019160209182019101611a9a565b6001836020036101000a038019825116818451168082178552505050505050905001806a0810dbdb1b185d195c985b60aa1b815250600b01985050505050505050506040516020818303038152906040529c508a8a8a611b18886125f4565b85611b228c6125f4565b8d8a6040516020018080606f60f81b81525060010189805190602001908083835b60208310611b625780518252601f199092019160209182019101611b43565b51815160209384036101000a60001901801990921691161790528b5191909301928b0191508083835b60208310611baa5780518252601f199092019160209182019101611b8b565b6001836020036101000a03801982511681845116808217855250505050505090500180602f60f81b81525060010187805190602001908083835b60208310611c035780518252601f199092019160209182019101611be4565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010186805190602001908083835b60208310611c5c5780518252601f199092019160209182019101611c3d565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b60208310611ca45780518252601f199092019160209182019101611c85565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b60208310611cec5780518252601f199092019160209182019101611ccd565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010183805190602001908083835b60208310611d455780518252601f199092019160209182019101611d26565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611d8d5780518252601f199092019160209182019101611d6e565b6001836020036101000a038019825116818451168082178552505050505050905001985050505050505050506040516020818303038152906040529b5050505050505050505050509091565b600054610100900460ff1680611df25750611df2611420565b80611e00575060005460ff16155b611e3b5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015611e66576000805460ff1961ff0019909116610100171660011790555b8251611e79906068906020860190612c11565b508151611e8d906069906020850190612c11565b50606a805460ff191660121790558015611ead576000805461ff00191690555b505050565b600054610100900460ff1680611ecb5750611ecb611420565b80611ed9575060005460ff16155b611f145760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015611f3f576000805460ff1961ff0019909116610100171660011790555b611f47612772565b611f6a82604051806040016040528060018152602001603160f81b815250612814565b611f73826128d4565b8015610764576000805461ff00191690555050565b606a805460ff191660ff92909216919091179055565b60975490565b60985490565b6000838383611fb7612991565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b600061104083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f1c565b6060600061205a836305f5e10063ffffffff61299516565b90506000612072846305f5e10063ffffffff6129d716565b9050606061207f82612697565b9050826120905792506107d5915050565b60005b6120a484600a63ffffffff61299516565b6120b657600a84049350600101612093565b80600803600a0a8401935060606120cc85612697565b90506120de8160016009859003612a19565b9050606083826040516020018083805190602001908083835b602083106121165780518252601f1990920191602091820191016120f7565b6001836020036101000a03801982511681845116808217855250505050505090500180601760f91b81525060010182805190602001908083835b6020831061216f5780518252601f199092019160209182019101612150565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050809650505050505050919050565b600080806121c6620151808504612ab4565b9196909550909350915050565b606080821561221b57604051806040016040528060018152602001600560fc1b81525060405180604001604052806003815260200162141d5d60ea1b81525091509150612257565b604051806040016040528060018152602001604360f81b8152506040518060400160405280600481526020016310d85b1b60e21b815250915091505b915091565b60608082600114156122ad57604051806040016040528060038152602001622520a760e91b815250604051806040016040528060078152602001664a616e7561727960c81b81525091509150612257565b82600214156122fc57604051806040016040528060038152602001622322a160e91b81525060405180604001604052806008815260200167466562727561727960c01b81525091509150612257565b8260031415612348576040518060400160405280600381526020016226a0a960e91b8152506040518060400160405280600581526020016409ac2e4c6d60db1b81525091509150612257565b8260041415612394576040518060400160405280600381526020016220a82960e91b81525060405180604001604052806005815260200164105c1c9a5b60da1b81525091509150612257565b82600514156123de57604051806040016040528060038152602001624d415960e81b815250604051806040016040528060038152602001624d617960e81b81525091509150612257565b82600614156124295760405180604001604052806003815260200162252aa760e91b815250604051806040016040528060048152602001634a756e6560e01b81525091509150612257565b8260071415612474576040518060400160405280600381526020016212955360ea1b815250604051806040016040528060048152602001634a756c7960e01b81525091509150612257565b82600814156124c1576040518060400160405280600381526020016241554760e81b81525060405180604001604052806006815260200165105d59dd5cdd60d21b81525091509150612257565b8260091415612511576040518060400160405280600381526020016205345560ec1b8152506040518060400160405280600981526020016829b2b83a32b6b132b960b91b81525091509150612257565b82600a141561255f576040518060400160405280600381526020016213d0d560ea1b8152506040518060400160405280600781526020016627b1ba37b132b960c91b81525091509150612257565b82600b14156125ae57604051806040016040528060038152602001622727ab60e91b815250604051806040016040528060088152602001672737bb32b6b132b960c11b81525091509150612257565b6040518060400160405280600381526020016244454360e81b815250604051806040016040528060088152602001672232b1b2b6b132b960c11b81525091509150612257565b60606063821115612606576064820691505b606061261183612697565b9050600a83101561080a57806040516020018080600360fc1b81525060010182805190602001908083835b6020831061265b5780518252601f19909201916020918201910161263c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040529150506107d5565b6060816126bc57506040805180820190915260018152600360fc1b60208201526107d5565b8160005b81156126d457600101600a820491506126c0565b60608167ffffffffffffffff811180156126ed57600080fd5b506040519080825280601f01601f191660200182016040528015612718576020820181803683370190505b50859350905060001982015b831561276957600a840660300160f81b8282806001900393508151811061274757fe5b60200101906001600160f81b031916908160001a905350600a84049350612724565b50949350505050565b600054610100900460ff168061278b575061278b611420565b80612799575060005460ff16155b6127d45760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff161580156127ff576000805460ff1961ff0019909116610100171660011790555b8015612811576000805461ff00191690555b50565b600054610100900460ff168061282d575061282d611420565b8061283b575060005460ff16155b6128765760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff161580156128a1576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015611ead576000805461ff0019169055505050565b600054610100900460ff16806128ed57506128ed611420565b806128fb575060005460ff16155b6129365760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015612961576000805460ff1961ff0019909116610100171660011790555b604051806052612d81823960405190819003605201902060cc55508015610764576000805461ff00191690555050565b4690565b600061104083836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612b4a565b600061104083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bac565b60608083830367ffffffffffffffff81118015612a3557600080fd5b506040519080825280601f01601f191660200182016040528015612a60576020820181803683370190505b50905060005b848403811015612769578581860181518110612a7e57fe5b602001015160f81c60f81b828281518110612a9557fe5b60200101906001600160f81b031916908160001a905350600101612a66565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612b0b57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008183612b995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f70578181015183820152602001610f58565b50828481612ba357fe5b06949350505050565b60008183612bfb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f70578181015183820152602001610f58565b506000838581612c0757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c5257805160ff1916838001178555612c7f565b82800160010185558215612c7f579182015b82811115612c7f578251825591602001919060010190612c64565b50612c8b929150612c8f565b5090565b6105e291905b80821115612c8b5760008155600101612c9556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75654f746f6b656e3a204f6e6c7920436f6e74726f6c6c65722063616e206275726e204f746f6b656e735065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e652945434453413a20696e76616c6964207369676e6174757265202776272076616c75654f746f6b656e3a204f6e6c7920436f6e74726f6c6c65722063616e206d696e74204f746f6b656e73454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f330f7fb6b3067b1517aa91b625012f17cbe90f5407afbd9cc4d1eeb3938517264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F89 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 0x173 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xAF0968FC GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4BC JUMPI DUP1 PUSH4 0xF3C274A6 EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0xF630DF34 EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0x546 JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0xAF0968FC EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0xC52987CF EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x46B JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3A9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x3B1 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0xAABAECD6 EQ PUSH2 0x409 JUMPI DUP1 PUSH4 0xADE6E2AA EQ PUSH2 0x411 JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x51B0A410 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x56D878F7 EQ PUSH2 0x329 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x7158DA7C EQ PUSH2 0x37B JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x17D69BC8 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x273 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2A9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x180 PUSH2 0x54E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1E7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x20B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x23D PUSH2 0x602 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x261 PUSH2 0x612 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x618 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x6A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x261 PUSH2 0x6AE JUMP JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6BD JUMP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x711 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x768 JUMP JUMPDEST PUSH2 0x261 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x23D PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x261 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E9 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x810 JUMP JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x871 JUMP JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x23D PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x261 PUSH2 0x903 JUMP JUMPDEST PUSH2 0x421 PUSH2 0x90A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 SWAP1 SWAP6 AND DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP4 ADD MSTORE SWAP2 ISZERO ISZERO PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xC0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x261 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x947 JUMP JUMPDEST PUSH2 0x261 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xADF JUMP JUMPDEST PUSH2 0x221 PUSH2 0xB0A JUMP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x23D PUSH2 0xCB4 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5AF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DA 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 0x5BD JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x5F2 PUSH2 0xCC3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xCC7 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x100 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x625 DUP5 DUP5 DUP5 PUSH2 0xDB3 JUMP JUMPDEST PUSH2 0x69B DUP5 PUSH2 0x631 PUSH2 0xCC3 JUMP JUMPDEST PUSH2 0x696 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E6F PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x66F PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH2 0xCC7 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B8 PUSH2 0xFB3 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x6CA PUSH2 0xCC3 JUMP JUMPDEST DUP5 PUSH2 0x696 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x6DB PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x75A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2DF5 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0x1047 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2D59 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0x1145 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x80A SWAP1 PUSH2 0x124D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5AF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x87E PUSH2 0xCC3 JUMP JUMPDEST DUP5 PUSH2 0x696 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2F2F PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x8A8 PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x8EC PUSH2 0xCC3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xDB3 JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x103 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0xFF DUP1 SLOAD PUSH2 0x100 SLOAD PUSH2 0x102 SLOAD PUSH2 0x103 SLOAD PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP5 DUP8 AND SWAP7 SWAP1 SWAP4 AND SWAP5 SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 AND SWAP1 JUMP JUMPDEST PUSH2 0x102 SLOAD DUP2 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x99C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x9D1 PUSH1 0xCB PUSH1 0x0 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 PUSH2 0x124D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xA2F DUP3 PUSH2 0x1251 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA3F DUP3 DUP8 DUP8 DUP8 PUSH2 0x129D JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xAA7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xAC8 SWAP1 PUSH2 0x1417 JUMP JUMPDEST PUSH2 0xAD3 DUP11 DUP11 DUP11 PUSH2 0xCC7 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 PUSH2 0x104 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xB2D JUMPI POP PUSH2 0xB2D PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0xB3B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xB76 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0xFF DUP1 SLOAD DUP3 AND DUP11 DUP5 AND OR SWAP1 SSTORE PUSH2 0x100 DUP1 SLOAD DUP3 AND DUP10 DUP5 AND OR SWAP1 SSTORE PUSH2 0x101 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP8 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x102 DUP5 SWAP1 SSTORE PUSH2 0x103 DUP4 SWAP1 SSTORE PUSH2 0x104 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x60 DUP1 PUSH2 0xC75 PUSH2 0x1426 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xC83 DUP3 DUP3 PUSH2 0x1DD9 JUMP JUMPDEST PUSH2 0xC8C DUP3 PUSH2 0x1EB2 JUMP JUMPDEST PUSH2 0xC96 PUSH1 0x8 PUSH2 0x1F88 JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0xCAA JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xD0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2F0B PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2CEF PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2EE6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2CAA PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE48 DUP4 DUP4 DUP4 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0xE8B DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2D11 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xEC0 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xFAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF70 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF58 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF9D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x2E1D PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0xFD9 PUSH2 0x1F9E JUMP JUMPDEST PUSH2 0xFE1 PUSH2 0x1FA4 JUMP JUMPDEST PUSH2 0x1FAA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1040 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x10A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10AE PUSH1 0x0 DUP4 DUP4 PUSH2 0x1EAD JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x10C1 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x10ED SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x118A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2EC5 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1196 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0x11D9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2CCD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0x1205 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2000 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x125B PUSH2 0xFB3 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x12FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2D37 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0x1313 JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x134E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2DD3 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13A6 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 0x140E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x60 PUSH1 0xFF 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 0x95D89B41 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x148D 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 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x14D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x14EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x1505 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1532 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x151A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x155F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH2 0x100 SLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP4 MSTORE SWAP1 MLOAD SWAP6 SWAP7 POP PUSH1 0x60 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP5 POP PUSH4 0x95D89B41 SWAP4 POP PUSH1 0x4 DUP1 DUP4 ADD SWAP4 POP PUSH1 0x0 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15C1 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 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x15EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x160A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x161F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x1639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1666 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x164E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1693 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH2 0x101 SLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP4 MSTORE SWAP1 MLOAD SWAP6 SWAP7 POP PUSH1 0x60 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP5 POP PUSH4 0x95D89B41 SWAP4 POP PUSH1 0x4 DUP1 DUP4 ADD SWAP4 POP PUSH1 0x0 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16F5 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 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x171E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x173E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1753 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x179A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1782 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x17C7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH1 0x60 PUSH2 0x17DE PUSH2 0x102 SLOAD PUSH2 0x2042 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x17F1 PUSH2 0x103 SLOAD PUSH2 0x21B4 JUMP JUMPDEST PUSH2 0x104 SLOAD SWAP3 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x60 SWAP1 DUP2 SWAP1 PUSH2 0x180E SWAP1 PUSH1 0xFF AND PUSH2 0x21D3 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x60 DUP1 PUSH2 0x181E DUP7 PUSH2 0x225C JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP11 DUP11 PUSH2 0x182D DUP8 PUSH2 0x25F4 JUMP JUMPDEST DUP4 PUSH2 0x1837 DUP12 PUSH2 0x2697 JUMP JUMPDEST DUP13 DUP9 DUP16 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x186C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x184D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP12 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP12 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x18B4 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1895 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x1 PUSH1 0xFD SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP8 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x190D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x18EE JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP7 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1966 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1947 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP6 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x19BF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19A0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x1 PUSH1 0xFD SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A18 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19F9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP7 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A60 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x1 PUSH1 0xFD SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AB9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A9A JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH11 0x810DBDB1B185D195C985B PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0xB ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP13 POP DUP11 DUP11 DUP11 PUSH2 0x1B18 DUP9 PUSH2 0x25F4 JUMP JUMPDEST DUP6 PUSH2 0x1B22 DUP13 PUSH2 0x25F4 JUMP JUMPDEST DUP14 DUP11 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH1 0x6F PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1B62 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1B43 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP12 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP12 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1BAA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2F PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP8 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C03 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1BE4 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP7 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C5C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1C3D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP9 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP9 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1CA4 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1C85 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP8 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP8 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1CEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1CCD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D45 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D26 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D8D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D6E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1DF2 JUMPI POP PUSH2 0x1DF2 PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x1E00 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1E3B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1E66 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH2 0x1E79 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C11 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1E8D SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x2C11 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1EAD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1ECB JUMPI POP PUSH2 0x1ECB PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x1ED9 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1F14 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1F3F JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x1F47 PUSH2 0x2772 JUMP JUMPDEST PUSH2 0x1F6A DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH2 0x2814 JUMP JUMPDEST PUSH2 0x1F73 DUP3 PUSH2 0x28D4 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x764 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x1FB7 PUSH2 0x2991 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1040 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xF1C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x205A DUP4 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x2995 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2072 DUP5 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x29D7 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x207F DUP3 PUSH2 0x2697 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x2090 JUMPI SWAP3 POP PUSH2 0x7D5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x20A4 DUP5 PUSH1 0xA PUSH4 0xFFFFFFFF PUSH2 0x2995 AND JUMP JUMPDEST PUSH2 0x20B6 JUMPI PUSH1 0xA DUP5 DIV SWAP4 POP PUSH1 0x1 ADD PUSH2 0x2093 JUMP JUMPDEST DUP1 PUSH1 0x8 SUB PUSH1 0xA EXP DUP5 ADD SWAP4 POP PUSH1 0x60 PUSH2 0x20CC DUP6 PUSH2 0x2697 JUMP JUMPDEST SWAP1 POP PUSH2 0x20DE DUP2 PUSH1 0x1 PUSH1 0x9 DUP6 SWAP1 SUB PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP4 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2116 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x20F7 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x17 PUSH1 0xF9 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x216F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP DUP1 SWAP7 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x21C6 PUSH3 0x15180 DUP6 DIV PUSH2 0x2AB4 JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 ISZERO PUSH2 0x221B JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 PUSH1 0xFC SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x141D5D PUSH1 0xEA SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x43 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x10D85B1B PUSH1 0xE2 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP JUMPDEST SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 PUSH1 0x1 EQ ISZERO PUSH2 0x22AD JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2520A7 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x4A616E75617279 PUSH1 0xC8 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x2 EQ ISZERO PUSH2 0x22FC JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2322A1 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x4665627275617279 PUSH1 0xC0 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x3 EQ ISZERO PUSH2 0x2348 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x26A0A9 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x9AC2E4C6D PUSH1 0xDB SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x4 EQ ISZERO PUSH2 0x2394 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x20A829 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x105C1C9A5B PUSH1 0xDA SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x5 EQ ISZERO PUSH2 0x23DE JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x4D4159 PUSH1 0xE8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x4D6179 PUSH1 0xE8 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x6 EQ ISZERO PUSH2 0x2429 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x252AA7 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x4A756E65 PUSH1 0xE0 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x7 EQ ISZERO PUSH2 0x2474 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x129553 PUSH1 0xEA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x4A756C79 PUSH1 0xE0 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x8 EQ ISZERO PUSH2 0x24C1 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x415547 PUSH1 0xE8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x105D59DD5CDD PUSH1 0xD2 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x9 EQ ISZERO PUSH2 0x2511 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x53455 PUSH1 0xEC SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x9 DUP2 MSTORE PUSH1 0x20 ADD PUSH9 0x29B2B83A32B6B132B9 PUSH1 0xB9 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0xA EQ ISZERO PUSH2 0x255F JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x13D0D5 PUSH1 0xEA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x27B1BA37B132B9 PUSH1 0xC9 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0xB EQ ISZERO PUSH2 0x25AE JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2727AB PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x2737BB32B6B132B9 PUSH1 0xC1 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x444543 PUSH1 0xE8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x2232B1B2B6B132B9 PUSH1 0xC1 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x63 DUP3 GT ISZERO PUSH2 0x2606 JUMPI PUSH1 0x64 DUP3 MOD SWAP2 POP JUMPDEST PUSH1 0x60 PUSH2 0x2611 DUP4 PUSH2 0x2697 JUMP JUMPDEST SWAP1 POP PUSH1 0xA DUP4 LT ISZERO PUSH2 0x80A JUMPI DUP1 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH1 0x3 PUSH1 0xFC SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x265B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x263C JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0x26BC JUMPI POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x3 PUSH1 0xFC SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x7D5 JUMP JUMPDEST DUP2 PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0x26D4 JUMPI PUSH1 0x1 ADD PUSH1 0xA DUP3 DIV SWAP2 POP PUSH2 0x26C0 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x26ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2718 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP6 SWAP4 POP SWAP1 POP PUSH1 0x0 NOT DUP3 ADD JUMPDEST DUP4 ISZERO PUSH2 0x2769 JUMPI PUSH1 0xA DUP5 MOD PUSH1 0x30 ADD PUSH1 0xF8 SHL DUP3 DUP3 DUP1 PUSH1 0x1 SWAP1 SUB SWAP4 POP DUP2 MLOAD DUP2 LT PUSH2 0x2747 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0xA DUP5 DIV SWAP4 POP PUSH2 0x2724 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x278B JUMPI POP PUSH2 0x278B PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x2799 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x27D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x27FF JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x2811 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x282D JUMPI POP PUSH2 0x282D PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x283B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2876 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x28A1 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH2 0x1EAD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x28ED JUMPI POP PUSH2 0x28ED PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x28FB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2936 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2961 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH2 0x2D81 DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH2 0x764 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1040 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0x2B4A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1040 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x2BAC JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 DUP4 SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2A35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A60 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP5 SUB DUP2 LT ISZERO PUSH2 0x2769 JUMPI DUP6 DUP2 DUP7 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2A7E JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2A95 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x2A66 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP4 PUSH3 0x264965 DUP2 ADD DUP3 PUSH3 0x23AB1 PUSH1 0x4 DUP4 MUL SDIV SWAP1 POP PUSH1 0x4 PUSH1 0x3 PUSH3 0x23AB1 DUP4 MUL ADD SDIV SWAP1 SWAP2 SUB SWAP1 PUSH1 0x0 PUSH3 0x164B09 PUSH2 0xFA0 PUSH1 0x1 DUP6 ADD MUL SDIV SWAP1 POP PUSH1 0x4 PUSH2 0x5B5 DUP3 MUL SDIV DUP4 SUB PUSH1 0x1F ADD SWAP3 POP PUSH1 0x0 PUSH2 0x98F DUP5 PUSH1 0x50 MUL DUP2 PUSH2 0x2B0B JUMPI INVALID JUMPDEST SDIV SWAP1 POP PUSH1 0x0 PUSH1 0x50 PUSH2 0x98F DUP4 MUL SDIV DUP6 SUB SWAP1 POP PUSH1 0xB DUP3 SDIV PUSH1 0x30 NOT SWAP5 SWAP1 SWAP5 ADD PUSH1 0x64 MUL SWAP3 SWAP1 SWAP3 ADD DUP4 ADD SWAP10 PUSH1 0x2 PUSH1 0xC SWAP1 SWAP5 MUL SWAP1 SWAP2 SUB SWAP3 SWAP1 SWAP3 ADD SWAP8 POP SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2B99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xF70 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF58 JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0x2BA3 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2BFB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xF70 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF58 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2C07 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2C52 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2C7F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2C7F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2C7F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2C64 JUMP JUMPDEST POP PUSH2 0x2C8B SWAP3 SWAP2 POP PUSH2 0x2C8F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x5E2 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2C8B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C95 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 0x4F PUSH21 0x6F6B656E3A204F6E6C7920436F6E74726F6C6C6572 KECCAK256 PUSH4 0x616E2062 PUSH22 0x726E204F746F6B656E735065726D6974286164647265 PUSH20 0x73206F776E65722C61646472657373207370656E PUSH5 0x65722C7569 PUSH15 0x743235362076616C75652C75696E74 ORIGIN CALLDATALOAD CALLDATASIZE KECCAK256 PUSH15 0x6F6E63652C75696E74323536206465 PUSH2 0x646C PUSH10 0x6E652945434453413A20 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202776272076616C7565 0x4F PUSH21 0x6F6B656E3A204F6E6C7920436F6E74726F6C6C6572 KECCAK256 PUSH4 0x616E206D PUSH10 0x6E74204F746F6B656E73 GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E6365436F6E74726163742069 PUSH15 0x7374616E63652068617320616C7265 PUSH2 0x6479 KECCAK256 PUSH3 0x65656E KECCAK256 PUSH10 0x6E697469616C697A6564 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220F330 0xF7 0xFB PUSH12 0x3067B1517AA91B625012F17C 0xBE SWAP1 CREATE2 BLOCKHASH PUSH27 0xFBD9CC4D1EEB3938517264736F6C634300060A0033000000000000 ",
+ "sourceMap": "679:9313:5:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101735760003560e01c80637ecebe00116100de578063af0968fc11610097578063dd62ed3e11610071578063dd62ed3e146104bc578063f3c274a6146104ea578063f630df34146104f2578063f77c47911461054657610173565b8063af0968fc14610419578063c52987cf14610463578063d505accf1461046b57610173565b80637ecebe001461038357806395d89b41146103a9578063a457c2d7146103b1578063a9059cbb146103dd578063aabaecd614610409578063ade6e2aa1461041157610173565b80633644e515116101305780633644e515146102c757806339509351146102cf57806351b0a410146102fb57806356d878f71461032957806370a08231146103555780637158da7c1461037b57610173565b806306fdde0314610178578063095ea7b3146101f557806317d69bc81461023557806318160ddd1461025957806323b872dd14610273578063313ce567146102a9575b600080fd5b61018061054e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ba5781810151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102216004803603604081101561020b57600080fd5b506001600160a01b0381351690602001356105e5565b604080519115158252519081900360200190f35b61023d610602565b604080516001600160a01b039092168252519081900360200190f35b610261610612565b60408051918252519081900360200190f35b6102216004803603606081101561028957600080fd5b506001600160a01b03813581169160208101359091169060400135610618565b6102b16106a5565b6040805160ff9092168252519081900360200190f35b6102616106ae565b610221600480360360408110156102e557600080fd5b506001600160a01b0381351690602001356106bd565b6103276004803603604081101561031157600080fd5b506001600160a01b038135169060200135610711565b005b6103276004803603604081101561033f57600080fd5b506001600160a01b038135169060200135610768565b6102616004803603602081101561036b57600080fd5b50356001600160a01b03166107bb565b61023d6107da565b6102616004803603602081101561039957600080fd5b50356001600160a01b03166107e9565b610180610810565b610221600480360360408110156103c757600080fd5b506001600160a01b038135169060200135610871565b610221600480360360408110156103f357600080fd5b506001600160a01b0381351690602001356108df565b61023d6108f3565b610261610903565b61042161090a565b604080516001600160a01b039788168152958716602087015293909516848401526060840191909152608083015291151560a082015290519081900360c00190f35b610261610940565b610327600480360360e081101561048157600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610947565b610261600480360360408110156104d257600080fd5b506001600160a01b0381358116916020013516610adf565b610221610b0a565b610327600480360360e081101561050857600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001351515610b14565b61023d610cb4565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105da5780601f106105af576101008083540402835291602001916105da565b820191906000526020600020905b8154815290600101906020018083116105bd57829003601f168201915b505050505090505b90565b60006105f96105f2610cc3565b8484610cc7565b50600192915050565b610100546001600160a01b031681565b60675490565b6000610625848484610db3565b61069b84610631610cc3565b61069685604051806060016040528060288152602001612e6f602891396001600160a01b038a1660009081526066602052604081209061066f610cc3565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610f1c16565b610cc7565b5060019392505050565b606a5460ff1690565b60006106b8610fb3565b905090565b60006105f96106ca610cc3565b8461069685606660006106db610cc3565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610fe616565b60fe546001600160a01b0316331461075a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612df56028913960400191505060405180910390fd5b6107648282611047565b5050565b60fe546001600160a01b031633146107b15760405162461bcd60e51b8152600401808060200182810382526028815260200180612d596028913960400191505060405180910390fd5b6107648282611145565b6001600160a01b0381166000908152606560205260409020545b919050565b60ff546001600160a01b031681565b6001600160a01b038116600090815260cb6020526040812061080a9061124d565b92915050565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105da5780601f106105af576101008083540402835291602001916105da565b60006105f961087e610cc3565b8461069685604051806060016040528060258152602001612f2f60259139606660006108a8610cc3565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610f1c16565b60006105f96108ec610cc3565b8484610db3565b610101546001600160a01b031681565b6101035481565b6101015460ff8054610100546101025461010354610104546001600160a01b039687169794871696909316949193909290911690565b6101025481565b8342111561099c576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc548888886109d160cb60008e6001600160a01b03166001600160a01b0316815260200190815260200160002061124d565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e0909101909152805191012090506000610a2f82611251565b90506000610a3f8287878761129d565b9050896001600160a01b0316816001600160a01b031614610aa7576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb60205260409020610ac890611417565b610ad38a8a8a610cc7565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101045460ff1681565b600054610100900460ff1680610b2d5750610b2d611420565b80610b3b575060005460ff16155b610b765760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015610ba1576000805460ff1961ff0019909116610100171660011790555b876001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bda57600080fd5b505afa158015610bee573d6000803e3d6000fd5b505050506040513d6020811015610c0457600080fd5b505160fe80546001600160a01b03199081166001600160a01b039384161790915560ff805482168a8416179055610100805482168984161790556101018054909116918716919091179055610102849055610103839055610104805460ff1916831515179055606080610c75611426565b91509150610c838282611dd9565b610c8c82611eb2565b610c966008611f88565b50508015610caa576000805461ff00191690555b5050505050505050565b60fe546001600160a01b031681565b3390565b6001600160a01b038316610d0c5760405162461bcd60e51b8152600401808060200182810382526024815260200180612f0b6024913960400191505060405180910390fd5b6001600160a01b038216610d515760405162461bcd60e51b8152600401808060200182810382526022815260200180612cef6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610df85760405162461bcd60e51b8152600401808060200182810382526025815260200180612ee66025913960400191505060405180910390fd5b6001600160a01b038216610e3d5760405162461bcd60e51b8152600401808060200182810382526023815260200180612caa6023913960400191505060405180910390fd5b610e48838383611ead565b610e8b81604051806060016040528060268152602001612d11602691396001600160a01b038616600090815260656020526040902054919063ffffffff610f1c16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610ec0908263ffffffff610fe616565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610fab5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f70578181015183820152602001610f58565b50505050905090810190601f168015610f9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106b86040518080612e1d6052913960520190506040518091039020610fd9611f9e565b610fe1611fa4565b611faa565b600082820183811015611040576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166110a2576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6110ae60008383611ead565b6067546110c1908263ffffffff610fe616565b6067556001600160a01b0382166000908152606560205260409020546110ed908263ffffffff610fe616565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b03821661118a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612ec56021913960400191505060405180910390fd5b61119682600083611ead565b6111d981604051806060016040528060228152602001612ccd602291396001600160a01b038516600090815260656020526040902054919063ffffffff610f1c16565b6001600160a01b038316600090815260656020526040902055606754611205908263ffffffff61200016565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b600061125b610fb3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112fe5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d376022913960400191505060405180910390fd5b8360ff16601b148061131357508360ff16601c145b61134e5760405162461bcd60e51b8152600401808060200182810382526022815260200180612dd36022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa1580156113a6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661140e576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b303b1590565b606080606060ff60009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114b657600080fd5b81019080805160405193929190846401000000008211156114d657600080fd5b9083019060208201858111156114eb57600080fd5b825164010000000081118282018810171561150557600080fd5b82525081516020918201929091019080838360005b8381101561153257818101518382015260200161151a565b50505050905090810190601f16801561155f5780820380516001836020036101000a031916815260200191505b506040818152610100546395d89b4160e01b835290519596506060956001600160a01b0390911694506395d89b41935060048083019350600092829003018186803b1580156115ad57600080fd5b505afa1580156115c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156115ea57600080fd5b810190808051604051939291908464010000000082111561160a57600080fd5b90830190602082018581111561161f57600080fd5b825164010000000081118282018810171561163957600080fd5b82525081516020918201929091019080838360005b8381101561166657818101518382015260200161164e565b50505050905090810190601f1680156116935780820380516001836020036101000a031916815260200191505b506040818152610101546395d89b4160e01b835290519596506060956001600160a01b0390911694506395d89b41935060048083019350600092829003018186803b1580156116e157600080fd5b505afa1580156116f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561171e57600080fd5b810190808051604051939291908464010000000082111561173e57600080fd5b90830190602082018581111561175357600080fd5b825164010000000081118282018810171561176d57600080fd5b82525081516020918201929091019080838360005b8381101561179a578181015183820152602001611782565b50505050905090810190601f1680156117c75780820380516001836020036101000a031916815260200191505b50604052505050905060606117de61010254612042565b905060008060006117f1610103546121b4565b610104549295509093509150606090819061180e9060ff166121d3565b9150915060608061181e8661225c565b915091508a8a61182d876125f4565b836118378b612697565b8c888f6040516020018089805190602001908083835b6020831061186c5780518252601f19909201916020918201910161184d565b51815160209384036101000a60001901801990921691161790528b5191909301928b0191508083835b602083106118b45780518252601f199092019160209182019101611895565b6001836020036101000a03801982511681845116808217855250505050505090500180600160fd1b81525060010187805190602001908083835b6020831061190d5780518252601f1990920191602091820191016118ee565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010186805190602001908083835b602083106119665780518252601f199092019160209182019101611947565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010185805190602001908083835b602083106119bf5780518252601f1990920191602091820191016119a0565b6001836020036101000a03801982511681845116808217855250505050505090500180600160fd1b81525060010184805190602001908083835b60208310611a185780518252601f1990920191602091820191016119f9565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b60208310611a605780518252601f199092019160209182019101611a41565b6001836020036101000a03801982511681845116808217855250505050505090500180600160fd1b81525060010182805190602001908083835b60208310611ab95780518252601f199092019160209182019101611a9a565b6001836020036101000a038019825116818451168082178552505050505050905001806a0810dbdb1b185d195c985b60aa1b815250600b01985050505050505050506040516020818303038152906040529c508a8a8a611b18886125f4565b85611b228c6125f4565b8d8a6040516020018080606f60f81b81525060010189805190602001908083835b60208310611b625780518252601f199092019160209182019101611b43565b51815160209384036101000a60001901801990921691161790528b5191909301928b0191508083835b60208310611baa5780518252601f199092019160209182019101611b8b565b6001836020036101000a03801982511681845116808217855250505050505090500180602f60f81b81525060010187805190602001908083835b60208310611c035780518252601f199092019160209182019101611be4565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010186805190602001908083835b60208310611c5c5780518252601f199092019160209182019101611c3d565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b60208310611ca45780518252601f199092019160209182019101611c85565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b60208310611cec5780518252601f199092019160209182019101611ccd565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010183805190602001908083835b60208310611d455780518252601f199092019160209182019101611d26565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611d8d5780518252601f199092019160209182019101611d6e565b6001836020036101000a038019825116818451168082178552505050505050905001985050505050505050506040516020818303038152906040529b5050505050505050505050509091565b600054610100900460ff1680611df25750611df2611420565b80611e00575060005460ff16155b611e3b5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015611e66576000805460ff1961ff0019909116610100171660011790555b8251611e79906068906020860190612c11565b508151611e8d906069906020850190612c11565b50606a805460ff191660121790558015611ead576000805461ff00191690555b505050565b600054610100900460ff1680611ecb5750611ecb611420565b80611ed9575060005460ff16155b611f145760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015611f3f576000805460ff1961ff0019909116610100171660011790555b611f47612772565b611f6a82604051806040016040528060018152602001603160f81b815250612814565b611f73826128d4565b8015610764576000805461ff00191690555050565b606a805460ff191660ff92909216919091179055565b60975490565b60985490565b6000838383611fb7612991565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b600061104083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f1c565b6060600061205a836305f5e10063ffffffff61299516565b90506000612072846305f5e10063ffffffff6129d716565b9050606061207f82612697565b9050826120905792506107d5915050565b60005b6120a484600a63ffffffff61299516565b6120b657600a84049350600101612093565b80600803600a0a8401935060606120cc85612697565b90506120de8160016009859003612a19565b9050606083826040516020018083805190602001908083835b602083106121165780518252601f1990920191602091820191016120f7565b6001836020036101000a03801982511681845116808217855250505050505090500180601760f91b81525060010182805190602001908083835b6020831061216f5780518252601f199092019160209182019101612150565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050809650505050505050919050565b600080806121c6620151808504612ab4565b9196909550909350915050565b606080821561221b57604051806040016040528060018152602001600560fc1b81525060405180604001604052806003815260200162141d5d60ea1b81525091509150612257565b604051806040016040528060018152602001604360f81b8152506040518060400160405280600481526020016310d85b1b60e21b815250915091505b915091565b60608082600114156122ad57604051806040016040528060038152602001622520a760e91b815250604051806040016040528060078152602001664a616e7561727960c81b81525091509150612257565b82600214156122fc57604051806040016040528060038152602001622322a160e91b81525060405180604001604052806008815260200167466562727561727960c01b81525091509150612257565b8260031415612348576040518060400160405280600381526020016226a0a960e91b8152506040518060400160405280600581526020016409ac2e4c6d60db1b81525091509150612257565b8260041415612394576040518060400160405280600381526020016220a82960e91b81525060405180604001604052806005815260200164105c1c9a5b60da1b81525091509150612257565b82600514156123de57604051806040016040528060038152602001624d415960e81b815250604051806040016040528060038152602001624d617960e81b81525091509150612257565b82600614156124295760405180604001604052806003815260200162252aa760e91b815250604051806040016040528060048152602001634a756e6560e01b81525091509150612257565b8260071415612474576040518060400160405280600381526020016212955360ea1b815250604051806040016040528060048152602001634a756c7960e01b81525091509150612257565b82600814156124c1576040518060400160405280600381526020016241554760e81b81525060405180604001604052806006815260200165105d59dd5cdd60d21b81525091509150612257565b8260091415612511576040518060400160405280600381526020016205345560ec1b8152506040518060400160405280600981526020016829b2b83a32b6b132b960b91b81525091509150612257565b82600a141561255f576040518060400160405280600381526020016213d0d560ea1b8152506040518060400160405280600781526020016627b1ba37b132b960c91b81525091509150612257565b82600b14156125ae57604051806040016040528060038152602001622727ab60e91b815250604051806040016040528060088152602001672737bb32b6b132b960c11b81525091509150612257565b6040518060400160405280600381526020016244454360e81b815250604051806040016040528060088152602001672232b1b2b6b132b960c11b81525091509150612257565b60606063821115612606576064820691505b606061261183612697565b9050600a83101561080a57806040516020018080600360fc1b81525060010182805190602001908083835b6020831061265b5780518252601f19909201916020918201910161263c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040529150506107d5565b6060816126bc57506040805180820190915260018152600360fc1b60208201526107d5565b8160005b81156126d457600101600a820491506126c0565b60608167ffffffffffffffff811180156126ed57600080fd5b506040519080825280601f01601f191660200182016040528015612718576020820181803683370190505b50859350905060001982015b831561276957600a840660300160f81b8282806001900393508151811061274757fe5b60200101906001600160f81b031916908160001a905350600a84049350612724565b50949350505050565b600054610100900460ff168061278b575061278b611420565b80612799575060005460ff16155b6127d45760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff161580156127ff576000805460ff1961ff0019909116610100171660011790555b8015612811576000805461ff00191690555b50565b600054610100900460ff168061282d575061282d611420565b8061283b575060005460ff16155b6128765760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff161580156128a1576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015611ead576000805461ff0019169055505050565b600054610100900460ff16806128ed57506128ed611420565b806128fb575060005460ff16155b6129365760405162461bcd60e51b815260040180806020018281038252602e815260200180612e97602e913960400191505060405180910390fd5b600054610100900460ff16158015612961576000805460ff1961ff0019909116610100171660011790555b604051806052612d81823960405190819003605201902060cc55508015610764576000805461ff00191690555050565b4690565b600061104083836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612b4a565b600061104083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bac565b60608083830367ffffffffffffffff81118015612a3557600080fd5b506040519080825280601f01601f191660200182016040528015612a60576020820181803683370190505b50905060005b848403811015612769578581860181518110612a7e57fe5b602001015160f81c60f81b828281518110612a9557fe5b60200101906001600160f81b031916908160001a905350600101612a66565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612b0b57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008183612b995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f70578181015183820152602001610f58565b50828481612ba357fe5b06949350505050565b60008183612bfb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f70578181015183820152602001610f58565b506000838581612c0757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c5257805160ff1916838001178555612c7f565b82800160010185558215612c7f579182015b82811115612c7f578251825591602001919060010190612c64565b50612c8b929150612c8f565b5090565b6105e291905b80821115612c8b5760008155600101612c9556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75654f746f6b656e3a204f6e6c7920436f6e74726f6c6c65722063616e206275726e204f746f6b656e735065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e652945434453413a20696e76616c6964207369676e6174757265202776272076616c75654f746f6b656e3a204f6e6c7920436f6e74726f6c6c65722063616e206d696e74204f746f6b656e73454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f330f7fb6b3067b1517aa91b625012f17cbe90f5407afbd9cc4d1eeb3938517264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x173 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xAF0968FC GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4BC JUMPI DUP1 PUSH4 0xF3C274A6 EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0xF630DF34 EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0x546 JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0xAF0968FC EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0xC52987CF EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x46B JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3A9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x3B1 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0xAABAECD6 EQ PUSH2 0x409 JUMPI DUP1 PUSH4 0xADE6E2AA EQ PUSH2 0x411 JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x51B0A410 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x56D878F7 EQ PUSH2 0x329 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x7158DA7C EQ PUSH2 0x37B JUMPI PUSH2 0x173 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x17D69BC8 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x273 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2A9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x180 PUSH2 0x54E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1E7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x20B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x23D PUSH2 0x602 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x261 PUSH2 0x612 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x618 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x6A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x261 PUSH2 0x6AE JUMP JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6BD JUMP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x711 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x768 JUMP JUMPDEST PUSH2 0x261 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x23D PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x261 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E9 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x810 JUMP JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x871 JUMP JUMPDEST PUSH2 0x221 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x23D PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x261 PUSH2 0x903 JUMP JUMPDEST PUSH2 0x421 PUSH2 0x90A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 SWAP1 SWAP6 AND DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP4 ADD MSTORE SWAP2 ISZERO ISZERO PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xC0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x261 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x947 JUMP JUMPDEST PUSH2 0x261 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xADF JUMP JUMPDEST PUSH2 0x221 PUSH2 0xB0A JUMP JUMPDEST PUSH2 0x327 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x23D PUSH2 0xCB4 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5AF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DA 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 0x5BD JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x5F2 PUSH2 0xCC3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xCC7 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x100 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x625 DUP5 DUP5 DUP5 PUSH2 0xDB3 JUMP JUMPDEST PUSH2 0x69B DUP5 PUSH2 0x631 PUSH2 0xCC3 JUMP JUMPDEST PUSH2 0x696 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E6F PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x66F PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH2 0xCC7 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B8 PUSH2 0xFB3 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x6CA PUSH2 0xCC3 JUMP JUMPDEST DUP5 PUSH2 0x696 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x6DB PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x75A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2DF5 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0x1047 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2D59 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0x1145 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x80A SWAP1 PUSH2 0x124D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5AF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x87E PUSH2 0xCC3 JUMP JUMPDEST DUP5 PUSH2 0x696 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2F2F PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x8A8 PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F9 PUSH2 0x8EC PUSH2 0xCC3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xDB3 JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x103 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0xFF DUP1 SLOAD PUSH2 0x100 SLOAD PUSH2 0x102 SLOAD PUSH2 0x103 SLOAD PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP5 DUP8 AND SWAP7 SWAP1 SWAP4 AND SWAP5 SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 AND SWAP1 JUMP JUMPDEST PUSH2 0x102 SLOAD DUP2 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x99C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x9D1 PUSH1 0xCB PUSH1 0x0 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 PUSH2 0x124D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xA2F DUP3 PUSH2 0x1251 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA3F DUP3 DUP8 DUP8 DUP8 PUSH2 0x129D JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xAA7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xAC8 SWAP1 PUSH2 0x1417 JUMP JUMPDEST PUSH2 0xAD3 DUP11 DUP11 DUP11 PUSH2 0xCC7 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 PUSH2 0x104 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xB2D JUMPI POP PUSH2 0xB2D PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0xB3B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xB76 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3018205F 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0xFF DUP1 SLOAD DUP3 AND DUP11 DUP5 AND OR SWAP1 SSTORE PUSH2 0x100 DUP1 SLOAD DUP3 AND DUP10 DUP5 AND OR SWAP1 SSTORE PUSH2 0x101 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP8 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x102 DUP5 SWAP1 SSTORE PUSH2 0x103 DUP4 SWAP1 SSTORE PUSH2 0x104 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x60 DUP1 PUSH2 0xC75 PUSH2 0x1426 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xC83 DUP3 DUP3 PUSH2 0x1DD9 JUMP JUMPDEST PUSH2 0xC8C DUP3 PUSH2 0x1EB2 JUMP JUMPDEST PUSH2 0xC96 PUSH1 0x8 PUSH2 0x1F88 JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0xCAA JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xD0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2F0B PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2CEF PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2EE6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2CAA PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE48 DUP4 DUP4 DUP4 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0xE8B DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2D11 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xEC0 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xFAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF70 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF58 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF9D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x2E1D PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0xFD9 PUSH2 0x1F9E JUMP JUMPDEST PUSH2 0xFE1 PUSH2 0x1FA4 JUMP JUMPDEST PUSH2 0x1FAA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1040 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x10A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10AE PUSH1 0x0 DUP4 DUP4 PUSH2 0x1EAD JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x10C1 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x10ED SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFE6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x118A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2EC5 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1196 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0x11D9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2CCD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF1C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0x1205 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2000 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x125B PUSH2 0xFB3 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x12FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2D37 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0x1313 JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x134E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2DD3 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13A6 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 0x140E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x60 PUSH1 0xFF 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 0x95D89B41 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x148D 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 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x14D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x14EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x1505 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1532 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x151A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x155F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH2 0x100 SLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP4 MSTORE SWAP1 MLOAD SWAP6 SWAP7 POP PUSH1 0x60 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP5 POP PUSH4 0x95D89B41 SWAP4 POP PUSH1 0x4 DUP1 DUP4 ADD SWAP4 POP PUSH1 0x0 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15C1 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 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x15EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x160A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x161F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x1639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1666 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x164E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1693 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH2 0x101 SLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP4 MSTORE SWAP1 MLOAD SWAP6 SWAP7 POP PUSH1 0x60 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP5 POP PUSH4 0x95D89B41 SWAP4 POP PUSH1 0x4 DUP1 DUP4 ADD SWAP4 POP PUSH1 0x0 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16F5 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 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x171E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x173E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1753 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x179A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1782 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x17C7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH1 0x60 PUSH2 0x17DE PUSH2 0x102 SLOAD PUSH2 0x2042 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x17F1 PUSH2 0x103 SLOAD PUSH2 0x21B4 JUMP JUMPDEST PUSH2 0x104 SLOAD SWAP3 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x60 SWAP1 DUP2 SWAP1 PUSH2 0x180E SWAP1 PUSH1 0xFF AND PUSH2 0x21D3 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x60 DUP1 PUSH2 0x181E DUP7 PUSH2 0x225C JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP11 DUP11 PUSH2 0x182D DUP8 PUSH2 0x25F4 JUMP JUMPDEST DUP4 PUSH2 0x1837 DUP12 PUSH2 0x2697 JUMP JUMPDEST DUP13 DUP9 DUP16 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x186C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x184D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP12 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP12 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x18B4 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1895 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x1 PUSH1 0xFD SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP8 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x190D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x18EE JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP7 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1966 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1947 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP6 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x19BF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19A0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x1 PUSH1 0xFD SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A18 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19F9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP7 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A60 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x1 PUSH1 0xFD SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AB9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A9A JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH11 0x810DBDB1B185D195C985B PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0xB ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP13 POP DUP11 DUP11 DUP11 PUSH2 0x1B18 DUP9 PUSH2 0x25F4 JUMP JUMPDEST DUP6 PUSH2 0x1B22 DUP13 PUSH2 0x25F4 JUMP JUMPDEST DUP14 DUP11 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH1 0x6F PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1B62 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1B43 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP12 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP12 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1BAA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2F PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP8 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C03 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1BE4 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP7 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C5C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1C3D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP9 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP9 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1CA4 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1C85 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP8 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP8 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1CEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1CCD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x2D PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D45 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D26 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D8D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D6E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1DF2 JUMPI POP PUSH2 0x1DF2 PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x1E00 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1E3B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1E66 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH2 0x1E79 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C11 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1E8D SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x2C11 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1EAD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1ECB JUMPI POP PUSH2 0x1ECB PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x1ED9 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1F14 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1F3F JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x1F47 PUSH2 0x2772 JUMP JUMPDEST PUSH2 0x1F6A DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH2 0x2814 JUMP JUMPDEST PUSH2 0x1F73 DUP3 PUSH2 0x28D4 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x764 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x1FB7 PUSH2 0x2991 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1040 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xF1C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x205A DUP4 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x2995 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2072 DUP5 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x29D7 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x207F DUP3 PUSH2 0x2697 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x2090 JUMPI SWAP3 POP PUSH2 0x7D5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x20A4 DUP5 PUSH1 0xA PUSH4 0xFFFFFFFF PUSH2 0x2995 AND JUMP JUMPDEST PUSH2 0x20B6 JUMPI PUSH1 0xA DUP5 DIV SWAP4 POP PUSH1 0x1 ADD PUSH2 0x2093 JUMP JUMPDEST DUP1 PUSH1 0x8 SUB PUSH1 0xA EXP DUP5 ADD SWAP4 POP PUSH1 0x60 PUSH2 0x20CC DUP6 PUSH2 0x2697 JUMP JUMPDEST SWAP1 POP PUSH2 0x20DE DUP2 PUSH1 0x1 PUSH1 0x9 DUP6 SWAP1 SUB PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP4 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2116 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x20F7 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP1 PUSH1 0x17 PUSH1 0xF9 SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x216F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP DUP1 SWAP7 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x21C6 PUSH3 0x15180 DUP6 DIV PUSH2 0x2AB4 JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 ISZERO PUSH2 0x221B JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 PUSH1 0xFC SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x141D5D PUSH1 0xEA SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x43 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x10D85B1B PUSH1 0xE2 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP JUMPDEST SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 PUSH1 0x1 EQ ISZERO PUSH2 0x22AD JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2520A7 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x4A616E75617279 PUSH1 0xC8 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x2 EQ ISZERO PUSH2 0x22FC JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2322A1 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x4665627275617279 PUSH1 0xC0 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x3 EQ ISZERO PUSH2 0x2348 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x26A0A9 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x9AC2E4C6D PUSH1 0xDB SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x4 EQ ISZERO PUSH2 0x2394 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x20A829 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x105C1C9A5B PUSH1 0xDA SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x5 EQ ISZERO PUSH2 0x23DE JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x4D4159 PUSH1 0xE8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x4D6179 PUSH1 0xE8 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x6 EQ ISZERO PUSH2 0x2429 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x252AA7 PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x4A756E65 PUSH1 0xE0 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x7 EQ ISZERO PUSH2 0x2474 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x129553 PUSH1 0xEA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x4A756C79 PUSH1 0xE0 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x8 EQ ISZERO PUSH2 0x24C1 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x415547 PUSH1 0xE8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x105D59DD5CDD PUSH1 0xD2 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0x9 EQ ISZERO PUSH2 0x2511 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x53455 PUSH1 0xEC SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x9 DUP2 MSTORE PUSH1 0x20 ADD PUSH9 0x29B2B83A32B6B132B9 PUSH1 0xB9 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0xA EQ ISZERO PUSH2 0x255F JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x13D0D5 PUSH1 0xEA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x27B1BA37B132B9 PUSH1 0xC9 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST DUP3 PUSH1 0xB EQ ISZERO PUSH2 0x25AE JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2727AB PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x2737BB32B6B132B9 PUSH1 0xC1 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x444543 PUSH1 0xE8 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x2232B1B2B6B132B9 PUSH1 0xC1 SHL DUP2 MSTORE POP SWAP2 POP SWAP2 POP PUSH2 0x2257 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x63 DUP3 GT ISZERO PUSH2 0x2606 JUMPI PUSH1 0x64 DUP3 MOD SWAP2 POP JUMPDEST PUSH1 0x60 PUSH2 0x2611 DUP4 PUSH2 0x2697 JUMP JUMPDEST SWAP1 POP PUSH1 0xA DUP4 LT ISZERO PUSH2 0x80A JUMPI DUP1 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH1 0x3 PUSH1 0xFC SHL DUP2 MSTORE POP PUSH1 0x1 ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x265B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x263C JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0x26BC JUMPI POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x3 PUSH1 0xFC SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x7D5 JUMP JUMPDEST DUP2 PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0x26D4 JUMPI PUSH1 0x1 ADD PUSH1 0xA DUP3 DIV SWAP2 POP PUSH2 0x26C0 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x26ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2718 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP6 SWAP4 POP SWAP1 POP PUSH1 0x0 NOT DUP3 ADD JUMPDEST DUP4 ISZERO PUSH2 0x2769 JUMPI PUSH1 0xA DUP5 MOD PUSH1 0x30 ADD PUSH1 0xF8 SHL DUP3 DUP3 DUP1 PUSH1 0x1 SWAP1 SUB SWAP4 POP DUP2 MLOAD DUP2 LT PUSH2 0x2747 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0xA DUP5 DIV SWAP4 POP PUSH2 0x2724 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x278B JUMPI POP PUSH2 0x278B PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x2799 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x27D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x27FF JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x2811 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x282D JUMPI POP PUSH2 0x282D PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x283B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2876 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x28A1 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH2 0x1EAD JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x28ED JUMPI POP PUSH2 0x28ED PUSH2 0x1420 JUMP JUMPDEST DUP1 PUSH2 0x28FB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2936 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E97 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2961 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH2 0x2D81 DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH2 0x764 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1040 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0x2B4A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1040 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x2BAC JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 DUP4 SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2A35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A60 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP5 SUB DUP2 LT ISZERO PUSH2 0x2769 JUMPI DUP6 DUP2 DUP7 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2A7E JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2A95 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x2A66 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP4 PUSH3 0x264965 DUP2 ADD DUP3 PUSH3 0x23AB1 PUSH1 0x4 DUP4 MUL SDIV SWAP1 POP PUSH1 0x4 PUSH1 0x3 PUSH3 0x23AB1 DUP4 MUL ADD SDIV SWAP1 SWAP2 SUB SWAP1 PUSH1 0x0 PUSH3 0x164B09 PUSH2 0xFA0 PUSH1 0x1 DUP6 ADD MUL SDIV SWAP1 POP PUSH1 0x4 PUSH2 0x5B5 DUP3 MUL SDIV DUP4 SUB PUSH1 0x1F ADD SWAP3 POP PUSH1 0x0 PUSH2 0x98F DUP5 PUSH1 0x50 MUL DUP2 PUSH2 0x2B0B JUMPI INVALID JUMPDEST SDIV SWAP1 POP PUSH1 0x0 PUSH1 0x50 PUSH2 0x98F DUP4 MUL SDIV DUP6 SUB SWAP1 POP PUSH1 0xB DUP3 SDIV PUSH1 0x30 NOT SWAP5 SWAP1 SWAP5 ADD PUSH1 0x64 MUL SWAP3 SWAP1 SWAP3 ADD DUP4 ADD SWAP10 PUSH1 0x2 PUSH1 0xC SWAP1 SWAP5 MUL SWAP1 SWAP2 SUB SWAP3 SWAP1 SWAP3 ADD SWAP8 POP SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2B99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xF70 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF58 JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0x2BA3 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2BFB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xF70 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF58 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2C07 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2C52 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2C7F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2C7F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2C7F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2C64 JUMP JUMPDEST POP PUSH2 0x2C8B SWAP3 SWAP2 POP PUSH2 0x2C8F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x5E2 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2C8B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C95 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 0x4F PUSH21 0x6F6B656E3A204F6E6C7920436F6E74726F6C6C6572 KECCAK256 PUSH4 0x616E2062 PUSH22 0x726E204F746F6B656E735065726D6974286164647265 PUSH20 0x73206F776E65722C61646472657373207370656E PUSH5 0x65722C7569 PUSH15 0x743235362076616C75652C75696E74 ORIGIN CALLDATALOAD CALLDATASIZE KECCAK256 PUSH15 0x6F6E63652C75696E74323536206465 PUSH2 0x646C PUSH10 0x6E652945434453413A20 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202776272076616C7565 0x4F PUSH21 0x6F6B656E3A204F6E6C7920436F6E74726F6C6C6572 KECCAK256 PUSH4 0x616E206D PUSH10 0x6E74204F746F6B656E73 GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E6365436F6E74726163742069 PUSH15 0x7374616E63652068617320616C7265 PUSH2 0x6479 KECCAK256 PUSH3 0x65656E KECCAK256 PUSH10 0x6E697469616C697A6564 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220F330 0xF7 0xFB PUSH12 0x3067B1517AA91B625012F17C 0xBE SWAP1 CREATE2 BLOCKHASH PUSH27 0xFBD9CC4D1EEB3938517264736F6C634300060A0033000000000000 ",
+ "sourceMap": "679:9313:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;956:26:5;;;:::i;:::-;;;;-1:-1:-1;;;;;956:26:5;;;;;;;;;;;;;;3582:98:54;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2983:113:65;;;:::i;5996:215:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;3397:188:5:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3397:188:5;;;;;;;;:::i;:::-;;3838;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3838:188:5;;;;;;;;:::i;3738:117:54:-;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;857:30:5:-;;;:::i;2741:118:65:-;;;;;;;;;;;;;;;;-1:-1:-1;2741:118:65;-1:-1:-1;;;;;2741:118:65;;:::i;2733:85:54:-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;1068:30:5:-;;;:::i;1269:::-;;;:::i;2828:320::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2828:320:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1152:26;;;:::i;1920:760:65:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1920:760:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4288:149:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;1367:17:5:-;;;:::i;2054:768::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2054:768:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;776:25::-;;;:::i;2539:81:54:-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;956:26:5:-;;;-1:-1:-1;;;;;956:26:5;;:::o;3582:98:54:-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;2983:113:65:-;3043:7;3069:20;:18;:20::i;:::-;3062:27;;2983:113;:::o;5996:215:54:-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;3397:188:5:-;3491:10;;-1:-1:-1;;;;;3491:10:5;3477;:24;3469:77;;;;-1:-1:-1;;;3469:77:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3556:22;3562:7;3571:6;3556:5;:22::i;:::-;3397:188;;:::o;3838:::-;3932:10;;-1:-1:-1;;;;;3932:10:5;3918;:24;3910:77;;;;-1:-1:-1;;;3910:77:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3997:22;4003:7;4012:6;3997:5;:22::i;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;;3804:7;3830:18;;;:9;:18;;;;;;3738:117;;;;:::o;857:30:5:-;;;-1:-1:-1;;;;;857:30:5;;:::o;2741:118:65:-;-1:-1:-1;;;;;2828:14:65;;2802:7;2828:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;2821:31;2741:118;-1:-1:-1;;2741:118:65:o;2733:85:54:-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;1068:30:5:-;;;-1:-1:-1;;;;;1068:30:5;;:::o;1269:::-;;;;:::o;2828:320::-;3058:15;;3075;;;3058;3092:11;3105;;3118:15;;3135:5;;-1:-1:-1;;;;;3058:15:5;;;;3075;;;;3092:11;;;;3105;;3118:15;;3135:5;;;;2828:320::o;1152:26::-;;;;:::o;1920:760:65:-;2210:8;2191:15;:27;;2183:69;;;;;-1:-1:-1;;;2183:69:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:18;2318:16;;2336:5;2343:7;2352:6;2360:24;:7;:14;2368:5;-1:-1:-1;;;;;2360:14:65;-1:-1:-1;;;;;2360:14:65;;;;;;;;;;;;:22;:24::i;:::-;2307:88;;;;;;;;;;;-1:-1:-1;;;;;2307:88:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2284:121;;;;;;-1:-1:-1;;2431:28:65;2284:121;2431:16;:28::i;:::-;2416:43;;2470:14;2487:39;2512:4;2518:1;2521;2524;2487:24;:39::i;:::-;2470:56;;2554:5;-1:-1:-1;;;;;2544:15:65;:6;-1:-1:-1;;;;;2544:15:65;;2536:58;;;;;-1:-1:-1;;;2536:58:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2605:14:65;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;2641:32;2650:5;2657:7;2666:6;2641:8;:32::i;:::-;1920:760;;;;;;;;;;:::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;1367:17:5:-;;;;;;:::o;2054:768::-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2352:12:5::1;-1:-1:-1::0;;;;;2331:48:5::1;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;2331:50:5;2318:10:::1;:63:::0;;-1:-1:-1;;;;;;2318:63:5;;::::1;-1:-1:-1::0;;;;;2318:63:5;;::::1;;::::0;;;2391:15:::1;:34:::0;;;::::1;::::0;;::::1;;::::0;;2318:63:::1;2435:26:::0;;;::::1;::::0;;::::1;;::::0;;2471:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;2515:11:::1;:26:::0;;;2551:15:::1;:34:::0;;;2595:5:::1;:14:::0;;-1:-1:-1;;2595:14:5::1;::::0;::::1;;;::::0;;2620:23:::1;::::0;2674:19:::1;:17;:19::i;:::-;2619:74;;;;2703:46;2726:9;2737:11;2703:22;:46::i;:::-;2759:29;2778:9;2759:18;:29::i;:::-;2798:17;2813:1;2798:14;:17::i;:::-;1410:1:57;;1426:14:::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2054:768:5;;;;;;;;:::o;776:25::-;;;-1:-1:-1;;;;;776:25:5;;:::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;2713:160:64:-;2766:7;2792:74;1476:95;;;;;;;;;;;;;;;;;;;2826:17;:15;:17::i;:::-;2845:20;:18;:20::i;:::-;2792:21;:74::i;938:176:67:-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;9005:410::-;-1:-1:-1;;;;;9088:21:54;;9080:67;;;;-1:-1:-1;;;9080:67:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9158:49;9179:7;9196:1;9200:6;9158:20;:49::i;:::-;9239:68;9262:6;9239:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9239:18:54;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;9218:18:54;;;;;;:9;:18;;;;;:89;9332:12;;:24;;9349:6;9332:24;:16;:24;:::i;:::-;9317:12;:39;9371:37;;;;;;;;9397:1;;-1:-1:-1;;;;;9371:37:54;;;;;;;;;;;;9005:410;;:::o;1184:112:68:-;1275:14;;1184:112::o;3745:175:64:-;3814:7;3879:20;:18;:20::i;:::-;3901:10;3850:62;;;;;;-1:-1:-1;;;3850:62:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3840:73;;;;;;3833:80;;3745:175;;;:::o;2015:1486:63:-;2138:7;3066:66;3052:80;;;3031:161;;;;-1:-1:-1;;;3031:161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3210:1;:7;;3215:2;3210:7;:18;;;;3221:1;:7;;3226:2;3221:7;3210:18;3202:65;;;;-1:-1:-1;;;3202:65:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3379:24;;;3362:14;3379:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3362:14;;3379:24;;;;;;;-1:-1:-1;;3379:24:63;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3379:24:63;;-1:-1:-1;;3379:24:63;;;-1:-1:-1;;;;;;;3421:20:63;;3413:57;;;;;-1:-1:-1;;;3413:57:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;3488:6;2015:1486;-1:-1:-1;;;;;2015:1486:63:o;1302:178:68:-;1454:19;;1472:1;1454:19;;;1302:178::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;:::o;4332:1852:5:-;4384:23;4409:25;4446:24;4490:15;;;;;;;;;-1:-1:-1;;;;;4490:15:5;-1:-1:-1;;;;;4473:40:5;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4473:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4473:42:5;;;;;;;;;;-1:-1:-1;4473:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4473:42:5;;;;4565:11;;-1:-1:-1;;;4548:38:5;;;;4446:69;;-1:-1:-1;4525:20:5;;-1:-1:-1;;;;;4565:11:5;;;;-1:-1:-1;4548:36:5;;-1:-1:-1;4548:38:5;;;;;-1:-1:-1;4565:11:5;;4548:38;;;;;4565:11;4548:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4548:38:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4548:38:5;;;;;;;;;;-1:-1:-1;4548:38:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4548:38:5;;;;4640:15;;-1:-1:-1;;;4623:42:5;;;;4525:61;;-1:-1:-1;4596:24:5;;-1:-1:-1;;;;;4640:15:5;;;;-1:-1:-1;4623:40:5;;-1:-1:-1;4623:42:5;;;;;-1:-1:-1;4640:15:5;;4623:42;;;;;4640:15;4623:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4623:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4623:42:5;;;;;;;;;;-1:-1:-1;4623:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4596:69;;4675:32;4710:37;4735:11;;4710:24;:37::i;:::-;4675:72;;4806:12;4820:13;4835:11;4850:60;4894:15;;4850:43;:60::i;:::-;5023:5;;4805:105;;-1:-1:-1;4805:105:5;;-1:-1:-1;4805:105:5;-1:-1:-1;4956:24:5;;;;5008:21;;5023:5;;5008:14;:21::i;:::-;4955:74;;;;5075:25;5102:23;5129:16;5139:5;5129:9;:16::i;:::-;5074:71;;;;5309:10;5337:6;5382:18;5396:3;5382:13;:18::i;:::-;5439:9;5487:22;5504:4;5487:16;:22::i;:::-;5548:18;5584:8;5631:10;5275:411;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5275:411:5;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5275:411:5;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5275:411:5;;;;;;;;;;;;;;;;;;;;;;;;;;;5243:453;;5862:10;5890:6;5935:10;5984:18;5998:3;5984:13;:18::i;:::-;6020:11;6049:19;6063:4;6049:13;:19::i;:::-;6107:18;6143:10;5807:360;;;;;;-1:-1:-1;;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:360:5;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:360:5;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:360:5;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:360:5;;;;;;;;;;;;;-1:-1:-1;;5807:360:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5773:404;;4332:1852;;;;;;;;;;;;;:::o;2296:178:54:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;1421:200:65:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1500:26:65::1;:24;:26::i;:::-;1536:34;1560:4;1536:34;;;;;;;;;;;;;-1:-1:-1::0;;;1536:34:65::1;;::::0;:23:::1;:34::i;:::-;1580;1609:4;1580:28;:34::i;:::-;1426:14:57::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1421:200:65;;:::o;10531:88:54:-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;4482:103:64:-;4566:12;;4482:103;:::o;4824:109::-;4911:15;;4824:109;:::o;2879:241::-;3011:7;3058:8;3068:4;3074:7;3083:13;:11;:13::i;:::-;3047:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3106:4;3047:65;;;;;;;;;;;;;;;;;;;;;;;;3037:76;;;;;;2879:241;-1:-1:-1;;;;2879:241:64:o;1385:134:67:-;1443:7;1469:43;1473:1;1476;1469:43;;;;;;;;;;;;;;;;;:3;:43::i;6374:877:5:-;6453:13;6478:17;6498:36;:12;1437:3;6498:36;:16;:36;:::i;:::-;6478:56;-1:-1:-1;6544:16:5;6563:36;:12;1437:3;6563:36;:16;:36;:::i;:::-;6544:55;;6609:25;6637:26;6654:8;6637:16;:26::i;:::-;6609:54;-1:-1:-1;6678:14:5;6674:38;;6701:11;-1:-1:-1;6694:18:5;;-1:-1:-1;;6694:18:5;6674:38;6723:22;6755:115;6762:17;:9;6776:2;6762:17;:13;:17;:::i;:::-;6755:115;;6824:2;6812:9;:14;;-1:-1:-1;6858:1:5;6840:19;6755:115;;;6973:14;1493:1;6951:36;6946:2;:42;6933:55;;;;6999:20;7022:27;7039:9;7022:16;:27::i;:::-;6999:50;-1:-1:-1;7068:59:5;6999:50;7083:1;7086:23;:40;;;7068:6;:59::i;:::-;7059:68;;7138:25;7190:11;7208:6;7173:42;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7173:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7173:42:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7173:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7138:78;;7233:11;7226:18;;;;;;;;6374:877;;;:::o;2605:261:43:-;2709:12;;;2819:40;1056:12;2831:9;:27;2819:11;:40::i;:::-;2798:61;;;;-1:-1:-1;2798:61:43;;-1:-1:-1;2605:261:43;-1:-1:-1;;2605:261:43:o;8006:236:5:-;8066:25;8093:24;8133:6;8129:107;;;8155:19;;;;;;;;;;;;;-1:-1:-1;;;8155:19:5;;;;;;;;;;;;;;;;-1:-1:-1;;;8155:19:5;;;;;;;;;8129:107;8205:20;;;;;;;;;;;;;-1:-1:-1;;;8205:20:5;;;;;;;;;;;;;;;;-1:-1:-1;;;8205:20:5;;;;;;;8129:107;8006:236;;;:::o;9018:972::-;9076:25;9103:24;9143:6;9153:1;9143:11;9139:845;;;9170:25;;;;;;;;;;;;;-1:-1:-1;;;9170:25:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9170:25:5;;;;;;;;;9139:845;9216:6;9226:1;9216:11;9212:772;;;9243:26;;;;;;;;;;;;;-1:-1:-1;;;9243:26:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9243:26:5;;;;;;;;;9212:772;9290:6;9300:1;9290:11;9286:698;;;9317:23;;;;;;;;;;;;;-1:-1:-1;;;9317:23:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9317:23:5;;;;;;;;;9286:698;9361:6;9371:1;9361:11;9357:627;;;9388:23;;;;;;;;;;;;;-1:-1:-1;;;9388:23:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9388:23:5;;;;;;;;;9357:627;9432:6;9442:1;9432:11;9428:556;;;9459:21;;;;;;;;;;;;;-1:-1:-1;;;9459:21:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9459:21:5;;;;;;;;;9428:556;9501:6;9511:1;9501:11;9497:487;;;9528:22;;;;;;;;;;;;;-1:-1:-1;;;9528:22:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9528:22:5;;;;;;;;;9497:487;9571:6;9581:1;9571:11;9567:417;;;9598:22;;;;;;;;;;;;;-1:-1:-1;;;9598:22:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9598:22:5;;;;;;;;;9567:417;9641:6;9651:1;9641:11;9637:347;;;9668:24;;;;;;;;;;;;;-1:-1:-1;;;9668:24:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9668:24:5;;;;;;;;;9637:347;9713:6;9723:1;9713:11;9709:275;;;9740:27;;;;;;;;;;;;;-1:-1:-1;;;9740:27:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9740:27:5;;;;;;;;;9709:275;9788:6;9798:2;9788:12;9784:200;;;9816:25;;;;;;;;;;;;;-1:-1:-1;;;9816:25:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9816:25:5;;;;;;;;;9784:200;9862:6;9872:2;9862:12;9858:126;;;9890:26;;;;;;;;;;;;;-1:-1:-1;;;9890:26:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9890:26:5;;;;;;;;;9858:126;9947:26;;;;;;;;;;;;;-1:-1:-1;;;9947:26:5;;;;;;;;;;;;;;;;-1:-1:-1;;;9947:26:5;;;;;;;;;7474:298;7536:13;7574:2;7565:6;:11;7561:38;;;7596:3;7587:6;:12;7578:21;;7561:38;7609:17;7629:24;7646:6;7629:16;:24::i;:::-;7609:44;;7676:2;7667:6;:11;7663:83;;;7730:3;7708:26;;;;;;-1:-1:-1;;;7708:26:5;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7708:26:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7694:41;;;;;258:727:53;314:13;531:10;527:51;;-1:-1:-1;557:10:53;;;;;;;;;;;;-1:-1:-1;;;557:10:53;;;;;;527:51;602:5;587:12;641:75;648:9;;641:75;;673:8;;703:2;695:10;;;;641:75;;;725:19;757:6;747:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;747:17:53;-1:-1:-1;817:5:53;;-1:-1:-1;725:39:53;-1:-1:-1;;;790:10:53;;832:116;839:9;;832:116;;908:2;901:4;:9;895:2;:16;882:31;;864:6;871:7;;;;;;;864:15;;;;;;;;;;;:49;-1:-1:-1;;;;;864:49:53;;;;;;;;-1:-1:-1;935:2:53;927:10;;;;832:116;;;-1:-1:-1;971:6:53;258:727;-1:-1:-1;;;;258:727:53:o;799:59:55:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1426:14;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;799:59:55;:::o;2335:292:64:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2463:22:64;;::::1;::::0;;::::1;::::0;;;;2519:25;;;;::::1;::::0;;;;2554:12:::1;:25:::0;;;;2589:15:::1;:31:::0;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;2335:292:64;;;:::o;1627:232:65:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1735:117:65::1;::::0;;::::1;;::::0;::::1;;::::0;;;;;::::1;::::0;;;1716:16:::1;:136:::0;-1:-1:-1;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1627:232:65;;:::o;3926:320:64:-;4221:9;;4196:44::o;4560:128:67:-;4618:7;4644:37;4648:1;4651;4644:37;;;;;;;;;;;;;;;;;:3;:37::i;3195:130::-;3253:7;3279:39;3283:1;3286;3279:39;;;;;;;;;;;;;;;;;:3;:39::i;8446:322:5:-;8563:13;8588:14;8622:6;8615:4;:13;8605:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8605:24:5;-1:-1:-1;8588:41:5;-1:-1:-1;8644:9:5;8639:97;8670:6;8663:4;:13;8659:1;:17;8639:97;;;8710:2;8723:1;8714:6;:10;8704:21;;;;;;;;;;;;;;;;8697:1;8699;8697:4;;;;;;;;;;;:28;-1:-1:-1;;;;;8697:28:5;;;;;;;;-1:-1:-1;8678:3:5;;8639:97;;1868:731:43;1964:12;;;2076:5;2104:31;;;1964:12;2166:6;2157:1;:5;;2156:16;;-1:-1:-1;2209:1:43;2204;2191:6;:10;;:14;2190:20;2186:24;;;;2220:12;2254:7;2236:4;2248:1;2244:5;;2236:14;2235:26;;-1:-1:-1;2296:1:43;2280:4;:12;;2279:18;2275:1;:22;2300:2;2275:27;2271:31;;2312:13;2339:4;2334:1;2329:2;:6;2328:15;;;;;;;-1:-1:-1;2353:11:43;2389:2;2372:4;:13;;2371:20;2367:24;;;-1:-1:-1;2414:2:43;2405:6;:11;-1:-1:-1;;2479:6:43;;;;2472:3;:14;:22;;;;:26;;;2444:1;2448:2;:6;;;2435:19;;;;;;;;-1:-1:-1;2405:11:43;-1:-1:-1;2472:26:43;-1:-1:-1;;;;1868:731:43:o;5159:193:67:-;5275:7;5310:12;5302:6;5294:29;;;;-1:-1:-1;;;5294:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5344:1;5340;:5;;;;;;;5159:193;-1:-1:-1;;;;5159:193:67:o;3807:302::-;3923:7;3957:12;3950:5;3942:28;;;;-1:-1:-1;;;3942:28:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3980:9;3996:1;3992;:5;;;;;;;3807:302;-1:-1:-1;;;;;3807:302:67:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ },
+ "methodIdentifiers": {
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "burnOtoken(address,uint256)": "56d878f7",
+ "collateralAsset()": "aabaecd6",
+ "controller()": "f77c4791",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "expiryTimestamp()": "ade6e2aa",
+ "getOtokenDetails()": "af0968fc",
+ "increaseAllowance(address,uint256)": "39509351",
+ "init(address,address,address,address,uint256,uint256,bool)": "f630df34",
+ "isPut()": "f3c274a6",
+ "mintOtoken(address,uint256)": "51b0a410",
+ "name()": "06fdde03",
+ "nonces(address)": "7ecebe00",
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
+ "strikeAsset()": "17d69bc8",
+ "strikePrice()": "c52987cf",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd",
+ "underlyingAsset()": "7158da7c"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controller\",\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expiryTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenDetails\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPut\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"amount\",\"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\":[],\"name\":\"strikeAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strikePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"details\":\"The Otoken inherits ERC20Upgradeable because we need to use the init instead of constructor\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burnOtoken(address,uint256)\":{\"details\":\"Controller only method where access control is taken care of by _beforeTokenTransfer hook\",\"params\":{\"account\":\"account to burn token from\",\"amount\":\"amount to burn\"}},\"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 {_setupDecimals} is called. 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.\"},\"init(address,address,address,address,uint256,uint256,bool)\":{\"params\":{\"_addressBook\":\"addressbook module\",\"_collateralAsset\":\"asset that is held as collateral against short/written options\",\"_expiryTimestamp\":\"expiration timestamp of the option, represented as a unix timestamp\",\"_isPut\":\"True if a put option, False if a call option\",\"_strikeAsset\":\"asset that the strike price is denominated in\",\"_strikePrice\":\"strike price with decimals = 8\",\"_underlyingAsset\":\"asset that the option references\"}},\"mintOtoken(address,uint256)\":{\"details\":\"Controller only method where access control is taken care of by _beforeTokenTransfer hook\",\"params\":{\"account\":\"account to mint token to\",\"amount\":\"amount to mint\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"title\":\"Otoken\"},\"userdoc\":{\"methods\":{\"burnOtoken(address,uint256)\":{\"notice\":\"burn oToken from an account.\"},\"collateralAsset()\":{\"notice\":\"asset that is held as collateral against short/written options\"},\"controller()\":{\"notice\":\"address of the Controller module\"},\"expiryTimestamp()\":{\"notice\":\"expiration timestamp of the option, represented as a unix timestamp\"},\"init(address,address,address,address,uint256,uint256,bool)\":{\"notice\":\"initialize the oToken\"},\"isPut()\":{\"notice\":\"True if a put option, False if a call option\"},\"mintOtoken(address,uint256)\":{\"notice\":\"mint oToken for an account\"},\"strikeAsset()\":{\"notice\":\"asset that the strike price is denominated in\"},\"strikePrice()\":{\"notice\":\"strike price with decimals = 8\"},\"underlyingAsset()\":{\"notice\":\"asset that the option references\"}},\"notice\":\"Otoken is the ERC20 token for an option\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/Otoken.sol\":\"Otoken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/Otoken.sol\":{\"keccak256\":\"0x9f1eb437f81145fb3de2357421b58a823faef1120e2bb541abe7148f51eac0ba\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://eb1c12f82e020a238b070bcea240f9486a5cffc7c37df648ebe0dc1d4fae2196\",\"dweb:/ipfs/QmWyejkSUMokcFqbYFhq1tbALtGAskDpvGXDpyXYze34e6\"]},\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/packages/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x793c89a6091818287e000f216409bd58fe905ea0dd2f77ae74ed2122a5b365c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2745489c94a244aa74824c3119bdc5c3a216999f7314a0c8b796797031f64558\",\"dweb:/ipfs/QmPcKgVAYE1ZCyUUvsSTd3FTyVg7hWSaRrxXLfRoHavHfr\"]},\"contracts/packages/oz/Strings.sol\":{\"keccak256\":\"0x6aafb5c8d36a99cde85066ec8d5531006e1e0d5e2916a2e236f16d61c5e20a12\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85f1e98a4c53edca7c4d24edb10b82697b612cfcf825da5297c5a90957ce66de\",\"dweb:/ipfs/QmbKgfs9NrD4A3aRXATkeYiX93Esurt5yUfSU74Pa71a4Q\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0x089264e9f61815e40a3acf85cb1077e81be8aab6728bd423cf52714e1fbf05cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6e77372ba9c9604248fb33b0e23f1d6969ad60aeaa0e8f6aa94570802a73cc7\",\"dweb:/ipfs/QmTtgkYETk9ZNXRsHZJscsEJUXPsckNfZDkfVXjzCHrLE5\"]},\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":{\"keccak256\":\"0x272ded2b13c715a655b575e51a04aa0d1d8205603bed6c8825e99b78b94b40bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e88cc43e187de68a698561c5fc6bbe50a2847c3fe3a15571413b5f5f9779400a\",\"dweb:/ipfs/QmYRcBveKTjqrrPpbfgpZwcCQay2mN2Pww5pvCUpniS54F\"]},\"contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xb3a655c9ab3da27ebe99ef47b4b95f699fa02b99c8911aa1f32c906e48e429fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adbdc052be7e3fe0350a8e634f4cd9114386ec25411c3b8425fad5e4501f7cae\",\"dweb:/ipfs/QmbbWNivd3woPq1rDgJYxiL7mVBT9auABvkrechyJ1JjDt\"]},\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]},\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0xf959d721bc9136a6e59e82953c1c5024996dfd00a68a17d37f7fc42651d855b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://25bdcbfdac49598b552c67be6b89dc87a46ac177330da3b0c4854ea31019da1e\",\"dweb:/ipfs/QmaWctiuA3r1iejQ2JBCbkip4NEUq9zQ4CHXZuFYRsyCRP\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/OtokenFactory.sol": {
+ "OtokenFactory": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "tokenAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "creator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "underlying",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "strike",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "strikePrice",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "OtokenCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "createOtoken",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getOtoken",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokensLength",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getTargetOtokenAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "otokens",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506040516112683803806112688339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b0319909216919091179055611203806100656000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063115470541461006757806346e63dc4146100cd578063b86b9a64146100e7578063c097463014610131578063de0120de1461017b578063f5887cdd14610198575b600080fd5b6100b1600480360360c081101561007d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013515156101a0565b604080516001600160a01b039092168252519081900360200190f35b6100d56101d5565b60408051918252519081900360200190f35b6100b1600480360360c08110156100fd57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013515156101db565b6100b1600480360360c081101561014757600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013515156102db565b6100b16004803603602081101561019157600080fd5b503561081d565b6100b1610844565b6000806101b1888888888888610853565b6000908152600260205260409020546001600160a01b031698975050505050505050565b60015490565b600080546040805163a8de41d560e01b8152905183926001600160a01b03169163a8de41d5916004808301926020929190829003018186803b15801561022057600080fd5b505afa158015610234573d6000803e3d6000fd5b505050506040513d602081101561024a57600080fd5b5051600054604080516001600160a01b0392831660248201528b831660448201528a83166064820152918916608483015260a4820188905260c4820187905285151560e4808401919091528151808403909101815261010490920190526020810180516001600160e01b0316633d8c37cd60e21b1790529091506102ce82826108bb565b9998505050505050505050565b600042831161031b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806110e8602a913960400191505060405180910390fd5b6402c33b9c80831061035e5760405162461bcd60e51b815260040180806020018281038252603b815260200180611166603b913960400191505060405180910390fd5b610383620151806103778561708063ffffffff610a4716565b9063ffffffff610a9016565b156103bf5760405162461bcd60e51b815260040180806020018281038252602d8152602001806111a1602d913960400191505060405180910390fd5b60006103cf888888888888610853565b6000818152600260205260409020549091506001600160a01b0316156104265760405162461bcd60e51b81526004018080602001828103825260258152602001806110c36025913960400191505060405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663d01f63f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561047557600080fd5b505afa158015610489573d6000803e3d6000fd5b505050506040513d602081101561049f57600080fd5b50516040805163401a83cf60e01b81526001600160a01b038c811660048301528b811660248301528a81166044830152871515606483015291519293509083169163401a83cf91608480820192602092909190829003018186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d602081101561053057600080fd5b505161056d5760405162461bcd60e51b81526004018080602001828103825260228152602001806111126022913960400191505060405180910390fd5b83158061057a5750600086115b6105b55760405162461bcd60e51b81526004018080602001828103825260328152602001806111346032913960400191505060405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663a8de41d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561060457600080fd5b505afa158015610618573d6000803e3d6000fd5b505050506040513d602081101561062e57600080fd5b505160008054604080516001600160a01b0392831660248201528e831660448201528d83166064820152918c16608483015260a482018b905260c482018a905288151560e4808401919091528151808403909101815261010490920190526020810180516001600160e01b0316633d8c37cd60e21b1790529192506106b38383610ad2565b60008681526002602052604080822080546001600160a01b038086166001600160a01b031992831681179093556001805480820182559086527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180549092168317909155825163763893db60e11b8152600481019290925291519394509087169263ec7127b69260248084019391929182900301818387803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50505050896001600160a01b03168b6001600160a01b03168d6001600160a01b03167fedf283b0b3396dd34e23a917cb887ad557f18a593be3a2e9c069fd59f19a811a84338e8e8e60405180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001821515151581526020019550505050505060405180910390a49b9a5050505050505050505050565b6001818154811061082a57fe5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031681565b604080516bffffffffffffffffffffffff19606098891b811660208084019190915297891b811660348301529590971b9094166048870152605c860192909252607c850152151560f81b609c8401528051607d818503018152609d9093019052815191012090565b60006060604051806020016108cf90610ec5565b601f1982820381018352601f9091011660408181526001600160a01b038716602083810191825282840192835287516060850152875189948994926080909101919085019080838360005b8381101561093257818101518382015260200161091a565b50505050905090810190601f16801561095f5780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040526040516020018083805190602001908083835b602083106109a65780518252601f199092019160209182019101610987565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106109ee5780518252601f1990920191602091820191016109cf565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050600081805190602001209050610a3e6000801b82610c53565b95945050505050565b6000610a8983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c60565b9392505050565b6000610a8983836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250610cf7565b6000606060405180602001610ae690610ec5565b601f1982820381018352601f9091011660408181526001600160a01b038716602083810191825282840192835287516060850152875189948994926080909101919085019080838360005b83811015610b49578181015183820152602001610b31565b50505050905090810190601f168015610b765780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040526040516020018083805190602001908083835b60208310610bbd5780518252601f199092019160209182019101610b9e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310610c055780518252601f199092019160209182019101610be6565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050610c4b60008060001b83610d59565b949350505050565b6000610a89838330610e6a565b60008184841115610cef5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cb4578181015183820152602001610c9c565b50505050905090810190601f168015610ce15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610d465760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cb4578181015183820152602001610c9c565b50828481610d5057fe5b06949350505050565b60008084471015610db1576040805162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b8251610e04576040805162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015290519081900360640190fd5b8383516020850187f590506001600160a01b038116610c4b576040805162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015290519081900360640190fd5b604080516001600160f81b031960208083019190915260609390931b6bffffffffffffffffffffffff191660218201526035810194909452605580850193909352805180850390930183526075909301909252805191012090565b6101f080610ed38339019056fe60806040526040516101f03803806101f08339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506000826001600160a01b0316826040518082805190602001908083835b602083106101195780518252601f1990920191602091820191016100fa565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610179576040519150601f19603f3d011682016040523d82523d6000602084013e61017e565b606091505b5050905080610191573d6000803e3d6000fd5b6040805169363d3d373d3d3d363d7360b01b6020808301919091526001600160601b0319606087901b16602a8301526e5af43d82803e903d91602b57fd5bf360881b603e8301528251602d81840381018252604d9093019093528201f3fe4f746f6b656e466163746f72793a204f7074696f6e20616c726561647920637265617465644f746f6b656e466163746f72793a2043616e2774206372656174652065787069726564206f7074696f6e4f746f6b656e466163746f72793a20556e737570706f727465642050726f647563744f746f6b656e466163746f72793a2043616e277420637265617465206120243020737472696b6520707574206f7074696f6e4f746f6b656e466163746f72793a2043616e277420637265617465206f7074696f6e207769746820657870697279203e20323334352f31322f33314f746f6b656e466163746f72793a204f7074696f6e2068617320746f206578706972652030383a303020555443a26469706673582212201205178b9128ddd717f51ff99fdafb26af6053ece7a9587830700406af2d46ca64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1268 CODESIZE SUB DUP1 PUSH2 0x1268 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1203 DUP1 PUSH2 0x65 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 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x11547054 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x46E63DC4 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0xB86B9A64 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xC0974630 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xDE0120DE EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x198 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xD5 PUSH2 0x1D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x1DB JUMP JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2DB JUMP JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x81D JUMP JUMPDEST PUSH2 0xB1 PUSH2 0x844 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B1 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA8DE41D5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xA8DE41D5 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x234 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP12 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE DUP11 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP2 DUP10 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0xC4 DUP3 ADD DUP8 SWAP1 MSTORE DUP6 ISZERO ISZERO PUSH1 0xE4 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x104 SWAP1 SWAP3 ADD SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x3D8C37CD PUSH1 0xE2 SHL OR SWAP1 MSTORE SWAP1 SWAP2 POP PUSH2 0x2CE DUP3 DUP3 PUSH2 0x8BB JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 TIMESTAMP DUP4 GT PUSH2 0x31B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10E8 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH5 0x2C33B9C80 DUP4 LT PUSH2 0x35E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1166 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x383 PUSH3 0x15180 PUSH2 0x377 DUP6 PUSH2 0x7080 PUSH4 0xFFFFFFFF PUSH2 0xA47 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA90 AND JUMP JUMPDEST ISZERO PUSH2 0x3BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x11A1 PUSH1 0x2D SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3CF DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10C3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0xD01F63F5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x49F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x401A83CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP12 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP11 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP8 ISZERO ISZERO PUSH1 0x64 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP4 AND SWAP2 PUSH4 0x401A83CF SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x56D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1112 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 ISZERO DUP1 PUSH2 0x57A JUMPI POP PUSH1 0x0 DUP7 GT JUMPDEST PUSH2 0x5B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x32 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1134 PUSH1 0x32 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0xA8DE41D5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x604 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x618 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP15 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE DUP14 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP2 DUP13 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD DUP12 SWAP1 MSTORE PUSH1 0xC4 DUP3 ADD DUP11 SWAP1 MSTORE DUP9 ISZERO ISZERO PUSH1 0xE4 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x104 SWAP1 SWAP3 ADD SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x3D8C37CD PUSH1 0xE2 SHL OR SWAP1 MSTORE SWAP2 SWAP3 POP PUSH2 0x6B3 DUP4 DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE SWAP1 DUP7 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD DUP1 SLOAD SWAP1 SWAP3 AND DUP4 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD PUSH4 0x763893DB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP1 DUP8 AND SWAP3 PUSH4 0xEC7127B6 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x76D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEDF283B0B3396DD34E23A917CB887AD557F18A593BE3A2E9C069FD59F19A811A DUP5 CALLER DUP15 DUP15 DUP15 PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x82A JUMPI INVALID 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 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP9 DUP10 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP8 DUP10 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE SWAP6 SWAP1 SWAP8 SHL SWAP1 SWAP5 AND PUSH1 0x48 DUP8 ADD MSTORE PUSH1 0x5C DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x7C DUP6 ADD MSTORE ISZERO ISZERO PUSH1 0xF8 SHL PUSH1 0x9C DUP5 ADD MSTORE DUP1 MLOAD PUSH1 0x7D DUP2 DUP6 SUB ADD DUP2 MSTORE PUSH1 0x9D SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x8CF SWAP1 PUSH2 0xEC5 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 DUP3 MSTORE DUP3 DUP5 ADD SWAP3 DUP4 MSTORE DUP8 MLOAD PUSH1 0x60 DUP6 ADD MSTORE DUP8 MLOAD DUP10 SWAP5 DUP10 SWAP5 SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x932 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x91A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x95F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9A6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x987 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9EE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9CF JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH1 0x0 DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0xA3E PUSH1 0x0 DUP1 SHL DUP3 PUSH2 0xC53 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA89 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xC60 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA89 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0xCF7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0xAE6 SWAP1 PUSH2 0xEC5 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 DUP3 MSTORE DUP3 DUP5 ADD SWAP3 DUP4 MSTORE DUP8 MLOAD PUSH1 0x60 DUP6 ADD MSTORE DUP8 MLOAD DUP10 SWAP5 DUP10 SWAP5 SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB49 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xB31 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB76 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBBD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB9E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC05 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBE6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xC4B PUSH1 0x0 DUP1 PUSH1 0x0 SHL DUP4 PUSH2 0xD59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA89 DUP4 DUP4 ADDRESS PUSH2 0xE6A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xCEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCB4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC9C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xCE1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0xD46 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xCB4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC9C JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0xD50 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SELFBALANCE LT ISZERO PUSH2 0xDB1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x437265617465323A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0xE04 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x437265617465323A2062797465636F6465206C656E677468206973207A65726F PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP8 CREATE2 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC4B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x437265617465323A204661696C6564206F6E206465706C6F7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x21 DUP3 ADD MSTORE PUSH1 0x35 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x55 DUP1 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP4 ADD DUP4 MSTORE PUSH1 0x75 SWAP1 SWAP4 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x1F0 DUP1 PUSH2 0xED3 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1F0 CODESIZE SUB DUP1 PUSH2 0x1F0 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x91 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x119 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xFA JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x179 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 0x17E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x191 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x363D3D373D3D3D363D73 PUSH1 0xB0 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP8 SWAP1 SHL AND PUSH1 0x2A DUP4 ADD MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL PUSH1 0x3E DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x2D DUP2 DUP5 SUB DUP2 ADD DUP3 MSTORE PUSH1 0x4D SWAP1 SWAP4 ADD SWAP1 SWAP4 MSTORE DUP3 ADD RETURN INVALID 0x4F PUSH21 0x6F6B656E466163746F72793A204F7074696F6E2061 PUSH13 0x72656164792063726561746564 0x4F PUSH21 0x6F6B656E466163746F72793A2043616E2774206372 PUSH6 0x617465206578 PUSH17 0x69726564206F7074696F6E4F746F6B656E CHAINID PUSH2 0x6374 PUSH16 0x72793A20556E737570706F7274656420 POP PUSH19 0x6F647563744F746F6B656E466163746F72793A KECCAK256 NUMBER PUSH2 0x6E27 PUSH21 0x20637265617465206120243020737472696B652070 PUSH22 0x74206F7074696F6E4F746F6B656E466163746F72793A KECCAK256 NUMBER PUSH2 0x6E27 PUSH21 0x20637265617465206F7074696F6E20776974682065 PUSH25 0x70697279203E20323334352F31322F33314F746F6B656E4661 PUSH4 0x746F7279 GASPRICE KECCAK256 0x4F PUSH17 0x74696F6E2068617320746F206578706972 PUSH6 0x2030383A3030 KECCAK256 SSTORE SLOAD NUMBER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLT SDIV OR DUP12 SWAP2 0x28 0xDD 0xD7 OR CREATE2 0x1F 0xF9 SWAP16 0xDA 0xFB 0x26 0xAF PUSH1 0x53 0xEC 0xE7 0xA9 PC PUSH25 0x30700406AF2D46CA64736F6C634300060A0033000000000000 ",
+ "sourceMap": "661:7320:6:-:0;;;1232:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1232:84:6;1283:11;:26;;-1:-1:-1;;;;;1283:26:6;;;-1:-1:-1;;;;;;1283:26:6;;;;;;;;;661:7320;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c8063115470541461006757806346e63dc4146100cd578063b86b9a64146100e7578063c097463014610131578063de0120de1461017b578063f5887cdd14610198575b600080fd5b6100b1600480360360c081101561007d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013515156101a0565b604080516001600160a01b039092168252519081900360200190f35b6100d56101d5565b60408051918252519081900360200190f35b6100b1600480360360c08110156100fd57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013515156101db565b6100b1600480360360c081101561014757600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013515156102db565b6100b16004803603602081101561019157600080fd5b503561081d565b6100b1610844565b6000806101b1888888888888610853565b6000908152600260205260409020546001600160a01b031698975050505050505050565b60015490565b600080546040805163a8de41d560e01b8152905183926001600160a01b03169163a8de41d5916004808301926020929190829003018186803b15801561022057600080fd5b505afa158015610234573d6000803e3d6000fd5b505050506040513d602081101561024a57600080fd5b5051600054604080516001600160a01b0392831660248201528b831660448201528a83166064820152918916608483015260a4820188905260c4820187905285151560e4808401919091528151808403909101815261010490920190526020810180516001600160e01b0316633d8c37cd60e21b1790529091506102ce82826108bb565b9998505050505050505050565b600042831161031b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806110e8602a913960400191505060405180910390fd5b6402c33b9c80831061035e5760405162461bcd60e51b815260040180806020018281038252603b815260200180611166603b913960400191505060405180910390fd5b610383620151806103778561708063ffffffff610a4716565b9063ffffffff610a9016565b156103bf5760405162461bcd60e51b815260040180806020018281038252602d8152602001806111a1602d913960400191505060405180910390fd5b60006103cf888888888888610853565b6000818152600260205260409020549091506001600160a01b0316156104265760405162461bcd60e51b81526004018080602001828103825260258152602001806110c36025913960400191505060405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663d01f63f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561047557600080fd5b505afa158015610489573d6000803e3d6000fd5b505050506040513d602081101561049f57600080fd5b50516040805163401a83cf60e01b81526001600160a01b038c811660048301528b811660248301528a81166044830152871515606483015291519293509083169163401a83cf91608480820192602092909190829003018186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d602081101561053057600080fd5b505161056d5760405162461bcd60e51b81526004018080602001828103825260228152602001806111126022913960400191505060405180910390fd5b83158061057a5750600086115b6105b55760405162461bcd60e51b81526004018080602001828103825260328152602001806111346032913960400191505060405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663a8de41d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561060457600080fd5b505afa158015610618573d6000803e3d6000fd5b505050506040513d602081101561062e57600080fd5b505160008054604080516001600160a01b0392831660248201528e831660448201528d83166064820152918c16608483015260a482018b905260c482018a905288151560e4808401919091528151808403909101815261010490920190526020810180516001600160e01b0316633d8c37cd60e21b1790529192506106b38383610ad2565b60008681526002602052604080822080546001600160a01b038086166001600160a01b031992831681179093556001805480820182559086527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180549092168317909155825163763893db60e11b8152600481019290925291519394509087169263ec7127b69260248084019391929182900301818387803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50505050896001600160a01b03168b6001600160a01b03168d6001600160a01b03167fedf283b0b3396dd34e23a917cb887ad557f18a593be3a2e9c069fd59f19a811a84338e8e8e60405180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001821515151581526020019550505050505060405180910390a49b9a5050505050505050505050565b6001818154811061082a57fe5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031681565b604080516bffffffffffffffffffffffff19606098891b811660208084019190915297891b811660348301529590971b9094166048870152605c860192909252607c850152151560f81b609c8401528051607d818503018152609d9093019052815191012090565b60006060604051806020016108cf90610ec5565b601f1982820381018352601f9091011660408181526001600160a01b038716602083810191825282840192835287516060850152875189948994926080909101919085019080838360005b8381101561093257818101518382015260200161091a565b50505050905090810190601f16801561095f5780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040526040516020018083805190602001908083835b602083106109a65780518252601f199092019160209182019101610987565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106109ee5780518252601f1990920191602091820191016109cf565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050600081805190602001209050610a3e6000801b82610c53565b95945050505050565b6000610a8983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c60565b9392505050565b6000610a8983836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250610cf7565b6000606060405180602001610ae690610ec5565b601f1982820381018352601f9091011660408181526001600160a01b038716602083810191825282840192835287516060850152875189948994926080909101919085019080838360005b83811015610b49578181015183820152602001610b31565b50505050905090810190601f168015610b765780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040526040516020018083805190602001908083835b60208310610bbd5780518252601f199092019160209182019101610b9e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310610c055780518252601f199092019160209182019101610be6565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050610c4b60008060001b83610d59565b949350505050565b6000610a89838330610e6a565b60008184841115610cef5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cb4578181015183820152602001610c9c565b50505050905090810190601f168015610ce15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610d465760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cb4578181015183820152602001610c9c565b50828481610d5057fe5b06949350505050565b60008084471015610db1576040805162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b8251610e04576040805162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015290519081900360640190fd5b8383516020850187f590506001600160a01b038116610c4b576040805162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015290519081900360640190fd5b604080516001600160f81b031960208083019190915260609390931b6bffffffffffffffffffffffff191660218201526035810194909452605580850193909352805180850390930183526075909301909252805191012090565b6101f080610ed38339019056fe60806040526040516101f03803806101f08339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506000826001600160a01b0316826040518082805190602001908083835b602083106101195780518252601f1990920191602091820191016100fa565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610179576040519150601f19603f3d011682016040523d82523d6000602084013e61017e565b606091505b5050905080610191573d6000803e3d6000fd5b6040805169363d3d373d3d3d363d7360b01b6020808301919091526001600160601b0319606087901b16602a8301526e5af43d82803e903d91602b57fd5bf360881b603e8301528251602d81840381018252604d9093019093528201f3fe4f746f6b656e466163746f72793a204f7074696f6e20616c726561647920637265617465644f746f6b656e466163746f72793a2043616e2774206372656174652065787069726564206f7074696f6e4f746f6b656e466163746f72793a20556e737570706f727465642050726f647563744f746f6b656e466163746f72793a2043616e277420637265617465206120243020737472696b6520707574206f7074696f6e4f746f6b656e466163746f72793a2043616e277420637265617465206f7074696f6e207769746820657870697279203e20323334352f31322f33314f746f6b656e466163746f72793a204f7074696f6e2068617320746f206578706972652030383a303020555443a26469706673582212201205178b9128ddd717f51ff99fdafb26af6053ece7a9587830700406af2d46ca64736f6c634300060a0033",
+ "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 0x11547054 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x46E63DC4 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0xB86B9A64 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xC0974630 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xDE0120DE EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x198 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xD5 PUSH2 0x1D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x1DB JUMP JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2DB JUMP JUMPDEST PUSH2 0xB1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x81D JUMP JUMPDEST PUSH2 0xB1 PUSH2 0x844 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B1 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA8DE41D5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xA8DE41D5 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x234 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP12 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE DUP11 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP2 DUP10 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0xC4 DUP3 ADD DUP8 SWAP1 MSTORE DUP6 ISZERO ISZERO PUSH1 0xE4 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x104 SWAP1 SWAP3 ADD SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x3D8C37CD PUSH1 0xE2 SHL OR SWAP1 MSTORE SWAP1 SWAP2 POP PUSH2 0x2CE DUP3 DUP3 PUSH2 0x8BB JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 TIMESTAMP DUP4 GT PUSH2 0x31B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10E8 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH5 0x2C33B9C80 DUP4 LT PUSH2 0x35E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1166 PUSH1 0x3B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x383 PUSH3 0x15180 PUSH2 0x377 DUP6 PUSH2 0x7080 PUSH4 0xFFFFFFFF PUSH2 0xA47 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA90 AND JUMP JUMPDEST ISZERO PUSH2 0x3BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x11A1 PUSH1 0x2D SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3CF DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10C3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0xD01F63F5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x49F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x401A83CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP12 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP11 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP8 ISZERO ISZERO PUSH1 0x64 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP4 AND SWAP2 PUSH4 0x401A83CF SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x56D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1112 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 ISZERO DUP1 PUSH2 0x57A JUMPI POP PUSH1 0x0 DUP7 GT JUMPDEST PUSH2 0x5B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x32 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1134 PUSH1 0x32 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0xA8DE41D5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x604 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x618 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP15 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE DUP14 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP2 DUP13 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD DUP12 SWAP1 MSTORE PUSH1 0xC4 DUP3 ADD DUP11 SWAP1 MSTORE DUP9 ISZERO ISZERO PUSH1 0xE4 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x104 SWAP1 SWAP3 ADD SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x3D8C37CD PUSH1 0xE2 SHL OR SWAP1 MSTORE SWAP2 SWAP3 POP PUSH2 0x6B3 DUP4 DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE SWAP1 DUP7 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD DUP1 SLOAD SWAP1 SWAP3 AND DUP4 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD PUSH4 0x763893DB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP1 DUP8 AND SWAP3 PUSH4 0xEC7127B6 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x76D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEDF283B0B3396DD34E23A917CB887AD557F18A593BE3A2E9C069FD59F19A811A DUP5 CALLER DUP15 DUP15 DUP15 PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x82A JUMPI INVALID 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 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP9 DUP10 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP8 DUP10 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE SWAP6 SWAP1 SWAP8 SHL SWAP1 SWAP5 AND PUSH1 0x48 DUP8 ADD MSTORE PUSH1 0x5C DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x7C DUP6 ADD MSTORE ISZERO ISZERO PUSH1 0xF8 SHL PUSH1 0x9C DUP5 ADD MSTORE DUP1 MLOAD PUSH1 0x7D DUP2 DUP6 SUB ADD DUP2 MSTORE PUSH1 0x9D SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x8CF SWAP1 PUSH2 0xEC5 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 DUP3 MSTORE DUP3 DUP5 ADD SWAP3 DUP4 MSTORE DUP8 MLOAD PUSH1 0x60 DUP6 ADD MSTORE DUP8 MLOAD DUP10 SWAP5 DUP10 SWAP5 SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x932 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x91A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x95F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9A6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x987 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9EE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9CF JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH1 0x0 DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0xA3E PUSH1 0x0 DUP1 SHL DUP3 PUSH2 0xC53 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA89 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xC60 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA89 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0xCF7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0xAE6 SWAP1 PUSH2 0xEC5 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 DUP3 MSTORE DUP3 DUP5 ADD SWAP3 DUP4 MSTORE DUP8 MLOAD PUSH1 0x60 DUP6 ADD MSTORE DUP8 MLOAD DUP10 SWAP5 DUP10 SWAP5 SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB49 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xB31 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB76 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBBD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB9E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE DUP6 MLOAD SWAP2 SWAP1 SWAP4 ADD SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC05 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBE6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xC4B PUSH1 0x0 DUP1 PUSH1 0x0 SHL DUP4 PUSH2 0xD59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA89 DUP4 DUP4 ADDRESS PUSH2 0xE6A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xCEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCB4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC9C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xCE1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0xD46 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xCB4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC9C JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0xD50 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SELFBALANCE LT ISZERO PUSH2 0xDB1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x437265617465323A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0xE04 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x437265617465323A2062797465636F6465206C656E677468206973207A65726F PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP8 CREATE2 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC4B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x437265617465323A204661696C6564206F6E206465706C6F7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x21 DUP3 ADD MSTORE PUSH1 0x35 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x55 DUP1 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP4 ADD DUP4 MSTORE PUSH1 0x75 SWAP1 SWAP4 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x1F0 DUP1 PUSH2 0xED3 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1F0 CODESIZE SUB DUP1 PUSH2 0x1F0 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x91 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x119 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xFA JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x179 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 0x17E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x191 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x363D3D373D3D3D363D73 PUSH1 0xB0 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP8 SWAP1 SHL AND PUSH1 0x2A DUP4 ADD MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL PUSH1 0x3E DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x2D DUP2 DUP5 SUB DUP2 ADD DUP3 MSTORE PUSH1 0x4D SWAP1 SWAP4 ADD SWAP1 SWAP4 MSTORE DUP3 ADD RETURN INVALID 0x4F PUSH21 0x6F6B656E466163746F72793A204F7074696F6E2061 PUSH13 0x72656164792063726561746564 0x4F PUSH21 0x6F6B656E466163746F72793A2043616E2774206372 PUSH6 0x617465206578 PUSH17 0x69726564206F7074696F6E4F746F6B656E CHAINID PUSH2 0x6374 PUSH16 0x72793A20556E737570706F7274656420 POP PUSH19 0x6F647563744F746F6B656E466163746F72793A KECCAK256 NUMBER PUSH2 0x6E27 PUSH21 0x20637265617465206120243020737472696B652070 PUSH22 0x74206F7074696F6E4F746F6B656E466163746F72793A KECCAK256 NUMBER PUSH2 0x6E27 PUSH21 0x20637265617465206F7074696F6E20776974682065 PUSH25 0x70697279203E20323334352F31322F33314F746F6B656E4661 PUSH4 0x746F7279 GASPRICE KECCAK256 0x4F PUSH17 0x74696F6E2068617320746F206578706972 PUSH6 0x2030383A3030 KECCAK256 SSTORE SLOAD NUMBER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLT SDIV OR DUP12 SWAP2 0x28 0xDD 0xD7 OR CREATE2 0x1F 0xF9 SWAP16 0xDA 0xFB 0x26 0xAF PUSH1 0x53 0xEC 0xE7 0xA9 PC PUSH25 0x30700406AF2D46CA64736F6C634300060A0033000000000000 ",
+ "sourceMap": "661:7320:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5230:386;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5230:386:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;5230:386:6;;;;;;;;;;;;;;4498:98;;;:::i;:::-;;;;;;;;;;;;;;;;6307:713;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6307:713:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2276:2097::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2276:2097:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;943:24::-;;;;;;;;;;;;;;;;-1:-1:-1;943:24:6;;:::i;862:26::-;;;:::i;5230:386::-;5452:7;5471:10;5484:93;5497:16;5515:12;5529:16;5547:12;5561:7;5570:6;5484:12;:93::i;:::-;5594:15;;;;:11;:15;;;;;;-1:-1:-1;;;;;5594:15:6;;5230:386;-1:-1:-1;;;;;;;;5230:386:6:o;4498:98::-;4575:7;:14;4498:98;:::o;6307:713::-;6542:7;6603:11;;6582:49;;;-1:-1:-1;;;6582:49:6;;;;6542:7;;-1:-1:-1;;;;;6603:11:6;;6582:47;;:49;;;;;;;;;;;;;;6603:11;6582:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6582:49:6;6771:11;;6680:265;;;-1:-1:-1;;;;;6771:11:6;;;6680:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6582:49;6680:265;;;;-1:-1:-1;;;;;6680:265:6;-1:-1:-1;;;6680:265:6;;;6582:49;;-1:-1:-1;6962:51:6;6582:49;6680:265;6962:15;:51::i;:::-;6955:58;6307:713;-1:-1:-1;;;;;;;;;6307:713:6:o;2276:2097::-;2496:7;2533:3;2523:7;:13;2515:68;;;;-1:-1:-1;;;2515:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1214:11;2601:7;:20;2593:92;;;;-1:-1:-1;;;2593:92:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2749:29;2772:5;2749:18;:7;2761:5;2749:18;:11;:18;:::i;:::-;:22;:29;:22;:29;:::i;:::-;:34;2741:92;;;;-1:-1:-1;;;2741:92:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2843:10;2856:93;2869:16;2887:12;2901:16;2919:12;2933:7;2942:6;2856:12;:93::i;:::-;2994:1;2967:15;;;:11;:15;;;;;;2843:106;;-1:-1:-1;;;;;;2967:15:6;:29;2959:79;;;;-1:-1:-1;;;2959:79:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3049:17;3090:11;;;;;;;;;-1:-1:-1;;;;;3090:11:6;-1:-1:-1;;;;;3069:46:6;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3069:48:6;3148:186;;;-1:-1:-1;;;3148:186:6;;-1:-1:-1;;;;;3148:186:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3069:48;;-1:-1:-1;3148:50:6;;;;;;:186;;;;;3069:48;;3148:186;;;;;;;;:50;:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3148:186:6;3127:267;;;;-1:-1:-1;;;3127:267:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3414:6;3413:7;:27;;;;3439:1;3424:12;:16;3413:27;3405:90;;;;-1:-1:-1;;;3405:90:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3506:18;3548:11;;;;;;;;;-1:-1:-1;;;;;3548:11:6;-1:-1:-1;;;;;3527:47:6;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3527:49:6;3716:11;;;3625:265;;;-1:-1:-1;;;;;3716:11:6;;;3625:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3527:49;3625:265;;;;-1:-1:-1;;;;;3625:265:6;-1:-1:-1;;;3625:265:6;;;3527:49;;-1:-1:-1;3921:42:6;3527:49;3625:265;3921:6;:42::i;:::-;3974:15;;;;:11;:15;;;;;;:27;;-1:-1:-1;;;;;3974:27:6;;;-1:-1:-1;;;;;;3974:27:6;;;;;;;;;4011:23;;;;;;;;;;;;;;;;;;;;;;4044:56;;-1:-1:-1;;;4044:56:6;;;;;;;;;;;3901:62;;-1:-1:-1;4044:45:6;;;;;;:56;;;;;3974:15;;4044:56;;;;;;3974:15;4044:45;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4246:16;-1:-1:-1;;;;;4116:223:6;4220:12;-1:-1:-1;;;;;4116:223:6;4190:16;-1:-1:-1;;;;;4116:223:6;;4143:9;4166:10;4276:12;4302:7;4323:6;4116:223;;;;-1:-1:-1;;;;;4116:223:6;-1:-1:-1;;;;;4116:223:6;;;;;;-1:-1:-1;;;;;4116:223:6;-1:-1:-1;;;;;4116:223:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4357:9;2276:2097;-1:-1:-1;;;;;;;;;;;2276:2097:6:o;943:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;943:24:6;;-1:-1:-1;943:24:6;:::o;862:26::-;;;-1:-1:-1;;;;;862:26:6;;:::o;7571:408::-;7861:97;;;-1:-1:-1;;7861:97:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7834:138;;;;;;7571:408::o;2080:597:7:-;2212:14;2333:21;2387:24;;;;;;;;:::i;:::-;-1:-1:-1;;2387:24:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2425:49:7;;2387:24;2425:49;;;;;;;;;;;;;;;;;;;;2436:13;;2451:22;;2425:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2357:127;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2357:127:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2357:127:7;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2357:127:7;;;;;;;;;;;;;-1:-1:-1;;2357:127:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2333:151;;2566:20;2599:8;2589:19;;;;;;2566:42;;2628;647:1;639:10;;2657:12;2628:22;:42::i;:::-;2619:51;2080:597;-1:-1:-1;;;;;2080:597:7:o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1439:50;1362:134;-1:-1:-1;;;1362:134:51:o;4568:128::-;4626:7;4652:37;4656:1;4659;4652:37;;;;;;;;;;;;;;;;;:3;:37::i;1061:459:7:-;1155:7;1265:21;1319:24;;;;;;;;:::i;:::-;-1:-1:-1;;1319:24:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1357:49:7;;1319:24;1357:49;;;;;;;;;;;;;;;;;;;;1368:13;;1383:22;;1357:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1289:127;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1289:127:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1289:127:7;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1289:127:7;;;;;;;;;;;;;-1:-1:-1;;1289:127:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1265:151;;1480:33;1495:1;647;639:10;;1504:8;1480:14;:33::i;:::-;1473:40;1061:459;-1:-1:-1;;;;1061:459:7:o;1838:165:47:-;1921:7;1947:49;1962:4;1968:12;1990:4;1947:14;:49::i;1780:217:51:-;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;5160:193::-;5276:7;5311:12;5303:6;5295:29;;;;-1:-1:-1;;;5295:29:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5345:1;5341;:5;;;;;;;5160:193;-1:-1:-1;;;;5160:193:51:o;1069:565:47:-;1186:7;1205:12;1260:6;1235:21;:31;;1227:73;;;;;-1:-1:-1;;;1227:73:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;1318:15;;1310:65;;;;;-1:-1:-1;;;1310:65:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1526:4;1515:8;1509:15;1502:4;1492:8;1488:19;1480:6;1472:59;1464:67;-1:-1:-1;;;;;;1558:18:47;;1550:56;;;;;-1:-1:-1;;;1550:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;2246:284;2422:60;;;-1:-1:-1;;;;;;2422:60:47;;;;;;;;;;;;;-1:-1:-1;;2422:60:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2412:71;;;;;;2246:284::o;-1:-1:-1:-;;;;;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "createOtoken(address,address,address,uint256,uint256,bool)": "c0974630",
+ "getOtoken(address,address,address,uint256,uint256,bool)": "11547054",
+ "getOtokensLength()": "46e63dc4",
+ "getTargetOtokenAddress(address,address,address,uint256,uint256,bool)": "b86b9a64",
+ "otokens(uint256)": "de0120de"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"strike\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPut\",\"type\":\"bool\"}],\"name\":\"OtokenCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"createOtoken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getOtoken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokensLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getTargetOtokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"otokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"details\":\"Calculate contract address before each creation with CREATE2 and deploy eip-1167 minimal proxies for oToken logic contract\",\"methods\":{\"createOtoken(address,address,address,uint256,uint256,bool)\":{\"details\":\"deploy an eip-1167 minimal proxy with CREATE2 and register it to the whitelist module\",\"params\":{\"_collateralAsset\":\"asset that is held as collateral against short/written options\",\"_expiry\":\"expiration timestamp as a unix timestamp\",\"_isPut\":\"True if a put option, False if a call option\",\"_strikeAsset\":\"asset that the strike price is denominated in\",\"_strikePrice\":\"strike price with decimals = 18\",\"_underlyingAsset\":\"asset that the option references\"},\"returns\":{\"_0\":\"newOtoken address of the newly created option\"}},\"getOtoken(address,address,address,uint256,uint256,bool)\":{\"params\":{\"_collateralAsset\":\"asset that is held as collateral against short/written options\",\"_expiry\":\"expiration timestamp as a unix timestamp\",\"_isPut\":\"True if a put option, False if a call option\",\"_strikeAsset\":\"asset that the strike price is denominated in\",\"_strikePrice\":\"strike price with decimals = 18\",\"_underlyingAsset\":\"asset that the option references\"},\"returns\":{\"_0\":\"the address of target otoken.\"}},\"getOtokensLength()\":{\"returns\":{\"_0\":\"length of the oTokens array\"}},\"getTargetOtokenAddress(address,address,address,uint256,uint256,bool)\":{\"details\":\"return the exact address that will be deployed at with _computeAddress\",\"params\":{\"_collateralAsset\":\"asset that is held as collateral against short/written options\",\"_expiry\":\"expiration timestamp as a unix timestamp\",\"_isPut\":\"True if a put option, False if a call option\",\"_strikeAsset\":\"asset that the strike price is denominated in\",\"_strikePrice\":\"strike price with decimals = 18\",\"_underlyingAsset\":\"asset that the option references\"},\"returns\":{\"_0\":\"targetAddress the address this oToken would be deployed at\"}}},\"stateVariables\":{\"MAX_EXPIRY\":{\"details\":\"max expiry that BokkyPooBahsDateTimeLibrary can handle. (2345/12/31)\"},\"idToAddress\":{\"details\":\"mapping from parameters hash to its deployed address\"}},\"title\":\"A factory to create Opyn oTokens\"},\"userdoc\":{\"methods\":{\"addressBook()\":{\"notice\":\"Opyn AddressBook contract that records the address of the Whitelist module and the Otoken impl address. */\"},\"createOtoken(address,address,address,uint256,uint256,bool)\":{\"notice\":\"create new oTokens\"},\"getOtoken(address,address,address,uint256,uint256,bool)\":{\"notice\":\"get the oToken address for an already created oToken, if no oToken has been created with these parameters, it will return address(0)\"},\"getOtokensLength()\":{\"notice\":\"get the total oTokens created by the factory\"},\"getTargetOtokenAddress(address,address,address,uint256,uint256,bool)\":{\"notice\":\"get the address at which a new oToken with these parameters would be deployed\"},\"otokens(uint256)\":{\"notice\":\"array of all created otokens */\"}},\"notice\":\"SPDX-License-Identifier: UNLICENSEDCreate new oTokens and keep track of all created tokens\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/OtokenFactory.sol\":\"OtokenFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/OtokenFactory.sol\":{\"keccak256\":\"0xb4c8fb20cf674fd258eb5799e3f6570ecf9e7792d2e259daa9bcd485b5fdc010\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://83c0ce4f113556eaa867422577886786c8b4b57feb49f671df35b772a90d4b91\",\"dweb:/ipfs/QmWkyZ9xGbtvuDvs8KnZqU9j43RA8rp4Lne2xoG1cDyKMu\"]},\"contracts/core/OtokenSpawner.sol\":{\"keccak256\":\"0xe02b8342e89161e381dff7ed1c417c49b00eafea79842c19d6901df0a1ff4167\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f435bab61ac3d172e85f7e33acaf4ecf52f8f584079731c1a43595f60b99beb5\",\"dweb:/ipfs/QmX6phVxdKrAUTQbk3EZjyRbo9VBTipkJw2GUgfxsRK4dD\"]},\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]},\"contracts/interfaces/WhitelistInterface.sol\":{\"keccak256\":\"0xf4f8c9a4a9face43a6c1f36d385bdbbcb57d723530cb4f7c8e402b79fdf41479\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://38182c860371ac05f28813011bb9a0c8ffa742c6b1cfdd39ce19438cf10fa3c8\",\"dweb:/ipfs/QmaiZH48mYxVFHe4ZVKjWJzPEGpehpW5SThAzj6XebiCj9\"]},\"contracts/packages/Spawn.sol\":{\"keccak256\":\"0xb7be1b391d5766babb41a9e63badbb0a707cc0340f7de4edf4e643e7f43ac47d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8ea5370167eeaf3a178f7448f7086a12fb8292c6adf6c480dd9bcdb92a6b8b2\",\"dweb:/ipfs/QmStmjSwX6khwJjC6hXcrAUnQ3TTZ3qSiyQbGXNSDs1FYG\"]},\"contracts/packages/oz/Create2.sol\":{\"keccak256\":\"0x4b1cd6d6448f378562b37b447c6489a4fd962937fa2f98fee7279a69f7139721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b93ceb00e6d794f517bab613b802e6d5d84ad9df02b81b95312e2012d0196167\",\"dweb:/ipfs/Qma2sAQpnkAQeAiPgCuZipHX5iAnPNUchHi2rHFfvVwBXv\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/OtokenSpawner.sol": {
+ "OtokenSpawner": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220cd5599242d02b6f23375dc8ca79939a8d228e40ab32bc1d9377b20b39283af3d64736f6c634300060a0033",
+ "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 0xCD SSTORE SWAP10 0x24 0x2D MUL 0xB6 CALLCODE CALLER PUSH22 0xDC8CA79939A8D228E40AB32BC1D9377B20B39283AF3D PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "486:2193:7:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052600080fdfea2646970667358221220cd5599242d02b6f23375dc8ca79939a8d228e40ab32bc1d9377b20b39283af3d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCD SSTORE SWAP10 0x24 0x2D MUL 0xB6 CALLCODE CALLER PUSH22 0xDC8CA79939A8D228E40AB32BC1D9377B20B39283AF3D PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "486:2193:7:-:0;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{},\"title\":\"OtokenSpawner\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract spawns and initializes eip-1167 minimal proxies that point to existing logic contracts.This contract was modified from Spawner.sol https://github.com/0age/Spawner/blob/master/contracts/Spawner.sol to fit into OtokenFactory\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/OtokenSpawner.sol\":\"OtokenSpawner\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/OtokenSpawner.sol\":{\"keccak256\":\"0xe02b8342e89161e381dff7ed1c417c49b00eafea79842c19d6901df0a1ff4167\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f435bab61ac3d172e85f7e33acaf4ecf52f8f584079731c1a43595f60b99beb5\",\"dweb:/ipfs/QmX6phVxdKrAUTQbk3EZjyRbo9VBTipkJw2GUgfxsRK4dD\"]},\"contracts/packages/Spawn.sol\":{\"keccak256\":\"0xb7be1b391d5766babb41a9e63badbb0a707cc0340f7de4edf4e643e7f43ac47d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8ea5370167eeaf3a178f7448f7086a12fb8292c6adf6c480dd9bcdb92a6b8b2\",\"dweb:/ipfs/QmStmjSwX6khwJjC6hXcrAUnQ3TTZ3qSiyQbGXNSDs1FYG\"]},\"contracts/packages/oz/Create2.sol\":{\"keccak256\":\"0x4b1cd6d6448f378562b37b447c6489a4fd962937fa2f98fee7279a69f7139721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b93ceb00e6d794f517bab613b802e6d5d84ad9df02b81b95312e2012d0196167\",\"dweb:/ipfs/Qma2sAQpnkAQeAiPgCuZipHX5iAnPNUchHi2rHFfvVwBXv\"]}},\"version\":1}"
+ }
+ },
+ "contracts/core/Whitelist.sol": {
+ "Whitelist": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "CalleeBlacklisted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "CalleeWhitelisted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ }
+ ],
+ "name": "CollateralBlacklisted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ }
+ ],
+ "name": "CollateralWhitelisted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ }
+ ],
+ "name": "OtokenBlacklisted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ }
+ ],
+ "name": "OtokenWhitelisted",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "underlying",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "strike",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "ProductBlacklisted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "underlying",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "strike",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "ProductWhitelisted",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "blacklistCallee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "blacklistCollateral",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otokenAddress",
+ "type": "address"
+ }
+ ],
+ "name": "blacklistOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "blacklistProduct",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "isWhitelistedCallee",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "isWhitelistedCollateral",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "isWhitelistedOtoken",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "isWhitelistedProduct",
+ "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": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "whitelistCallee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "whitelistCollateral",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otokenAddress",
+ "type": "address"
+ }
+ ],
+ "name": "whitelistOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "whitelistProduct",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50604051610f20380380610f208339818101604052602081101561003357600080fd5b505160006100486001600160e01b0361011216565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0381166100ed576040805162461bcd60e51b815260206004820152601460248201527f496e76616c6964206164647265737320626f6f6b000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610116565b3390565b610dfb806101256000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a2ae545a11610097578063ec7127b611610066578063ec7127b61461030b578063f2fde38b14610331578063f5887cdd14610357578063f9839d891461035f57610100565b8063a2ae545a1461025b578063a34626c414610281578063a6dfe83f146102a7578063ebd31e8e146102e557610100565b8063715018a6116100d3578063715018a6146101cb57806379df1e44146101d357806382d90ebf146101f95780638da5cb5b1461023757610100565b806311946b981461010557806315f73b011461013f578063401a83cf14610167578063708a0393146101a5575b600080fd5b61012b6004803603602081101561011b57600080fd5b50356001600160a01b0316610385565b604080519115158252519081900360200190f35b6101656004803603602081101561015557600080fd5b50356001600160a01b03166103a3565b005b61012b6004803603608081101561017d57600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515610444565b610165600480360360208110156101bb57600080fd5b50356001600160a01b03166104a0565b610165610544565b610165600480360360208110156101e957600080fd5b50356001600160a01b03166105e6565b6101656004803603608081101561020f57600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515610687565b61023f61085b565b604080516001600160a01b039092168252519081900360200190f35b61012b6004803603602081101561027157600080fd5b50356001600160a01b031661086a565b6101656004803603602081101561029757600080fd5b50356001600160a01b0316610888565b610165600480360360808110156102bd57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135151561092c565b610165600480360360208110156102fb57600080fd5b50356001600160a01b0316610a28565b6101656004803603602081101561032157600080fd5b50356001600160a01b0316610ac9565b6101656004803603602081101561034757600080fd5b50356001600160a01b0316610bd5565b61023f610ccd565b61012b6004803603602081101561037557600080fd5b50356001600160a01b0316610cdc565b6001600160a01b031660009081526004602052604090205460ff1690565b6103ab610cfa565b6000546001600160a01b039081169116146103fb576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020526040808220805460ff19169055517f2e27eeed3fdce92fcbb383357973ca18ad411294e3cb4f9c07a8665aee9bcf189190a250565b604080516001600160a01b039586166020808301919091529486168183015292909416606083015215156080808301919091528351808303909101815260a0909101835280519082012060009081526002909152205460ff1690565b6104a8610cfa565b6000546001600160a01b039081169116146104f8576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260056020526040808220805460ff19166001179055517f9334f1cf560b8678d242a97ff8aa0f60f61c40b3b7e3bd1a1b6759bb0cec6b9e9190a250565b61054c610cfa565b6000546001600160a01b0390811691161461059c576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105ee610cfa565b6000546001600160a01b0390811691161461063e576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19169055517fdb9b6d848ff0a15fae4f0c0424b4bb6ddd97ac1d06b2d160ba86fc2832de58149190a250565b61068f610cfa565b6000546001600160a01b039081169116146106df576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526003602052604090205460ff166107365760405162461bcd60e51b8152600401808060200182810382526028815260200180610d786028913960400191505060405180910390fd5b8080156107545750816001600160a01b0316836001600160a01b0316145b806107795750801580156107795750836001600160a01b0316826001600160a01b0316145b6107b45760405162461bcd60e51b8152600401808060200182810382526033815260200180610d256033913960400191505060405180910390fd5b604080516001600160a01b0380871660208084018290528288168486018190529287166060850181905286151560808087018290528751808803909101815260a087018089528151918501919091206000818152600290955293889020805460ff1916600117905583905260c086015294519094937f0f70a67bc35edde2b5599b6d163651e02f760143df04f95b4ef233299531bf21919081900360e00190a45050505050565b6000546001600160a01b031690565b6001600160a01b031660009081526005602052604090205460ff1690565b610890610cfa565b6000546001600160a01b039081169116146108e0576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f38c11947f16670fa95ddb76444c21a13a0be4f0132d147eb6245c4b94ea889fa9190a250565b610934610cfa565b6000546001600160a01b03908116911614610984576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b604080516001600160a01b0380871660208084018290528288168486018190529287166060850181905286151560808087018290528751808803909101815260a087018089528151918501919091206000818152600290955293889020805460ff1916905583905260c086015294519094937fa1ddf2a4744cc5c7c0dbe14996f16cb2d8564ef718f45625629e8a0497b9779a919081900360e00190a45050505050565b610a30610cfa565b6000546001600160a01b03908116911614610a80576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260056020526040808220805460ff19169055517f1b04f3cb09a85dced592e37ae08b2a135757683e30116221003f6620de94d4009190a250565b600160009054906101000a90046001600160a01b03166001600160a01b0316631ffaf0db6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1757600080fd5b505afa158015610b2b573d6000803e3d6000fd5b505050506040513d6020811015610b4157600080fd5b50516001600160a01b03163314610b895760405162461bcd60e51b8152600401808060200182810382526026815260200180610da06026913960400191505060405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fafbb5b30329d7def9553a137626d5bc919fda8f5d1d1b5a64aa6123445b9415b9190a250565b610bdd610cfa565b6000546001600160a01b03908116911614610c2d576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116610c725760405162461bcd60e51b8152600401808060200182810382526026815260200180610cff6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6001600160a01b031660009081526003602052604090205460ff1690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737357686974656c6973743a204f6e6c7920616c6c6f772066756c6c7920636f6c6c61746572616c697a65642070726f64756374734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657257686974656c6973743a20436f6c6c61746572616c206973206e6f742077686974656c697374656457686974656c6973743a2053656e646572206973206e6f74204f746f6b656e466163746f7279a26469706673582212201b8e4bc36ab9d0d04f8ee53d2e711f6bf98c6ccb3402cc6d3c2ec45b1bdbaa5964736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xF20 CODESIZE SUB DUP1 PUSH2 0xF20 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 PUSH2 0x48 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x112 AND JUMP JUMPDEST PUSH1 0x0 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 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964206164647265737320626F6F6B000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD 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 SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x116 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0xDFB DUP1 PUSH2 0x125 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 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2AE545A GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEC7127B6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xEC7127B6 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x331 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0xF9839D89 EQ PUSH2 0x35F JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0xA2AE545A EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA34626C4 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xA6DFE83F EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0xEBD31E8E EQ PUSH2 0x2E5 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x79DF1E44 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x82D90EBF EQ PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x237 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x11946B98 EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x15F73B01 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0x401A83CF EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x708A0393 EQ PUSH2 0x1A5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x444 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A0 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x544 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E6 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x687 JUMP JUMPDEST PUSH2 0x23F PUSH2 0x85B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x86A JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x888 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x92C JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAC9 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBD5 JUMP JUMPDEST PUSH2 0x23F PUSH2 0xCCD JUMP JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3AB PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x3FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 0x2E27EEED3FDCE92FCBB383357973CA18AD411294E3CB4F9C07A8665AEE9BCF18 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP3 SWAP1 SWAP5 AND PUSH1 0x60 DUP4 ADD MSTORE ISZERO ISZERO 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 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x4A8 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x4F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x9334F1CF560B8678D242A97FF8AA0F60F61C40B3B7E3BD1A1B6759BB0CEC6B9E SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x54C PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x59C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5EE PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x63E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xDB9B6D848FF0A15FAE4F0C0424B4BB6DDD97AC1D06B2D160BA86FC2832DE5814 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x68F PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x6DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x736 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xD78 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP1 ISZERO PUSH2 0x754 JUMPI POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x779 JUMPI POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x779 JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x7B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xD25 PUSH1 0x33 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP3 DUP9 AND DUP5 DUP7 ADD DUP2 SWAP1 MSTORE SWAP3 DUP8 AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE DUP7 ISZERO ISZERO PUSH1 0x80 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP8 MLOAD DUP1 DUP9 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP1 DUP10 MSTORE DUP2 MLOAD SWAP2 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP6 MSTORE SWAP4 DUP9 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD MSTORE SWAP5 MLOAD SWAP1 SWAP5 SWAP4 PUSH32 0xF70A67BC35EDDE2B5599B6D163651E02F760143DF04F95B4EF233299531BF21 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x890 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x8E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 0x38C11947F16670FA95DDB76444C21A13A0BE4F0132D147EB6245C4B94EA889FA SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x934 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x984 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP3 DUP9 AND DUP5 DUP7 ADD DUP2 SWAP1 MSTORE SWAP3 DUP8 AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE DUP7 ISZERO ISZERO PUSH1 0x80 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP8 MLOAD DUP1 DUP9 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP1 DUP10 MSTORE DUP2 MLOAD SWAP2 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP6 MSTORE SWAP4 DUP9 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD MSTORE SWAP5 MLOAD SWAP1 SWAP5 SWAP4 PUSH32 0xA1DDF2A4744CC5C7C0DBE14996F16CB2D8564EF718F45625629E8A0497B9779A SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xA30 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x1B04F3CB09A85DCED592E37AE08B2A135757683E30116221003F6620DE94D400 SWAP2 SWAP1 LOG2 POP 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 0x1FFAF0DB 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xDA0 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xAFBB5B30329D7DEF9553A137626D5BC919FDA8F5D1D1B5A64AA6123445B9415B SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0xBDD PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xC2D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC72 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xCFF PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 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 CALLER SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F206164647265737357686974656C6973743A204F6E6C7920 PUSH2 0x6C6C PUSH16 0x772066756C6C7920636F6C6C61746572 PUSH2 0x6C69 PUSH27 0x65642070726F64756374734F776E61626C653A2063616C6C657220 PUSH10 0x73206E6F742074686520 PUSH16 0x776E657257686974656C6973743A2043 PUSH16 0x6C6C61746572616C206973206E6F7420 PUSH24 0x686974656C697374656457686974656C6973743A2053656E PUSH5 0x6572206973 KECCAK256 PUSH15 0x6F74204F746F6B656E466163746F72 PUSH26 0xA26469706673582212201B8E4BC36AB9D0D04F8EE53D2E711F6B 0xF9 DUP13 PUSH13 0xCB3402CC6D3C2EC45B1BDBAA59 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "343:8725:8:-:0;;;1015:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1015:154:8;893:17:48;913:12;-1:-1:-1;;;;;913:10:48;:12;:::i;:::-;935:6;:18;;-1:-1:-1;;;;;;935:18:48;-1:-1:-1;;;;;935:18:48;;;;;;;968:43;;935:18;;-1:-1:-1;935:18:48;968:43;;935:6;;968:43;-1:-1:-1;;;;;;1074:26:8;;1066:59;;;;;-1:-1:-1;;;1066:59:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:11;:26;;-1:-1:-1;;;;;;1136:26:8;-1:-1:-1;;;;;1136:26:8;;;;;;;;;;343:8725;;623:104:46;710:10;623:104;:::o;343:8725:8:-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101005760003560e01c8063a2ae545a11610097578063ec7127b611610066578063ec7127b61461030b578063f2fde38b14610331578063f5887cdd14610357578063f9839d891461035f57610100565b8063a2ae545a1461025b578063a34626c414610281578063a6dfe83f146102a7578063ebd31e8e146102e557610100565b8063715018a6116100d3578063715018a6146101cb57806379df1e44146101d357806382d90ebf146101f95780638da5cb5b1461023757610100565b806311946b981461010557806315f73b011461013f578063401a83cf14610167578063708a0393146101a5575b600080fd5b61012b6004803603602081101561011b57600080fd5b50356001600160a01b0316610385565b604080519115158252519081900360200190f35b6101656004803603602081101561015557600080fd5b50356001600160a01b03166103a3565b005b61012b6004803603608081101561017d57600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515610444565b610165600480360360208110156101bb57600080fd5b50356001600160a01b03166104a0565b610165610544565b610165600480360360208110156101e957600080fd5b50356001600160a01b03166105e6565b6101656004803603608081101561020f57600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515610687565b61023f61085b565b604080516001600160a01b039092168252519081900360200190f35b61012b6004803603602081101561027157600080fd5b50356001600160a01b031661086a565b6101656004803603602081101561029757600080fd5b50356001600160a01b0316610888565b610165600480360360808110156102bd57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135151561092c565b610165600480360360208110156102fb57600080fd5b50356001600160a01b0316610a28565b6101656004803603602081101561032157600080fd5b50356001600160a01b0316610ac9565b6101656004803603602081101561034757600080fd5b50356001600160a01b0316610bd5565b61023f610ccd565b61012b6004803603602081101561037557600080fd5b50356001600160a01b0316610cdc565b6001600160a01b031660009081526004602052604090205460ff1690565b6103ab610cfa565b6000546001600160a01b039081169116146103fb576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020526040808220805460ff19169055517f2e27eeed3fdce92fcbb383357973ca18ad411294e3cb4f9c07a8665aee9bcf189190a250565b604080516001600160a01b039586166020808301919091529486168183015292909416606083015215156080808301919091528351808303909101815260a0909101835280519082012060009081526002909152205460ff1690565b6104a8610cfa565b6000546001600160a01b039081169116146104f8576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260056020526040808220805460ff19166001179055517f9334f1cf560b8678d242a97ff8aa0f60f61c40b3b7e3bd1a1b6759bb0cec6b9e9190a250565b61054c610cfa565b6000546001600160a01b0390811691161461059c576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105ee610cfa565b6000546001600160a01b0390811691161461063e576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19169055517fdb9b6d848ff0a15fae4f0c0424b4bb6ddd97ac1d06b2d160ba86fc2832de58149190a250565b61068f610cfa565b6000546001600160a01b039081169116146106df576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526003602052604090205460ff166107365760405162461bcd60e51b8152600401808060200182810382526028815260200180610d786028913960400191505060405180910390fd5b8080156107545750816001600160a01b0316836001600160a01b0316145b806107795750801580156107795750836001600160a01b0316826001600160a01b0316145b6107b45760405162461bcd60e51b8152600401808060200182810382526033815260200180610d256033913960400191505060405180910390fd5b604080516001600160a01b0380871660208084018290528288168486018190529287166060850181905286151560808087018290528751808803909101815260a087018089528151918501919091206000818152600290955293889020805460ff1916600117905583905260c086015294519094937f0f70a67bc35edde2b5599b6d163651e02f760143df04f95b4ef233299531bf21919081900360e00190a45050505050565b6000546001600160a01b031690565b6001600160a01b031660009081526005602052604090205460ff1690565b610890610cfa565b6000546001600160a01b039081169116146108e0576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f38c11947f16670fa95ddb76444c21a13a0be4f0132d147eb6245c4b94ea889fa9190a250565b610934610cfa565b6000546001600160a01b03908116911614610984576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b604080516001600160a01b0380871660208084018290528288168486018190529287166060850181905286151560808087018290528751808803909101815260a087018089528151918501919091206000818152600290955293889020805460ff1916905583905260c086015294519094937fa1ddf2a4744cc5c7c0dbe14996f16cb2d8564ef718f45625629e8a0497b9779a919081900360e00190a45050505050565b610a30610cfa565b6000546001600160a01b03908116911614610a80576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260056020526040808220805460ff19169055517f1b04f3cb09a85dced592e37ae08b2a135757683e30116221003f6620de94d4009190a250565b600160009054906101000a90046001600160a01b03166001600160a01b0316631ffaf0db6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1757600080fd5b505afa158015610b2b573d6000803e3d6000fd5b505050506040513d6020811015610b4157600080fd5b50516001600160a01b03163314610b895760405162461bcd60e51b8152600401808060200182810382526026815260200180610da06026913960400191505060405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fafbb5b30329d7def9553a137626d5bc919fda8f5d1d1b5a64aa6123445b9415b9190a250565b610bdd610cfa565b6000546001600160a01b03908116911614610c2d576040805162461bcd60e51b81526020600482018190526024820152600080516020610d58833981519152604482015290519081900360640190fd5b6001600160a01b038116610c725760405162461bcd60e51b8152600401808060200182810382526026815260200180610cff6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6001600160a01b031660009081526003602052604090205460ff1690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737357686974656c6973743a204f6e6c7920616c6c6f772066756c6c7920636f6c6c61746572616c697a65642070726f64756374734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657257686974656c6973743a20436f6c6c61746572616c206973206e6f742077686974656c697374656457686974656c6973743a2053656e646572206973206e6f74204f746f6b656e466163746f7279a26469706673582212201b8e4bc36ab9d0d04f8ee53d2e711f6bf98c6ccb3402cc6d3c2ec45b1bdbaa5964736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2AE545A GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEC7127B6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xEC7127B6 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x331 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0xF9839D89 EQ PUSH2 0x35F JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0xA2AE545A EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA34626C4 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xA6DFE83F EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0xEBD31E8E EQ PUSH2 0x2E5 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x79DF1E44 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x82D90EBF EQ PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x237 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x11946B98 EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x15F73B01 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0x401A83CF EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x708A0393 EQ PUSH2 0x1A5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x444 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A0 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x544 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E6 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x687 JUMP JUMPDEST PUSH2 0x23F PUSH2 0x85B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x86A JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x888 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x92C JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAC9 JUMP JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBD5 JUMP JUMPDEST PUSH2 0x23F PUSH2 0xCCD JUMP JUMPDEST PUSH2 0x12B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3AB PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x3FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 0x2E27EEED3FDCE92FCBB383357973CA18AD411294E3CB4F9C07A8665AEE9BCF18 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP3 SWAP1 SWAP5 AND PUSH1 0x60 DUP4 ADD MSTORE ISZERO ISZERO 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 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x4A8 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x4F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x9334F1CF560B8678D242A97FF8AA0F60F61C40B3B7E3BD1A1B6759BB0CEC6B9E SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x54C PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x59C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5EE PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x63E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xDB9B6D848FF0A15FAE4F0C0424B4BB6DDD97AC1D06B2D160BA86FC2832DE5814 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x68F PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x6DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x736 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xD78 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP1 ISZERO PUSH2 0x754 JUMPI POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x779 JUMPI POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x779 JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x7B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xD25 PUSH1 0x33 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP3 DUP9 AND DUP5 DUP7 ADD DUP2 SWAP1 MSTORE SWAP3 DUP8 AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE DUP7 ISZERO ISZERO PUSH1 0x80 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP8 MLOAD DUP1 DUP9 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP1 DUP10 MSTORE DUP2 MLOAD SWAP2 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP6 MSTORE SWAP4 DUP9 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD MSTORE SWAP5 MLOAD SWAP1 SWAP5 SWAP4 PUSH32 0xF70A67BC35EDDE2B5599B6D163651E02F760143DF04F95B4EF233299531BF21 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x890 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x8E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 0x38C11947F16670FA95DDB76444C21A13A0BE4F0132D147EB6245C4B94EA889FA SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x934 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x984 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP3 DUP9 AND DUP5 DUP7 ADD DUP2 SWAP1 MSTORE SWAP3 DUP8 AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE DUP7 ISZERO ISZERO PUSH1 0x80 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP8 MLOAD DUP1 DUP9 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP1 DUP10 MSTORE DUP2 MLOAD SWAP2 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP6 MSTORE SWAP4 DUP9 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD MSTORE SWAP5 MLOAD SWAP1 SWAP5 SWAP4 PUSH32 0xA1DDF2A4744CC5C7C0DBE14996F16CB2D8564EF718F45625629E8A0497B9779A SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xA30 PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x1B04F3CB09A85DCED592E37AE08B2A135757683E30116221003F6620DE94D400 SWAP2 SWAP1 LOG2 POP 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 0x1FFAF0DB 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xDA0 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xAFBB5B30329D7DEF9553A137626D5BC919FDA8F5D1D1B5A64AA6123445B9415B SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0xBDD PUSH2 0xCFA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xC2D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xD58 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC72 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xCFF PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 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 CALLER SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F206164647265737357686974656C6973743A204F6E6C7920 PUSH2 0x6C6C PUSH16 0x772066756C6C7920636F6C6C61746572 PUSH2 0x6C69 PUSH27 0x65642070726F64756374734F776E61626C653A2063616C6C657220 PUSH10 0x73206E6F742074686520 PUSH16 0x776E657257686974656C6973743A2043 PUSH16 0x6C6C61746572616C206973206E6F7420 PUSH24 0x686974656C697374656457686974656C6973743A2053656E PUSH5 0x6572206973 KECCAK256 PUSH15 0x6F74204F746F6B656E466163746F72 PUSH26 0xA26469706673582212201B8E4BC36AB9D0D04F8EE53D2E711F6B 0xF9 DUP13 PUSH13 0xCB3402CC6D3C2EC45B1BDBAA59 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "343:8725:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4228:125;;;;;;;;;;;;;;;;-1:-1:-1;4228:125:8;-1:-1:-1;;;;;4228:125:8;;:::i;:::-;;;;;;;;;;;;;;;;;;7470:178;;;;;;;;;;;;;;;;-1:-1:-1;7470:178:8;-1:-1:-1;;;;;7470:178:8;;:::i;:::-;;3369:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3369:321:8;;;;;;;;;;;;;;;;;;;;;;;;:::i;8559:153::-;;;;;;;;;;;;;;;;-1:-1:-1;8559:153:8;-1:-1:-1;;;;;8559:153:8;;:::i;1717:145:48:-;;;:::i;8184:175:8:-;;;;;;;;;;;;;;;;-1:-1:-1;8184:175:8;-1:-1:-1;;;;;8184:175:8;;:::i;5187:684::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5187:684:8;;;;;;;;;;;;;;;;;;;;;;;;:::i;1094:77:48:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1094:77:48;;;;;;;;;;;;;;4559:125:8;;;;;;;;;;;;;;;;-1:-1:-1;4559:125:8;-1:-1:-1;;;;;4559:125:8;;:::i;7100:177::-;;;;;;;;;;;;;;;;-1:-1:-1;7100:177:8;-1:-1:-1;;;;;7100:177:8;;:::i;6373:398::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6373:398:8;;;;;;;;;;;;;;;;;;;;;;;;:::i;8912:154::-;;;;;;;;;;;;;;;;-1:-1:-1;8912:154:8;-1:-1:-1;;;;;8912:154:8;;:::i;7841:176::-;;;;;;;;;;;;;;;;-1:-1:-1;7841:176:8;-1:-1:-1;;;;;7841:176:8;;:::i;2011:240:48:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:48;-1:-1:-1;;;;;2011:240:48;;:::i;422:26:8:-;;;:::i;3921:141::-;;;;;;;;;;;;;;;;-1:-1:-1;3921:141:8;-1:-1:-1;;;;;3921:141:8;;:::i;4228:125::-;-1:-1:-1;;;;;4320:26:8;4297:4;4320:26;;;:17;:26;;;;;;;;;4228:125::o;7470:178::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;7549:34:8;::::1;7586:5;7549:34:::0;;;:21:::1;:34;::::0;;;;;:42;;-1:-1:-1;;7549:42:8::1;::::0;;7607:34;::::1;::::0;7586:5;7607:34:::1;7470:178:::0;:::o;3369:321::-;3580:53;;;-1:-1:-1;;;;;3580:53:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3570:64;;;;;;-1:-1:-1;3652:31:8;;;:18;:31;;;;;;;;3369:321::o;8559:153::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;8630:26:8;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:33;;-1:-1:-1;;8630:33:8::1;8659:4;8630:33;::::0;;8679:26;::::1;::::0;8630;8679::::1;8559:153:::0;:::o;1717:145:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:48;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;-1:-1:-1;;;;;;1836:19:48::1;::::0;;1717:145::o;8184:175:8:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;8262:33:8;::::1;8298:5;8262:33:::0;;;:17:::1;:33;::::0;;;;;:41;;-1:-1:-1;;8262:41:8::1;::::0;;8319:33;::::1;::::0;8298:5;8319:33:::1;8184:175:::0;:::o;5187:684::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;5360:34:8;::::1;;::::0;;;:21:::1;:34;::::0;;;;;::::1;;5352:87;;;;-1:-1:-1::0;;;5352:87:8::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5471:6;:34;;;;;5493:11;-1:-1:-1::0;;;;;5482:22:8::1;:7;-1:-1:-1::0;;;;;5482:22:8::1;;5471:34;5470:81;;;;5512:6;5511:7;:39;;;;;5538:11;-1:-1:-1::0;;;;;5523:26:8::1;:11;-1:-1:-1::0;;;;;5523:26:8::1;;5511:39;5449:179;;;;-1:-1:-1::0;;;5449:179:8::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5671:53;::::0;;-1:-1:-1;;;;;5671:53:8;;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;5661:64;;;;::::1;::::0;;;;5639:19:::1;5736:31:::0;;;:18:::1;:31:::0;;;;;;;:38;;-1:-1:-1;;5736:38:8::1;5770:4;5736:38;::::0;;5790:74;;;;;;;;;5661:64;;5671:53;5790:74:::1;::::0;;;;;;;;::::1;1367:1:48;5187:684:8::0;;;;:::o;1094:77:48:-;1132:7;1158:6;-1:-1:-1;;;;;1158:6:48;1094:77;:::o;4559:125:8:-;-1:-1:-1;;;;;4651:26:8;4628:4;4651:26;;;:17;:26;;;;;;;;;4559:125::o;7100:177::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;7179:34:8;::::1;;::::0;;;:21:::1;:34;::::0;;;;;:41;;-1:-1:-1;;7179:41:8::1;7216:4;7179:41;::::0;;7236:34;::::1;::::0;7179;7236::::1;7100:177:::0;:::o;6373:398::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;6570:53:8::1;::::0;;-1:-1:-1;;;;;6570:53:8;;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;6560:64;;;;::::1;::::0;;;;6538:19:::1;6635:31:::0;;;:18:::1;:31:::0;;;;;;;:39;;-1:-1:-1;;6635:39:8::1;::::0;;6690:74;;;;;;;;;6560:64;;6570:53;6690:74:::1;::::0;;;;;;;;::::1;1367:1:48;6373:398:8::0;;;;:::o;8912:154::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;8983:26:8;::::1;9012:5;8983:26:::0;;;:17:::1;:26;::::0;;;;;:34;;-1:-1:-1;;8983:34:8::1;::::0;;9033:26;::::1;::::0;9012:5;9033:26:::1;8912:154:::0;:::o;7841:176::-;2752:11;;;;;;;;;-1:-1:-1;;;;;2752:11:8;-1:-1:-1;;;;;2731:50:8;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2731:52:8;-1:-1:-1;;;;;2717:66:8;:10;:66;2696:151;;;;-1:-1:-1;;;2696:151:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7921:33:8;::::1;;::::0;;;:17:::1;:33;::::0;;;;;:40;;-1:-1:-1;;7921:40:8::1;7957:4;7921:40;::::0;;7977:33;::::1;::::0;7921;7977::::1;7841:176:::0;:::o;2011:240:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1290:67:48;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:22:48;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:48::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:48;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;-1:-1:-1;;;;;;2227:17:48::1;-1:-1:-1::0;;;;;2227:17:48;;;::::1;::::0;;;::::1;::::0;;2011:240::o;422:26:8:-;;;-1:-1:-1;;;;;422:26:8;;:::o;3921:141::-;-1:-1:-1;;;;;4021:34:8;3998:4;4021:34;;;:21;:34;;;;;;;;;3921:141::o;623:104:46:-;710:10;623:104;:::o"
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "blacklistCallee(address)": "ebd31e8e",
+ "blacklistCollateral(address)": "15f73b01",
+ "blacklistOtoken(address)": "79df1e44",
+ "blacklistProduct(address,address,address,bool)": "a6dfe83f",
+ "isWhitelistedCallee(address)": "a2ae545a",
+ "isWhitelistedCollateral(address)": "f9839d89",
+ "isWhitelistedOtoken(address)": "11946b98",
+ "isWhitelistedProduct(address,address,address,bool)": "401a83cf",
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "transferOwnership(address)": "f2fde38b",
+ "whitelistCallee(address)": "708a0393",
+ "whitelistCollateral(address)": "a34626c4",
+ "whitelistOtoken(address)": "ec7127b6",
+ "whitelistProduct(address,address,address,bool)": "82d90ebf"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"CalleeBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"CalleeWhitelisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"}],\"name\":\"CollateralBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"}],\"name\":\"CollateralWhitelisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"}],\"name\":\"OtokenBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"}],\"name\":\"OtokenWhitelisted\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"strike\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPut\",\"type\":\"bool\"}],\"name\":\"ProductBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"strike\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPut\",\"type\":\"bool\"}],\"name\":\"ProductWhitelisted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"blacklistCallee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"blacklistCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otokenAddress\",\"type\":\"address\"}],\"name\":\"blacklistOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"blacklistProduct\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"isWhitelistedCallee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"isWhitelistedCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"isWhitelistedOtoken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"isWhitelistedProduct\",\"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\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"whitelistCallee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"whitelistCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otokenAddress\",\"type\":\"address\"}],\"name\":\"whitelistOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"whitelistProduct\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"blacklistCallee(address)\":{\"details\":\"can only be called from the owner address\",\"params\":{\"_callee\":\"callee address\"}},\"blacklistCollateral(address)\":{\"details\":\"can only be called from the owner address\",\"params\":{\"_collateral\":\"collateral asset address\"}},\"blacklistOtoken(address)\":{\"details\":\"can only be called from the owner address\",\"params\":{\"_otokenAddress\":\"oToken\"}},\"blacklistProduct(address,address,address,bool)\":{\"details\":\"product is the hash of underlying asset, strike asset, collateral asset, and isPut can only be called from the owner address\",\"params\":{\"_collateral\":\"asset that is held as collateral against short/written options\",\"_isPut\":\"True if a put option, False if a call option\",\"_strike\":\"asset that the strike price is denominated in\",\"_underlying\":\"asset that the option references\"}},\"constructor\":{\"details\":\"constructor\",\"params\":{\"_addressBook\":\"AddressBook module address\"}},\"isWhitelistedCallee(address)\":{\"params\":{\"_callee\":\"callee destination address\"},\"returns\":{\"_0\":\"boolean, True if the address is whitelisted\"}},\"isWhitelistedCollateral(address)\":{\"params\":{\"_collateral\":\"asset that is held as collateral against short/written options\"},\"returns\":{\"_0\":\"boolean, True if the collateral is whitelisted\"}},\"isWhitelistedOtoken(address)\":{\"params\":{\"_otoken\":\"oToken address\"},\"returns\":{\"_0\":\"boolean, True if the oToken is whitelisted\"}},\"isWhitelistedProduct(address,address,address,bool)\":{\"details\":\"product is the hash of underlying asset, strike asset, collateral asset, and isPut\",\"params\":{\"_collateral\":\"asset that is held as collateral against short/written options\",\"_isPut\":\"True if a put option, False if a call option\",\"_strike\":\"asset that the strike price is denominated in\",\"_underlying\":\"asset that the option references\"},\"returns\":{\"_0\":\"boolean, True if product is whitelisted\"}},\"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.\"},\"whitelistCallee(address)\":{\"details\":\"can only be called from the owner address\",\"params\":{\"_callee\":\"callee address\"}},\"whitelistCollateral(address)\":{\"details\":\"can only be called from the owner address. This function is used to whitelist any asset other than Otoken as collateral. WhitelistOtoken() is used to whitelist Otoken contracts.\",\"params\":{\"_collateral\":\"collateral asset address\"}},\"whitelistOtoken(address)\":{\"details\":\"can only be called from the OtokenFactory address\",\"params\":{\"_otokenAddress\":\"oToken\"}},\"whitelistProduct(address,address,address,bool)\":{\"details\":\"product is the hash of underlying asset, strike asset, collateral asset, and isPut can only be called from the owner address\",\"params\":{\"_collateral\":\"asset that is held as collateral against short/written options\",\"_isPut\":\"True if a put option, False if a call option\",\"_strike\":\"asset that the strike price is denominated in\",\"_underlying\":\"asset that the option references\"}}},\"stateVariables\":{\"whitelistedCallee\":{\"details\":\"mapping to track whitelisted callee addresses for the call action\"},\"whitelistedCollateral\":{\"details\":\"mapping to track whitelisted collateral\"},\"whitelistedOtoken\":{\"details\":\"mapping to track whitelisted oTokens\"},\"whitelistedProduct\":{\"details\":\"mapping to track whitelisted products\"}},\"title\":\"Whitelist Module\"},\"userdoc\":{\"methods\":{\"addressBook()\":{\"notice\":\"AddressBook module address\"},\"blacklistCallee(address)\":{\"notice\":\"allows the owner to blacklist a destination address for the call action\"},\"blacklistCollateral(address)\":{\"notice\":\"allows the owner to blacklist a collateral address\"},\"blacklistOtoken(address)\":{\"notice\":\"allows the owner to blacklist an option\"},\"blacklistProduct(address,address,address,bool)\":{\"notice\":\"allow the owner to blacklist a product\"},\"isWhitelistedCallee(address)\":{\"notice\":\"check if a callee address is whitelisted for the call action\"},\"isWhitelistedCollateral(address)\":{\"notice\":\"check if a collateral asset is whitelisted\"},\"isWhitelistedOtoken(address)\":{\"notice\":\"check if an oToken is whitelisted\"},\"isWhitelistedProduct(address,address,address,bool)\":{\"notice\":\"check if a product is whitelisted\"},\"whitelistCallee(address)\":{\"notice\":\"allows the owner to whitelist a destination address for the call action\"},\"whitelistCollateral(address)\":{\"notice\":\"allows the owner to whitelist a collateral address\"},\"whitelistOtoken(address)\":{\"notice\":\"allows the OtokenFactory module to whitelist a new option\"},\"whitelistProduct(address,address,address,bool)\":{\"notice\":\"allows the owner to whitelist a product\"}},\"notice\":\"The whitelist module keeps track of all valid oToken addresses, product hashes, collateral addresses, and callee addresses.\"}},\"settings\":{\"compilationTarget\":{\"contracts/core/Whitelist.sol\":\"Whitelist\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/Whitelist.sol\":{\"keccak256\":\"0x44d09c3197a99855f4cb5318c769713dd2fc940d99117ecb089fde9dccf9d736\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://52be48c97c213bc750001d35a279ce8e57bf74eee025f6ddbf53ff67a17d2c81\",\"dweb:/ipfs/Qma3KteGsEvTzKVtoWHpnkgSeqbNjA7QM1XNdm1wZyT8MB\"]},\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]}},\"version\":1}"
+ }
+ },
+ "contracts/external/callees/PermitCallee.sol": {
+ "PermitCallee": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "_sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "callFunction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506102b2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80639c23da5014610030575b600080fd5b61004361003e366004610175565b610045565b005b6000806000806000806000808880602001905181019061006591906100eb565b97509750975097509750975097509750876001600160a01b031663d505accf888888888888886040518863ffffffff1660e01b81526004016100ad9796959493929190610223565b600060405180830381600087803b1580156100c757600080fd5b505af11580156100db573d6000803e3d6000fd5b5050505050505050505050505050565b600080600080600080600080610100898b031215610107578384fd5b885161011281610264565b60208a015190985061012381610264565b60408a015190975061013481610264565b80965050606089015194506080890151935060a089015160ff81168114610159578384fd5b60c08a015160e0909a0151989b979a5095989497939692505050565b60008060408385031215610187578182fd5b823561019281610264565b915060208381013567ffffffffffffffff808211156101af578384fd5b81860187601f8201126101c0578485fd5b80359250818311156101d0578485fd5b604051601f8401601f19168101850183811182821017156101ef578687fd5b6040528381528184018501891015610205578586fd5b83858301868301378585858301015280955050505050509250929050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b038116811461027957600080fd5b5056fea26469706673582212207c9296f957e860d47b0c2616861ea5d74c2b4db6baf430f48615bc5524096a9064736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B2 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 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x175 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x65 SWAP2 SWAP1 PUSH2 0xEB JUMP JUMPDEST SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD505ACCF DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAD SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x107 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 MLOAD PUSH2 0x112 DUP2 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x20 DUP11 ADD MLOAD SWAP1 SWAP9 POP PUSH2 0x123 DUP2 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD MLOAD SWAP1 SWAP8 POP PUSH2 0x134 DUP2 PUSH2 0x264 JUMP JUMPDEST DUP1 SWAP7 POP POP PUSH1 0x60 DUP10 ADD MLOAD SWAP5 POP PUSH1 0x80 DUP10 ADD MLOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x159 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0xC0 DUP11 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP11 ADD MLOAD SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x187 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x192 DUP2 PUSH2 0x264 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1AF JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x1C0 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x1D0 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP2 ADD DUP6 ADD DUP4 DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1EF JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP2 DUP5 ADD DUP6 ADD DUP10 LT ISZERO PUSH2 0x205 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP4 DUP6 DUP4 ADD DUP7 DUP4 ADD CALLDATACOPY DUP6 DUP6 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0x9296F957E860D47B0C2616861EA5D74C2B4DB6BAF430F48615BC552409 PUSH11 0x9064736F6C634300060A00 CALLER ",
+ "sourceMap": "394:552:9:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80639c23da5014610030575b600080fd5b61004361003e366004610175565b610045565b005b6000806000806000806000808880602001905181019061006591906100eb565b97509750975097509750975097509750876001600160a01b031663d505accf888888888888886040518863ffffffff1660e01b81526004016100ad9796959493929190610223565b600060405180830381600087803b1580156100c757600080fd5b505af11580156100db573d6000803e3d6000fd5b5050505050505050505050505050565b600080600080600080600080610100898b031215610107578384fd5b885161011281610264565b60208a015190985061012381610264565b60408a015190975061013481610264565b80965050606089015194506080890151935060a089015160ff81168114610159578384fd5b60c08a015160e0909a0151989b979a5095989497939692505050565b60008060408385031215610187578182fd5b823561019281610264565b915060208381013567ffffffffffffffff808211156101af578384fd5b81860187601f8201126101c0578485fd5b80359250818311156101d0578485fd5b604051601f8401601f19168101850183811182821017156101ef578687fd5b6040528381528184018501891015610205578586fd5b83858301868301378585858301015280955050505050509250929050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b038116811461027957600080fd5b5056fea26469706673582212207c9296f957e860d47b0c2616861ea5d74c2b4db6baf430f48615bc5524096a9064736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x175 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x65 SWAP2 SWAP1 PUSH2 0xEB JUMP JUMPDEST SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD505ACCF DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAD SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x107 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 MLOAD PUSH2 0x112 DUP2 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x20 DUP11 ADD MLOAD SWAP1 SWAP9 POP PUSH2 0x123 DUP2 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD MLOAD SWAP1 SWAP8 POP PUSH2 0x134 DUP2 PUSH2 0x264 JUMP JUMPDEST DUP1 SWAP7 POP POP PUSH1 0x60 DUP10 ADD MLOAD SWAP5 POP PUSH1 0x80 DUP10 ADD MLOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x159 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0xC0 DUP11 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP11 ADD MLOAD SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x187 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x192 DUP2 PUSH2 0x264 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1AF JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x1C0 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x1D0 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP2 ADD DUP6 ADD DUP4 DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1EF JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP2 DUP5 ADD DUP6 ADD DUP10 LT ISZERO PUSH2 0x205 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP4 DUP6 DUP4 ADD DUP7 DUP4 ADD CALLDATACOPY DUP6 DUP6 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0x9296F957E860D47B0C2616861EA5D74C2B4DB6BAF430F48615BC552409 PUSH11 0x9064736F6C634300060A00 CALLER ",
+ "sourceMap": "394:552:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;441:503;;;;;;;;;:::i;:::-;;;550:13;577;604:15;633:14;661:16;691:7;712:9;735;768:5;757:89;;;;;;;;;;;;;;536:310;;;;;;;;;;;;;;;;881:5;-1:-1:-1;;;;;857:37:9;;895:5;902:7;911:6;919:8;929:1;932;935;857:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;441:503;;;;;;;;;;:::o;1183:1264:-1:-;;;;;;;;;1439:3;1427:9;1418:7;1414:23;1410:33;1407:2;;;-1:-1;;1446:12;1407:2;250:6;244:13;262:41;297:5;262:41;;;1617:2;1675:22;;244:13;1498:82;;-1:-1;262:41;244:13;262:41;;;1744:2;1802:22;;244:13;1625:82;;-1:-1;262:41;244:13;262:41;;;1752:82;;;;1871:2;1925:9;1921:22;983:13;1879:74;;1990:3;2045:9;2041:22;983:13;1999:74;;2110:3;2163:9;2159:22;1122:13;5464:4;6106:5;5453:16;6083:5;6080:33;6070:2;;-1:-1;;6117:12;6070:2;2228:3;2279:22;;393:13;2348:3;2399:22;;;393:13;1401:1046;;;;-1:-1;1401:1046;;;;;;;-1:-1;;;1401:1046;2454:486;;;2592:2;2580:9;2571:7;2567:23;2563:32;2560:2;;;-1:-1;;2598:12;2560:2;93:6;80:20;105:41;140:5;105:41;;;2650:71;-1:-1;2786:2;2771:18;;;2758:32;2810:18;2799:30;;;2796:2;;;-1:-1;;2832:12;2796:2;2907:6;2896:9;2892:22;558:3;551:4;543:6;539:17;535:27;525:2;;-1:-1;;566:12;525:2;613:6;600:20;586:34;;2810:18;4710:6;4707:30;4704:2;;;-1:-1;;4740:12;4704:2;2592;4368:9;4813;4794:17;;-1:-1;;4790:33;4400:17;;;;4460:34;;;4496:22;;;4457:62;4454:2;;;-1:-1;;4522:12;4454:2;2592;4541:22;705:21;;;805:16;;;;;802:25;-1:-1;799:2;;;-1:-1;;830:12;799:2;5563:6;2786:2;747:6;743:17;2786:2;781:5;777:16;5540:30;-1:-1;2786:2;5610:6;781:5;5601:16;;5594:27;2852:72;;;;;;;;2554:386;;;;;;3421:884;-1:-1;;;;;5248:54;;;3018:37;;5248:54;;;;3877:2;3862:18;;3018:37;3960:2;3945:18;;3138:37;;;;4043:2;4028:18;;3138:37;;;;5464:4;5453:16;4122:3;4107:19;;3374:35;5259:42;4191:19;;3138:37;4290:3;4275:19;;3138:37;;;;3712:3;3697:19;;3683:622;5635:133;-1:-1;;;;;5248:54;;5702:43;;5692:2;;5759:1;;5749:12;5692:2;5686:82;"
+ },
+ "methodIdentifiers": {
+ "callFunction(address,bytes)": "9c23da50"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"callFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"details\":\"Contract for executing permit signature\",\"methods\":{},\"title\":\"PermitCallee\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/external/callees/PermitCallee.sol\":\"PermitCallee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/external/callees/PermitCallee.sol\":{\"keccak256\":\"0x6b68f60fdf0ea355ca2c678e891d25f3ea84e522c036f8aa17420398cbe9bbce\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8ce369685f201bbb988c95004f0daa35e5a9e797c5aad913931cd0cc8f257b16\",\"dweb:/ipfs/QmNkuNQ5L5xunLKzBMYgCezmN3TgxBb1BN7Kuutsc3AMsc\"]},\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]},\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]}},\"version\":1}"
+ }
+ },
+ "contracts/external/canonical-weth/WETH9.sol": {
+ "WETH9": {
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "src",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "guy",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "dst",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "Deposit",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "src",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "dst",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "src",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "Withdrawal",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_guy",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "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": "deposit",
+ "outputs": [],
+ "stateMutability": "payable",
+ "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": "_dst",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_wad",
+ "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": "_wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107ea806101246000396000f3fe6080604052600436106100a05760003560e01c8063313ce56711610064578063313ce5671461021f57806370a082311461024a57806395d89b411461027d578063a9059cbb14610292578063d0e30db0146102cb578063dd62ed3e146102d3576100af565b806306fdde03146100b4578063095ea7b31461013e57806318160ddd1461018b57806323b872dd146101b25780632e1a7d4d146101f5576100af565b366100af576100ad61030e565b005b600080fd5b3480156100c057600080fd5b506100c961035d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101035781810151838201526020016100eb565b50505050905090810190601f1680156101305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014a57600080fd5b506101776004803603604081101561016157600080fd5b506001600160a01b0381351690602001356103eb565b604080519115158252519081900360200190f35b34801561019757600080fd5b506101a0610451565b60408051918252519081900360200190f35b3480156101be57600080fd5b50610177600480360360608110156101d557600080fd5b506001600160a01b03813581169160208101359091169060400135610455565b34801561020157600080fd5b506100ad6004803603602081101561021857600080fd5b5035610603565b34801561022b57600080fd5b506102346106ca565b6040805160ff9092168252519081900360200190f35b34801561025657600080fd5b506101a06004803603602081101561026d57600080fd5b50356001600160a01b03166106d3565b34801561028957600080fd5b506100c96106e5565b34801561029e57600080fd5b50610177600480360360408110156102b557600080fd5b506001600160a01b03813516906020013561073f565b6100ad61030e565b3480156102df57600080fd5b506101a0600480360360408110156102f657600080fd5b506001600160a01b0381358116916020013516610753565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b0383166000908152600360205260408120548211156104ac5760405162461bcd60e51b81526004018080602001828103825260228152602001806107936022913960400191505060405180910390fd5b6001600160a01b03841633148015906104ea57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b15610592576001600160a01b0384166000908152600460209081526040808320338452909152902054821115610567576040805162461bcd60e51b815260206004820152601860248201527f57455448393a20696e76616c696420616c6c6f77616e63650000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156106515760405162461bcd60e51b81526004018080602001828103825260228152602001806107716022913960400191505060405180910390fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f19350505050158015610690573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b600061074c338484610455565b9392505050565b60046020908152600092835260408084209091529082529020548156fe57455448393a20696e73756666696369656e742073656e6465722062616c616e636557455448393a20696e73756666696369656e7420736f757263652062616c616e6365a264697066735822122061e087825c972b8a63b2dbc66c0c11f92f3491838d91babced6ff73c5e4339be64736f6c634300060a0033",
+ "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x115 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xBB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xE8 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xE8 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xE8 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xCD JUMP JUMPDEST POP PUSH2 0xF4 SWAP3 SWAP2 POP PUSH2 0xF8 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x112 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x7EA DUP1 PUSH2 0x124 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2D3 JUMPI PUSH2 0xAF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1F5 JUMPI PUSH2 0xAF JUMP JUMPDEST CALLDATASIZE PUSH2 0xAF JUMPI PUSH2 0xAD PUSH2 0x30E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC9 PUSH2 0x35D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x103 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x130 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A0 PUSH2 0x451 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x455 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x603 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH2 0x6CA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x6D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC9 PUSH2 0x6E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x73F JUMP JUMPDEST PUSH2 0xAD PUSH2 0x30E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x753 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3E3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3E3 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 0x3C6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 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 SLOAD DUP3 GT ISZERO PUSH2 0x4AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x793 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4EA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x592 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57455448393A20696E76616C696420616C6C6F77616E63650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x771 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x690 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3E3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3E3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74C CALLER DUP5 DUP5 PUSH2 0x455 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID JUMPI GASLIMIT SLOAD 0x48 CODECOPY GASPRICE KECCAK256 PUSH10 0x6E73756666696369656E PUSH21 0x2073656E6465722062616C616E636557455448393A KECCAK256 PUSH10 0x6E73756666696369656E PUSH21 0x20736F757263652062616C616E6365A26469706673 PC 0x22 SLT KECCAK256 PUSH2 0xE087 DUP3 0x5C SWAP8 0x2B DUP11 PUSH4 0xB2DBC66C 0xC GT 0xF9 0x2F CALLVALUE SWAP2 DUP4 DUP14 SWAP2 0xBA 0xBC 0xED PUSH16 0xF73C5E4339BE64736F6C634300060A00 CALLER ",
+ "sourceMap": "864:36:10:-:0;843:3301;864:36;;843:3301;864:36;;;-1:-1:-1;;;864:36:10;;;;;;-1:-1:-1;;864:36:10;;:::i;:::-;-1:-1:-1;906:29:10;;;;;;;;;;;;;-1:-1:-1;;;906:29:10;;;;;;;;;;;;:::i;:::-;-1:-1:-1;941:26:10;;;-1:-1:-1;;941:26:10;965:2;941:26;;;843:3301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;843:3301:10;;;-1:-1:-1;843:3301:10;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052600436106100a05760003560e01c8063313ce56711610064578063313ce5671461021f57806370a082311461024a57806395d89b411461027d578063a9059cbb14610292578063d0e30db0146102cb578063dd62ed3e146102d3576100af565b806306fdde03146100b4578063095ea7b31461013e57806318160ddd1461018b57806323b872dd146101b25780632e1a7d4d146101f5576100af565b366100af576100ad61030e565b005b600080fd5b3480156100c057600080fd5b506100c961035d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101035781810151838201526020016100eb565b50505050905090810190601f1680156101305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014a57600080fd5b506101776004803603604081101561016157600080fd5b506001600160a01b0381351690602001356103eb565b604080519115158252519081900360200190f35b34801561019757600080fd5b506101a0610451565b60408051918252519081900360200190f35b3480156101be57600080fd5b50610177600480360360608110156101d557600080fd5b506001600160a01b03813581169160208101359091169060400135610455565b34801561020157600080fd5b506100ad6004803603602081101561021857600080fd5b5035610603565b34801561022b57600080fd5b506102346106ca565b6040805160ff9092168252519081900360200190f35b34801561025657600080fd5b506101a06004803603602081101561026d57600080fd5b50356001600160a01b03166106d3565b34801561028957600080fd5b506100c96106e5565b34801561029e57600080fd5b50610177600480360360408110156102b557600080fd5b506001600160a01b03813516906020013561073f565b6100ad61030e565b3480156102df57600080fd5b506101a0600480360360408110156102f657600080fd5b506001600160a01b0381358116916020013516610753565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b0383166000908152600360205260408120548211156104ac5760405162461bcd60e51b81526004018080602001828103825260228152602001806107936022913960400191505060405180910390fd5b6001600160a01b03841633148015906104ea57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b15610592576001600160a01b0384166000908152600460209081526040808320338452909152902054821115610567576040805162461bcd60e51b815260206004820152601860248201527f57455448393a20696e76616c696420616c6c6f77616e63650000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156106515760405162461bcd60e51b81526004018080602001828103825260228152602001806107716022913960400191505060405180910390fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f19350505050158015610690573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b600061074c338484610455565b9392505050565b60046020908152600092835260408084209091529082529020548156fe57455448393a20696e73756666696369656e742073656e6465722062616c616e636557455448393a20696e73756666696369656e7420736f757263652062616c616e6365a264697066735822122061e087825c972b8a63b2dbc66c0c11f92f3491838d91babced6ff73c5e4339be64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2D3 JUMPI PUSH2 0xAF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1F5 JUMPI PUSH2 0xAF JUMP JUMPDEST CALLDATASIZE PUSH2 0xAF JUMPI PUSH2 0xAD PUSH2 0x30E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC9 PUSH2 0x35D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x103 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x130 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A0 PUSH2 0x451 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x455 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x603 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH2 0x6CA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x6D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC9 PUSH2 0x6E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x73F JUMP JUMPDEST PUSH2 0xAD PUSH2 0x30E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x753 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3E3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3E3 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 0x3C6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 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 SLOAD DUP3 GT ISZERO PUSH2 0x4AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x793 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4EA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x592 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57455448393A20696E76616C696420616C6C6F77616E63650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x771 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x690 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3E3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3E3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74C CALLER DUP5 DUP5 PUSH2 0x455 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID JUMPI GASLIMIT SLOAD 0x48 CODECOPY GASPRICE KECCAK256 PUSH10 0x6E73756666696369656E PUSH21 0x2073656E6465722062616C616E636557455448393A KECCAK256 PUSH10 0x6E73756666696369656E PUSH21 0x20736F757263652062616C616E6365A26469706673 PC 0x22 SLT KECCAK256 PUSH2 0xE087 DUP3 0x5C SWAP8 0x2B DUP11 PUSH4 0xB2DBC66C 0xC GT 0xF9 0x2F CALLVALUE SWAP2 DUP4 DUP14 SWAP2 0xBA 0xBC 0xED PUSH16 0xF73C5E4339BE64736F6C634300060A00 CALLER ",
+ "sourceMap": "843:3301:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1898:9;:7;:9::i;:::-;843:3301;;;;;864:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2872:186;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2872:186:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2599:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3582:560;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3582:560:10;;;;;;;;;;;;;;;;;:::i;2264:249::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2264:249:10;;:::i;941:26::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1565:44;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1565:44:10;-1:-1:-1;;;;;1565:44:10;;:::i;906:29::-;;;;;;;;;;;;;:::i;3235:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3235:128:10;;;;;;;;:::i;1980:130::-;;;:::i;1678:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1678:64:10;;;;;;;;;;:::i;1980:130::-;2034:10;2024:21;;;;:9;:21;;;;;;;;;:34;;2049:9;2024:34;;;;;;2073:30;;;;;;;;;;;;;;;;;1980:130::o;864:36::-;;;;;;;;;;;;;;;-1:-1:-1;;864:36:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2872:186::-;2959:10;2933:4;2949:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2949:27:10;;;;;;;;;;;:34;;;2998:32;;;;;;;2933:4;;2949:27;;2959:10;;2998:32;;;;;;;;-1:-1:-1;3047:4:10;2872:186;;;;:::o;2599:98::-;2669:21;2599:98;:::o;3582:560::-;-1:-1:-1;;;;;3716:15:10;;3692:4;3716:15;;;:9;:15;;;;;;:23;-1:-1:-1;3716:23:10;3708:70;;;;-1:-1:-1;;;3708:70:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3793:18:10;;3801:10;3793:18;;;;:64;;-1:-1:-1;;;;;;3815:15:10;;;;;;:9;:15;;;;;;;;3831:10;3815:27;;;;;;;;-1:-1:-1;;3815:42:10;;3793:64;3789:216;;;-1:-1:-1;;;;;3881:15:10;;;;;;:9;:15;;;;;;;;3897:10;3881:27;;;;;;;;:35;-1:-1:-1;3881:35:10;3873:72;;;;;-1:-1:-1;;;3873:72:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3959:15:10;;;;;;:9;:15;;;;;;;;3975:10;3959:27;;;;;;;:35;;;;;;;3789:216;-1:-1:-1;;;;;4015:15:10;;;;;;;:9;:15;;;;;;;;:23;;;;;;;4048:15;;;;;;;;;;:23;;;;;;4087:26;;;;;;;4048:15;;4087:26;;;;;;;;;;;-1:-1:-1;4131:4:10;3582:560;;;;;:::o;2264:249::-;2331:10;2321:21;;;;:9;:21;;;;;;:29;-1:-1:-1;2321:29:10;2313:76;;;;-1:-1:-1;;;2313:76:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:10;2399:21;;;;:9;:21;;;;;;:29;;;;;;;2438:25;;;;;;2424:4;;2438:25;;2399:21;2438:25;2424:4;2409:10;2438:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2478:28:10;;;;;;;;2489:10;;2478:28;;;;;;;;;;2264:249;:::o;941:26::-;;;;;;:::o;1565:44::-;;;;;;;;;;;;;:::o;906:29::-;;;;;;;;;;;;;;;-1:-1:-1;;906:29:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:128;3297:4;3320:36;3333:10;3345:4;3351;3320:12;:36::i;:::-;3313:43;3235:128;-1:-1:-1;;;3235:128:10:o;1678:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "deposit()": "d0e30db0",
+ "name()": "06fdde03",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd",
+ "withdraw(uint256)": "2e1a7d4d"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"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\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"_dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_wad\",\"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\":\"_wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"details\":\"A wrapper to use ETH as collateral\",\"methods\":{\"approve(address,uint256)\":{\"params\":{\"_guy\":\"address to approve\",\"_wad\":\"amount of WETH\"},\"returns\":{\"_0\":\"True if tx succeeds, False if not\"}},\"totalSupply()\":{\"returns\":{\"_0\":\"total supply\"}},\"transfer(address,uint256)\":{\"params\":{\"_dst\":\"destination address\",\"_wad\":\"amount to transfer\"},\"returns\":{\"_0\":\"True if tx succeeds, False if not\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"_dst\":\"destination address\",\"_src\":\"source address\",\"_wad\":\"amount to transfer\"},\"returns\":{\"_0\":\"True if tx succeeds, False if not\"}},\"withdraw(uint256)\":{\"details\":\"Unwrap from WETH to ETH\",\"params\":{\"_wad\":\"amount WETH to unwrap and withdraw\"}}},\"title\":\"WETH contract\"},\"userdoc\":{\"methods\":{\"allowance(address,address)\":{\"notice\":\"mapping between addresses and allowance amount\"},\"approve(address,uint256)\":{\"notice\":\"approve transfer\"},\"balanceOf(address)\":{\"notice\":\"mapping between address and WETH balance\"},\"deposit()\":{\"notice\":\"wrap deposited ETH into WETH\"},\"totalSupply()\":{\"notice\":\"get ETH total supply\"},\"transfer(address,uint256)\":{\"notice\":\"transfer WETH\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"transfer from address\"},\"withdraw(uint256)\":{\"notice\":\"withdraw ETH from contract\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/external/canonical-weth/WETH9.sol\":\"WETH9\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/external/canonical-weth/WETH9.sol\":{\"keccak256\":\"0x183bca8885cb2df4064f96f36e945befe33ee5c670c21a6b155de27ec0c613d0\",\"license\":\"GNU GPL\",\"urls\":[\"bzz-raw://849e256e73f9caae88c1ac6ccc1d2b8a58257bde18014d42957e62ef28c7306a\",\"dweb:/ipfs/QmNUaMRemWVPVwBgDymgZDycgNg3buQeNDi71uR2AC5qQp\"]}},\"version\":1}"
+ }
+ },
+ "contracts/external/proxies/PayableProxyController.sol": {
+ "PayableProxyController": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_controller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_marginPool",
+ "type": "address"
+ },
+ {
+ "internalType": "address payable",
+ "name": "_weth",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "inputs": [],
+ "name": "controller",
+ "outputs": [
+ {
+ "internalType": "contract Controller",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs[]",
+ "name": "_actions",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address payable",
+ "name": "_sendEthTo",
+ "type": "address"
+ }
+ ],
+ "name": "operate",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "weth",
+ "outputs": [
+ {
+ "internalType": "contract WETH9",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040523480156200001157600080fd5b506040516200154638038062001546833981016040819052620000349162000343565b60016000819055600280546001600160a01b03199081166001600160a01b03878116919091179092558254168382161791829055620000849116836000196200008d602090811b6200045017901c565b50505062000588565b8015806200011c5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90620000c69030908690600401620003f6565b60206040518083038186803b158015620000df57600080fd5b505afa158015620000f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011a9190620003bf565b155b620001445760405162461bcd60e51b81526004016200013b90620004df565b60405180910390fd5b6200019f8363095ea7b360e01b84846040516024016200016692919062000410565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b0393841617905290620001a416565b505050565b606062000200826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200024060201b6200054f179092919060201c565b8051909150156200019f578080602001905181019062000221919062000396565b6200019f5760405162461bcd60e51b81526004016200013b9062000495565b60606200025a84846000856001600160e01b036200026216565b949350505050565b606062000278856001600160e01b036200033d16565b620002975760405162461bcd60e51b81526004016200013b906200045e565b60006060866001600160a01b03168587604051620002b69190620003d8565b60006040518083038185875af1925050503d8060008114620002f5576040519150601f19603f3d011682016040523d82523d6000602084013e620002fa565b606091505b50915091508115620003105791506200025a9050565b805115620003215780518082602001fd5b8360405162461bcd60e51b81526004016200013b919062000429565b3b151590565b60008060006060848603121562000358578283fd5b835162000365816200056f565b602085015190935062000378816200056f565b60408501519092506200038b816200056f565b809150509250925092565b600060208284031215620003a8578081fd5b81518015158114620003b8578182fd5b9392505050565b600060208284031215620003d1578081fd5b5051919050565b60008251620003ec8184602087016200053c565b9190910192915050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006020825282518060208401526200044a8160408501602087016200053c565b601f01601f19169190910160400192915050565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606082015260800190565b60005b83811015620005595781810151838201526020016200053f565b8381111562000569576000848401525b50505050565b6001600160a01b03811681146200058557600080fd5b50565b610fae80620005986000396000f3fe6080604052600436106100345760003560e01c80633fc8cef314610069578063dbde292714610094578063f77c4791146100a7575b6001546001600160a01b031633146100675760405162461bcd60e51b815260040161005e90610dc4565b60405180910390fd5b005b34801561007557600080fd5b5061007e6100bc565b60405161008b9190610b18565b60405180910390f35b6100676100a2366004610930565b6100cb565b3480156100b357600080fd5b5061007e610441565b6001546001600160a01b031681565b600260005414156100ee5760405162461bcd60e51b815260040161005e90610e8f565b6002600055341561016357600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561014957600080fd5b505af115801561015d573d6000803e3d6000fd5b50505050505b60005b82518110156102ad57610177610840565b83828151811061018357fe5b6020026020010151905060006001600160a01b031681602001516001600160a01b03161461026b5780602001516001600160a01b0316336001600160a01b0316148061024f57506002546020820151604051635b1b1e7960e11b81526001600160a01b039092169163b6363cf2916101ff913390600401610b2c565b60206040518083038186803b15801561021757600080fd5b505afa15801561022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024f9190610a7a565b61026b5760405162461bcd60e51b815260040161005e90610d76565b60098151600a81111561027a57fe5b14156102a45760408101516001546102a4916001600160a01b03909116903463ffffffff61056616565b50600101610166565b50600254604051635b0bf86360e11b81526001600160a01b039091169063b617f0c6906102de908590600401610b5f565b600060405180830381600087803b1580156102f857600080fd5b505af115801561030c573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152600093506001600160a01b0390911691506370a0823190610343903090600401610b18565b60206040518083038186803b15801561035b57600080fd5b505afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610a9a565b90508015610437576001600160a01b0382166103c15760405162461bcd60e51b815260040161005e90610d19565b600154604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d906103f1908490600401610f1c565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b50610437925050506001600160a01b0383168261061d565b5050600160005550565b6002546001600160a01b031681565b8015806104d85750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906104869030908690600401610b2c565b60206040518083038186803b15801561049e57600080fd5b505afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190610a9a565b155b6104f45760405162461bcd60e51b815260040161005e90610ec6565b61054a8363095ea7b360e01b8484604051602401610513929190610b46565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526106b9565b505050565b606061055e8484600085610748565b949350505050565b60006105f682856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040161059a929190610b2c565b60206040518083038186803b1580156105b257600080fd5b505afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190610a9a565b9063ffffffff61080c16565b90506106178463095ea7b360e01b8584604051602401610513929190610b46565b50505050565b8047101561063d5760405162461bcd60e51b815260040161005e90610ce2565b6000826001600160a01b03168260405161065690610b15565b60006040518083038185875af1925050503d8060008114610693576040519150601f19603f3d011682016040523d82523d6000602084013e610698565b606091505b505090508061054a5760405162461bcd60e51b815260040161005e90610c85565b606061070e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661054f9092919063ffffffff16565b80519091501561054a578080602001905181019061072c9190610a7a565b61054a5760405162461bcd60e51b815260040161005e90610e45565b60606107538561083a565b61076f5760405162461bcd60e51b815260040161005e90610e0e565b60006060866001600160a01b0316858760405161078c9190610af9565b60006040518083038185875af1925050503d80600081146107c9576040519150601f19603f3d011682016040523d82523d6000602084013e6107ce565b606091505b509150915081156107e257915061055e9050565b8051156107f25780518082602001fd5b8360405162461bcd60e51b815260040161005e9190610c34565b6000828201838110156108315760405162461bcd60e51b815260040161005e90610c4e565b90505b92915050565b3b151590565b604080516101008101909152806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b80356001600160a01b038116811461083457600080fd5b600082601f8301126108c8578081fd5b813567ffffffffffffffff8111156108de578182fd5b6108f1601f8201601f1916602001610f25565b915080825283602082850101111561090857600080fd5b8060208401602084013760009082016020015292915050565b8035600b811061083457600080fd5b60008060408385031215610942578182fd5b823567ffffffffffffffff80821115610959578384fd5b81850186601f82011261096a578485fd5b803592508183111561097a578485fd5b60206109898182860201610f25565b84815281810190838301885b87811015610a5a5781358601610100818e03601f190112156109b5578a8bfd5b6109c0610100610f25565b6109cc8e888401610921565b81526109db8e604084016108a1565b878201526109ec8e606084016108a1565b60408201526109fe8e608084016108a1565b606082015260a0820135608082015260c082013560a082015260e082013560c082015261010082013589811115610a33578c8dfd5b610a418f89838601016108b8565b60e0830152508552509284019290840190600101610995565b50508097505050610a6d888289016108a1565b9450505050509250929050565b600060208284031215610a8b578081fd5b81518015158114610831578182fd5b600060208284031215610aab578081fd5b5051919050565b6001600160a01b03169052565b60008151808452610ad7816020860160208601610f4c565b601f01601f19169290920160200192915050565b600b8110610af557fe5b9052565b60008251610b0b818460208701610f4c565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015610c2657603f198984030185528151610100610ba4858351610aeb565b88820151610bb48a870182610ab2565b5087820151610bc589870182610ab2565b50606080830151610bd882880182610ab2565b50506080828101519086015260a0808301519086015260c0808301519086015260e080830151818701839052610c1083880182610abf565b988b019896505050928801925050600101610b83565b509098975050505050505050565b600060208252610c476020830184610abf565b9392505050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b60208082526037908201527f50617961626c6550726f7879436f6e74726f6c6c65723a2063616e6e6f74207360408201527f656e642045544820746f2061646472657373207a65726f000000000000000000606082015260800190565b6020808252602e908201527f50617961626c6550726f7879436f6e74726f6c6c65723a2063616e6e6f74206560408201526d03c32b1baba329030b1ba34b7b7160951b606082015260800190565b6020808252602a908201527f50617961626c6550726f7879436f6e74726f6c6c65723a2043616e6e6f7420726040820152690cac6cad2ecca408aa8960b31b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610f4457600080fd5b604052919050565b60005b83811015610f67578181015183820152602001610f4f565b83811115610617575050600091015256fea2646970667358221220513976e8702620ac97bce140acc1cb4d302110b80c455f863128b44d9c0eb86764736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1546 CODESIZE SUB DUP1 PUSH3 0x1546 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x343 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP2 SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP3 SLOAD AND DUP4 DUP3 AND OR SWAP2 DUP3 SWAP1 SSTORE PUSH3 0x84 SWAP2 AND DUP4 PUSH1 0x0 NOT PUSH3 0x8D PUSH1 0x20 SWAP1 DUP2 SHL PUSH3 0x450 OR SWAP1 SHR JUMP JUMPDEST POP POP POP PUSH3 0x588 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH3 0x11C JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH3 0xC6 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH3 0x3F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x11A SWAP2 SWAP1 PUSH3 0x3BF JUMP JUMPDEST ISZERO JUMPDEST PUSH3 0x144 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x13B SWAP1 PUSH3 0x4DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x19F DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH3 0x166 SWAP3 SWAP2 SWAP1 PUSH3 0x410 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP4 DUP5 AND OR SWAP1 MSTORE SWAP1 PUSH3 0x1A4 AND JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x200 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 PUSH3 0x240 PUSH1 0x20 SHL PUSH3 0x54F OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH3 0x19F JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH3 0x221 SWAP2 SWAP1 PUSH3 0x396 JUMP JUMPDEST PUSH3 0x19F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x13B SWAP1 PUSH3 0x495 JUMP JUMPDEST PUSH1 0x60 PUSH3 0x25A DUP5 DUP5 PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x262 AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x278 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x33D AND JUMP JUMPDEST PUSH3 0x297 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x13B SWAP1 PUSH3 0x45E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH3 0x2B6 SWAP2 SWAP1 PUSH3 0x3D8 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 PUSH3 0x2F5 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 PUSH3 0x2FA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH3 0x310 JUMPI SWAP2 POP PUSH3 0x25A SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH3 0x321 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x13B SWAP2 SWAP1 PUSH3 0x429 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x358 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x365 DUP2 PUSH3 0x56F JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x378 DUP2 PUSH3 0x56F JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH3 0x38B DUP2 PUSH3 0x56F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3A8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x3B8 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3D1 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x3EC DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x53C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x44A DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x53C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x559 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x53F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x569 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x585 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xFAE DUP1 PUSH3 0x598 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0xDBDE2927 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0xA7 JUMPI JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xDC4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7E PUSH2 0xBC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8B SWAP2 SWAP1 PUSH2 0xB18 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x67 PUSH2 0xA2 CALLDATASIZE PUSH1 0x4 PUSH2 0x930 JUMP JUMPDEST PUSH2 0xCB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7E PUSH2 0x441 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xE8F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLVALUE ISZERO PUSH2 0x163 JUMPI 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 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 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2AD JUMPI PUSH2 0x177 PUSH2 0x840 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x183 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x26B JUMPI DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x24F JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x5B1B1E79 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xB6363CF2 SWAP2 PUSH2 0x1FF SWAP2 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0xB2C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F SWAP2 SWAP1 PUSH2 0xA7A JUMP JUMPDEST PUSH2 0x26B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xD76 JUMP JUMPDEST PUSH1 0x9 DUP2 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x27A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 SLOAD PUSH2 0x2A4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 CALLVALUE PUSH4 0xFFFFFFFF PUSH2 0x566 AND JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x166 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5B0BF863 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xB617F0C6 SWAP1 PUSH2 0x2DE SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0xB5F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH2 0x343 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0xB18 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x393 SWAP2 SWAP1 PUSH2 0xA9A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x437 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH2 0x3F1 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0xF1C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 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 PUSH2 0x437 SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH2 0x61D JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x4D8 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH2 0x486 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xB2C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0xA9A JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x4F4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xEC6 JUMP JUMPDEST PUSH2 0x54A DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x513 SWAP3 SWAP2 SWAP1 PUSH2 0xB46 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 0x6B9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x55E DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x748 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F6 DUP3 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDD62ED3E ADDRESS DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x59A SWAP3 SWAP2 SWAP1 PUSH2 0xB2C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5EA SWAP2 SWAP1 PUSH2 0xA9A JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x80C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x617 DUP5 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP6 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x513 SWAP3 SWAP2 SWAP1 PUSH2 0xB46 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x63D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xCE2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x656 SWAP1 PUSH2 0xB15 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 0x693 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 0x698 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x54A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x70E 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 0x54F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x54A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x72C SWAP2 SWAP1 PUSH2 0xA7A JUMP JUMPDEST PUSH2 0x54A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xE45 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x753 DUP6 PUSH2 0x83A JUMP JUMPDEST PUSH2 0x76F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xE0E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x78C SWAP2 SWAP1 PUSH2 0xAF9 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 0x7C9 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 0x7CE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x7E2 JUMPI SWAP2 POP PUSH2 0x55E SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x7F2 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP2 SWAP1 PUSH2 0xC34 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x831 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xC4E JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE DUP1 PUSH1 0x0 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 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 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8C8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8DE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x8F1 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xF25 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x908 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xB DUP2 LT PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x942 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x959 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x96A JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x97A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 PUSH2 0x989 DUP2 DUP3 DUP7 MUL ADD PUSH2 0xF25 JUMP JUMPDEST DUP5 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP4 DUP4 ADD DUP9 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0xA5A JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x100 DUP2 DUP15 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH2 0x9B5 JUMPI DUP11 DUP12 REVERT JUMPDEST PUSH2 0x9C0 PUSH2 0x100 PUSH2 0xF25 JUMP JUMPDEST PUSH2 0x9CC DUP15 DUP9 DUP5 ADD PUSH2 0x921 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x9DB DUP15 PUSH1 0x40 DUP5 ADD PUSH2 0x8A1 JUMP JUMPDEST DUP8 DUP3 ADD MSTORE PUSH2 0x9EC DUP15 PUSH1 0x60 DUP5 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x9FE DUP15 PUSH1 0x80 DUP5 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xE0 DUP3 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x100 DUP3 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0xA33 JUMPI DUP13 DUP14 REVERT JUMPDEST PUSH2 0xA41 DUP16 DUP10 DUP4 DUP7 ADD ADD PUSH2 0x8B8 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP DUP6 MSTORE POP SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x995 JUMP JUMPDEST POP POP DUP1 SWAP8 POP POP POP PUSH2 0xA6D DUP9 DUP3 DUP10 ADD PUSH2 0x8A1 JUMP JUMPDEST SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA8B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x831 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAB JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xAD7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xF4C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xB DUP2 LT PUSH2 0xAF5 JUMPI INVALID JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xB0B DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xF4C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x40 SWAP1 DUP2 DUP6 ADD SWAP1 DUP1 DUP5 MUL DUP7 ADD DUP4 ADD DUP8 DUP6 ADD DUP7 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC26 JUMPI PUSH1 0x3F NOT DUP10 DUP5 SUB ADD DUP6 MSTORE DUP2 MLOAD PUSH2 0x100 PUSH2 0xBA4 DUP6 DUP4 MLOAD PUSH2 0xAEB JUMP JUMPDEST DUP9 DUP3 ADD MLOAD PUSH2 0xBB4 DUP11 DUP8 ADD DUP3 PUSH2 0xAB2 JUMP JUMPDEST POP DUP8 DUP3 ADD MLOAD PUSH2 0xBC5 DUP10 DUP8 ADD DUP3 PUSH2 0xAB2 JUMP JUMPDEST POP PUSH1 0x60 DUP1 DUP4 ADD MLOAD PUSH2 0xBD8 DUP3 DUP9 ADD DUP3 PUSH2 0xAB2 JUMP JUMPDEST POP POP PUSH1 0x80 DUP3 DUP2 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xE0 DUP1 DUP4 ADD MLOAD DUP2 DUP8 ADD DUP4 SWAP1 MSTORE PUSH2 0xC10 DUP4 DUP9 ADD DUP3 PUSH2 0xABF JUMP JUMPDEST SWAP9 DUP12 ADD SWAP9 SWAP7 POP POP POP SWAP3 DUP9 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0xB83 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xC47 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xABF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3A SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x37 SWAP1 DUP3 ADD MSTORE PUSH32 0x50617961626C6550726F7879436F6E74726F6C6C65723A2063616E6E6F742073 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x656E642045544820746F2061646472657373207A65726F000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x50617961626C6550726F7879436F6E74726F6C6C65723A2063616E6E6F742065 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x3C32B1BABA329030B1BA34B7B71 PUSH1 0x95 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x50617961626C6550726F7879436F6E74726F6C6C65723A2043616E6E6F742072 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0xCAC6CAD2ECCA408AA89 PUSH1 0xB3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xF44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF67 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF4F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x617 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MLOAD CODECOPY PUSH23 0xE8702620AC97BCE140ACC1CB4D302110B80C455F863128 0xB4 0x4D SWAP13 0xE 0xB8 PUSH8 0x64736F6C63430006 EXP STOP CALLER ",
+ "sourceMap": "671:2464:11:-:0;;;866:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1662:1:49;1776:7;:22;;;990:10:11;:36;;-1:-1:-1;;;;;;990:36:11;;;-1:-1:-1;;;;;990:36:11;;;;;;;;;;1036:19;;;;;;;;;;;1065:67;;1088:4;1107:11;-1:-1:-1;;1065:41:11;;;;;;;:67;;:::i;:::-;866:273;;;671:2464;;1499:664:50;1915:10;;;1914:62;;-1:-1:-1;1931:39:50;;-1:-1:-1;;;1931:39:50;;-1:-1:-1;;;;;1931:15:50;;;;;:39;;1955:4;;1962:7;;1931:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;1914:62;1893:163;;;;-1:-1:-1;;;1893:163:50;;;;;;;;;;;;;;;;;2066:90;2086:5;2116:22;;;2140:7;2149:5;2093:62;;;;;;;;;;;;;;;;;-1:-1:-1;;2093:62:50;;;;;;;;;;;-1:-1:-1;;;;;;2093:62:50;;;;-1:-1:-1;;;;;2093:62:50;;;;;;;2066:19;:90;:::i;:::-;1499:664;;;:::o;3279:771::-;3706:23;3732:69;3760:4;3732:69;;;;;;;;;;;;;;;;;3740:5;-1:-1:-1;;;;;3732:27:50;;;;;;;:69;;;;;:::i;:::-;3815:17;;3706:95;;-1:-1:-1;3815:21:50;3811:233;;3967:10;3956:30;;;;;;;;;;;;;;3948:85;;;;-1:-1:-1;;;3948:85:50;;;;;;;;3626:224:45;3759:12;3790:53;3813:6;3821:4;3827:1;3830:12;-1:-1:-1;;;;;3790:22:45;:53;:::i;:::-;3783:60;3626:224;-1:-1:-1;;;;3626:224:45:o;5071:994::-;5239:12;5271:18;5282:6;-1:-1:-1;;;;;5271:10:45;:18;:::i;:::-;5263:60;;;;-1:-1:-1;;;5263:60:45;;;;;;;;;5394:12;5408:23;5435:6;-1:-1:-1;;;;;5435:11:45;5454:8;5464:4;5435:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:76;;;;5483:7;5479:580;;;5513:10;-1:-1:-1;5506:17:45;;-1:-1:-1;5506:17:45;5479:580;5624:17;;:21;5620:429;;5882:10;5876:17;5942:15;5929:10;5925:2;5921:19;5914:44;5831:145;6021:12;6014:20;;-1:-1:-1;;;6014:20:45;;;;;;;;;751:433;1123:20;1169:8;;;751:433::o;579:551:-1:-;;;;736:2;724:9;715:7;711:23;707:32;704:2;;;-1:-1;;742:12;704:2;89:6;83:13;101:33;128:5;101:33;;;905:2;955:22;;83:13;794:74;;-1:-1;101:33;83:13;101:33;;;1024:2;1082:22;;232:13;913:74;;-1:-1;250:41;232:13;250:41;;;1032:82;;;;698:432;;;;;;1137:257;;1249:2;1237:9;1228:7;1224:23;1220:32;1217:2;;;-1:-1;;1255:12;1217:2;384:6;378:13;8110:5;7150:13;7143:21;8088:5;8085:32;8075:2;;-1:-1;;8121:12;8075:2;1307:71;1211:183;-1:-1;;;1211:183;1401:263;;1516:2;1504:9;1495:7;1491:23;1487:32;1484:2;;;-1:-1;;1522:12;1484:2;-1:-1;516:13;;1478:186;-1:-1;1478:186;3754:271;;1951:5;6385:12;2062:52;2107:6;2102:3;2095:4;2088:5;2084:16;2062:52;;;2126:16;;;;;3888:137;-1:-1;;3888:137;4032:333;-1:-1;;;;;7238:54;;;1742:37;;7238:54;;4351:2;4336:18;;1742:37;4187:2;4172:18;;4158:207;4372:333;-1:-1;;;;;7238:54;;;;1742:37;;4691:2;4676:18;;3705:37;4527:2;4512:18;;4498:207;4712:310;;4859:2;4880:17;4873:47;2299:5;6385:12;6824:6;4859:2;4848:9;4844:18;6812:19;2393:52;2438:6;6852:14;4848:9;6852:14;4859:2;2419:5;2415:16;2393:52;;;7744:7;7728:14;-1:-1;;7724:28;2457:39;;;;6852:14;2457:39;;4830:192;-1:-1;;4830:192;5029:416;5229:2;5243:47;;;2733:2;5214:18;;;6812:19;2769:31;6852:14;;;2749:52;2820:12;;;5200:245;5452:416;5652:2;5666:47;;;3071:2;5637:18;;;6812:19;3107:34;6852:14;;;3087:55;-1:-1;;;3162:12;;;3155:34;3208:12;;;5623:245;5875:416;6075:2;6089:47;;;3459:2;6060:18;;;6812:19;3495:34;6852:14;;;3475:55;3564:24;3550:12;;;3543:46;3608:12;;;6046:245;7384:268;7449:1;7456:101;7470:6;7467:1;7464:13;7456:101;;;7537:11;;;7531:18;7518:11;;;7511:39;7492:2;7485:10;7456:101;;;7572:6;7569:1;7566:13;7563:2;;;7449:1;7628:6;7623:3;7619:16;7612:27;7563:2;;7433:219;;;;7765:117;-1:-1;;;;;7238:54;;7824:35;;7814:2;;7873:1;;7863:12;7814:2;7808:74;;;671:2464:11;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052600436106100345760003560e01c80633fc8cef314610069578063dbde292714610094578063f77c4791146100a7575b6001546001600160a01b031633146100675760405162461bcd60e51b815260040161005e90610dc4565b60405180910390fd5b005b34801561007557600080fd5b5061007e6100bc565b60405161008b9190610b18565b60405180910390f35b6100676100a2366004610930565b6100cb565b3480156100b357600080fd5b5061007e610441565b6001546001600160a01b031681565b600260005414156100ee5760405162461bcd60e51b815260040161005e90610e8f565b6002600055341561016357600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561014957600080fd5b505af115801561015d573d6000803e3d6000fd5b50505050505b60005b82518110156102ad57610177610840565b83828151811061018357fe5b6020026020010151905060006001600160a01b031681602001516001600160a01b03161461026b5780602001516001600160a01b0316336001600160a01b0316148061024f57506002546020820151604051635b1b1e7960e11b81526001600160a01b039092169163b6363cf2916101ff913390600401610b2c565b60206040518083038186803b15801561021757600080fd5b505afa15801561022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024f9190610a7a565b61026b5760405162461bcd60e51b815260040161005e90610d76565b60098151600a81111561027a57fe5b14156102a45760408101516001546102a4916001600160a01b03909116903463ffffffff61056616565b50600101610166565b50600254604051635b0bf86360e11b81526001600160a01b039091169063b617f0c6906102de908590600401610b5f565b600060405180830381600087803b1580156102f857600080fd5b505af115801561030c573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152600093506001600160a01b0390911691506370a0823190610343903090600401610b18565b60206040518083038186803b15801561035b57600080fd5b505afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610a9a565b90508015610437576001600160a01b0382166103c15760405162461bcd60e51b815260040161005e90610d19565b600154604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d906103f1908490600401610f1c565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b50610437925050506001600160a01b0383168261061d565b5050600160005550565b6002546001600160a01b031681565b8015806104d85750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906104869030908690600401610b2c565b60206040518083038186803b15801561049e57600080fd5b505afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190610a9a565b155b6104f45760405162461bcd60e51b815260040161005e90610ec6565b61054a8363095ea7b360e01b8484604051602401610513929190610b46565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526106b9565b505050565b606061055e8484600085610748565b949350505050565b60006105f682856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040161059a929190610b2c565b60206040518083038186803b1580156105b257600080fd5b505afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190610a9a565b9063ffffffff61080c16565b90506106178463095ea7b360e01b8584604051602401610513929190610b46565b50505050565b8047101561063d5760405162461bcd60e51b815260040161005e90610ce2565b6000826001600160a01b03168260405161065690610b15565b60006040518083038185875af1925050503d8060008114610693576040519150601f19603f3d011682016040523d82523d6000602084013e610698565b606091505b505090508061054a5760405162461bcd60e51b815260040161005e90610c85565b606061070e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661054f9092919063ffffffff16565b80519091501561054a578080602001905181019061072c9190610a7a565b61054a5760405162461bcd60e51b815260040161005e90610e45565b60606107538561083a565b61076f5760405162461bcd60e51b815260040161005e90610e0e565b60006060866001600160a01b0316858760405161078c9190610af9565b60006040518083038185875af1925050503d80600081146107c9576040519150601f19603f3d011682016040523d82523d6000602084013e6107ce565b606091505b509150915081156107e257915061055e9050565b8051156107f25780518082602001fd5b8360405162461bcd60e51b815260040161005e9190610c34565b6000828201838110156108315760405162461bcd60e51b815260040161005e90610c4e565b90505b92915050565b3b151590565b604080516101008101909152806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b80356001600160a01b038116811461083457600080fd5b600082601f8301126108c8578081fd5b813567ffffffffffffffff8111156108de578182fd5b6108f1601f8201601f1916602001610f25565b915080825283602082850101111561090857600080fd5b8060208401602084013760009082016020015292915050565b8035600b811061083457600080fd5b60008060408385031215610942578182fd5b823567ffffffffffffffff80821115610959578384fd5b81850186601f82011261096a578485fd5b803592508183111561097a578485fd5b60206109898182860201610f25565b84815281810190838301885b87811015610a5a5781358601610100818e03601f190112156109b5578a8bfd5b6109c0610100610f25565b6109cc8e888401610921565b81526109db8e604084016108a1565b878201526109ec8e606084016108a1565b60408201526109fe8e608084016108a1565b606082015260a0820135608082015260c082013560a082015260e082013560c082015261010082013589811115610a33578c8dfd5b610a418f89838601016108b8565b60e0830152508552509284019290840190600101610995565b50508097505050610a6d888289016108a1565b9450505050509250929050565b600060208284031215610a8b578081fd5b81518015158114610831578182fd5b600060208284031215610aab578081fd5b5051919050565b6001600160a01b03169052565b60008151808452610ad7816020860160208601610f4c565b601f01601f19169290920160200192915050565b600b8110610af557fe5b9052565b60008251610b0b818460208701610f4c565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015610c2657603f198984030185528151610100610ba4858351610aeb565b88820151610bb48a870182610ab2565b5087820151610bc589870182610ab2565b50606080830151610bd882880182610ab2565b50506080828101519086015260a0808301519086015260c0808301519086015260e080830151818701839052610c1083880182610abf565b988b019896505050928801925050600101610b83565b509098975050505050505050565b600060208252610c476020830184610abf565b9392505050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b60208082526037908201527f50617961626c6550726f7879436f6e74726f6c6c65723a2063616e6e6f74207360408201527f656e642045544820746f2061646472657373207a65726f000000000000000000606082015260800190565b6020808252602e908201527f50617961626c6550726f7879436f6e74726f6c6c65723a2063616e6e6f74206560408201526d03c32b1baba329030b1ba34b7b7160951b606082015260800190565b6020808252602a908201527f50617961626c6550726f7879436f6e74726f6c6c65723a2043616e6e6f7420726040820152690cac6cad2ecca408aa8960b31b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610f4457600080fd5b604052919050565b60005b83811015610f67578181015183820152602001610f4f565b83811115610617575050600091015256fea2646970667358221220513976e8702620ac97bce140acc1cb4d302110b80c455f863128b44d9c0eb86764736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0xDBDE2927 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0xA7 JUMPI JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xDC4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7E PUSH2 0xBC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8B SWAP2 SWAP1 PUSH2 0xB18 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x67 PUSH2 0xA2 CALLDATASIZE PUSH1 0x4 PUSH2 0x930 JUMP JUMPDEST PUSH2 0xCB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7E PUSH2 0x441 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xE8F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLVALUE ISZERO PUSH2 0x163 JUMPI 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 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 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2AD JUMPI PUSH2 0x177 PUSH2 0x840 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x183 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x26B JUMPI DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x24F JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x5B1B1E79 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xB6363CF2 SWAP2 PUSH2 0x1FF SWAP2 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0xB2C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F SWAP2 SWAP1 PUSH2 0xA7A JUMP JUMPDEST PUSH2 0x26B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xD76 JUMP JUMPDEST PUSH1 0x9 DUP2 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x27A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 SLOAD PUSH2 0x2A4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 CALLVALUE PUSH4 0xFFFFFFFF PUSH2 0x566 AND JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x166 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5B0BF863 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xB617F0C6 SWAP1 PUSH2 0x2DE SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0xB5F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH2 0x343 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0xB18 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x393 SWAP2 SWAP1 PUSH2 0xA9A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x437 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH2 0x3F1 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0xF1C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 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 PUSH2 0x437 SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH2 0x61D JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x4D8 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH2 0x486 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xB2C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0xA9A JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x4F4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xEC6 JUMP JUMPDEST PUSH2 0x54A DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x513 SWAP3 SWAP2 SWAP1 PUSH2 0xB46 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 0x6B9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x55E DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x748 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F6 DUP3 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDD62ED3E ADDRESS DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x59A SWAP3 SWAP2 SWAP1 PUSH2 0xB2C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5EA SWAP2 SWAP1 PUSH2 0xA9A JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x80C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x617 DUP5 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP6 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x513 SWAP3 SWAP2 SWAP1 PUSH2 0xB46 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x63D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xCE2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x656 SWAP1 PUSH2 0xB15 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 0x693 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 0x698 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x54A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x70E 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 0x54F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x54A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x72C SWAP2 SWAP1 PUSH2 0xA7A JUMP JUMPDEST PUSH2 0x54A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xE45 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x753 DUP6 PUSH2 0x83A JUMP JUMPDEST PUSH2 0x76F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xE0E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x78C SWAP2 SWAP1 PUSH2 0xAF9 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 0x7C9 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 0x7CE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x7E2 JUMPI SWAP2 POP PUSH2 0x55E SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x7F2 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP2 SWAP1 PUSH2 0xC34 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x831 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5E SWAP1 PUSH2 0xC4E JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE DUP1 PUSH1 0x0 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 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 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8C8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8DE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x8F1 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xF25 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x908 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xB DUP2 LT PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x942 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x959 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x96A JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x97A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 PUSH2 0x989 DUP2 DUP3 DUP7 MUL ADD PUSH2 0xF25 JUMP JUMPDEST DUP5 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP4 DUP4 ADD DUP9 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0xA5A JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x100 DUP2 DUP15 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH2 0x9B5 JUMPI DUP11 DUP12 REVERT JUMPDEST PUSH2 0x9C0 PUSH2 0x100 PUSH2 0xF25 JUMP JUMPDEST PUSH2 0x9CC DUP15 DUP9 DUP5 ADD PUSH2 0x921 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x9DB DUP15 PUSH1 0x40 DUP5 ADD PUSH2 0x8A1 JUMP JUMPDEST DUP8 DUP3 ADD MSTORE PUSH2 0x9EC DUP15 PUSH1 0x60 DUP5 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x9FE DUP15 PUSH1 0x80 DUP5 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xE0 DUP3 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x100 DUP3 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0xA33 JUMPI DUP13 DUP14 REVERT JUMPDEST PUSH2 0xA41 DUP16 DUP10 DUP4 DUP7 ADD ADD PUSH2 0x8B8 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP DUP6 MSTORE POP SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x995 JUMP JUMPDEST POP POP DUP1 SWAP8 POP POP POP PUSH2 0xA6D DUP9 DUP3 DUP10 ADD PUSH2 0x8A1 JUMP JUMPDEST SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA8B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x831 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAB JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xAD7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xF4C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xB DUP2 LT PUSH2 0xAF5 JUMPI INVALID JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xB0B DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xF4C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x40 SWAP1 DUP2 DUP6 ADD SWAP1 DUP1 DUP5 MUL DUP7 ADD DUP4 ADD DUP8 DUP6 ADD DUP7 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC26 JUMPI PUSH1 0x3F NOT DUP10 DUP5 SUB ADD DUP6 MSTORE DUP2 MLOAD PUSH2 0x100 PUSH2 0xBA4 DUP6 DUP4 MLOAD PUSH2 0xAEB JUMP JUMPDEST DUP9 DUP3 ADD MLOAD PUSH2 0xBB4 DUP11 DUP8 ADD DUP3 PUSH2 0xAB2 JUMP JUMPDEST POP DUP8 DUP3 ADD MLOAD PUSH2 0xBC5 DUP10 DUP8 ADD DUP3 PUSH2 0xAB2 JUMP JUMPDEST POP PUSH1 0x60 DUP1 DUP4 ADD MLOAD PUSH2 0xBD8 DUP3 DUP9 ADD DUP3 PUSH2 0xAB2 JUMP JUMPDEST POP POP PUSH1 0x80 DUP3 DUP2 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xE0 DUP1 DUP4 ADD MLOAD DUP2 DUP8 ADD DUP4 SWAP1 MSTORE PUSH2 0xC10 DUP4 DUP9 ADD DUP3 PUSH2 0xABF JUMP JUMPDEST SWAP9 DUP12 ADD SWAP9 SWAP7 POP POP POP SWAP3 DUP9 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0xB83 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xC47 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xABF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3A SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x37 SWAP1 DUP3 ADD MSTORE PUSH32 0x50617961626C6550726F7879436F6E74726F6C6C65723A2063616E6E6F742073 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x656E642045544820746F2061646472657373207A65726F000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x50617961626C6550726F7879436F6E74726F6C6C65723A2063616E6E6F742065 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x3C32B1BABA329030B1BA34B7B71 PUSH1 0x95 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x50617961626C6550726F7879436F6E74726F6C6C65723A2043616E6E6F742072 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0xCAC6CAD2ECCA408AA89 PUSH1 0xB3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xF44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF67 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF4F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x617 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MLOAD CODECOPY PUSH23 0xE8702620AC97BCE140ACC1CB4D302110B80C455F863128 0xB4 0x4D SWAP13 0xE 0xB8 PUSH8 0x64736F6C63430006 EXP STOP CALLER ",
+ "sourceMap": "671:2464:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1351:4;;-1:-1:-1;;;;;1351:4:11;1329:10;:27;1321:82;;;;-1:-1:-1;;;1321:82:11;;;;;;;;;;;;;;;;;671:2464;808:17;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1721:1412;;;;;;;;;:::i;831:28::-;;;;;;;;;;;;;:::i;808:17::-;;;-1:-1:-1;;;;;808:17:11;;:::o;1721:1412::-;1705:1:49;2293:7;;:19;;2285:63;;;;-1:-1:-1;;;2285:63:49;;;;;;;;;1705:1;2423:7;:18;1880:9:11::1;:14:::0;1876:77:::1;;1910:4;;;;;;;;;-1:-1:-1::0;;;;;1910:4:11::1;-1:-1:-1::0;;;;;1910:12:11::1;;1930:9;1910:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;1876:77;1993:9;1988:725;2012:8;:15;2008:1;:19;1988:725;;;2048:32;;:::i;:::-;2083:8;2092:1;2083:11;;;;;;;;;;;;;;2048:46;;2198:1;-1:-1:-1::0;;;;;2174:26:11::1;:6;:12;;;-1:-1:-1::0;;;;;2174:26:11::1;;2170:263;;2264:6;:12;;;-1:-1:-1::0;;;;;2250:26:11::1;:10;-1:-1:-1::0;;;;;2250:26:11::1;;2249:81;;;-1:-1:-1::0;2282:10:11::1;::::0;2304:12:::1;::::0;::::1;::::0;2282:47:::1;::::0;-1:-1:-1;;;2282:47:11;;-1:-1:-1;;;;;2282:10:11;;::::1;::::0;:21:::1;::::0;:47:::1;::::0;2318:10:::1;::::0;2282:47:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2220:198;;;;-1:-1:-1::0;;;2220:198:11::1;;;;;;;;;2472:23;2451:17:::0;;:44:::1;::::0;::::1;;;;;;;2447:256;;;2656:20;::::0;::::1;::::0;2627:4:::1;::::0;2604:84:::1;::::0;-1:-1:-1;;;;;2627:4:11;;::::1;::::0;2678:9:::1;2604:84;:51;:84;:::i;:::-;-1:-1:-1::0;2029:3:11::1;;1988:725;;;-1:-1:-1::0;2723:10:11::1;::::0;:28:::1;::::0;-1:-1:-1;;;2723:28:11;;-1:-1:-1;;;;;2723:10:11;;::::1;::::0;:18:::1;::::0;:28:::1;::::0;2742:8;;2723:28:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2855:4:11::1;::::0;:29:::1;::::0;-1:-1:-1;;;2855:29:11;;2831:21:::1;::::0;-1:-1:-1;;;;;;2855:4:11;;::::1;::::0;-1:-1:-1;2855:14:11::1;::::0;:29:::1;::::0;2878:4:::1;::::0;2855:29:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2831:53:::0;-1:-1:-1;2898:18:11;;2894:233:::1;;-1:-1:-1::0;;;;;2940:24:11;::::1;2932:92;;;;-1:-1:-1::0;;;2932:92:11::1;;;;;;;;;3039:4;::::0;:28:::1;::::0;-1:-1:-1;;;3039:28:11;;-1:-1:-1;;;;;3039:4:11;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;3053:13;;3039:28:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;3081:35:11::1;::::0;-1:-1:-1;;;;;;;;3081:20:11;::::1;3102:13:::0;3081:20:::1;:35::i;:::-;-1:-1:-1::0;;1662:1:49;2596:7;:22;-1:-1:-1;1721:1412:11:o;831:28::-;;;-1:-1:-1;;;;;831:28:11;;:::o;1499:664:50:-;1915:10;;;1914:62;;-1:-1:-1;1931:39:50;;-1:-1:-1;;;1931:39:50;;-1:-1:-1;;;;;1931:15:50;;;;;:39;;1955:4;;1962:7;;1931:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;1914:62;1893:163;;;;-1:-1:-1;;;1893:163:50;;;;;;;;;2066:90;2086:5;2116:22;;;2140:7;2149:5;2093:62;;;;;;;;;;;;;;-1:-1:-1;;2093:62:50;;;;;;;;;;;;;;-1:-1:-1;;;;;2093:62:50;-1:-1:-1;;;;;;2093:62:50;;;;;;;;;;2066:19;:90::i;:::-;1499:664;;;:::o;3626:224:45:-;3759:12;3790:53;3813:6;3821:4;3827:1;3830:12;3790:22;:53::i;:::-;3783:60;3626:224;-1:-1:-1;;;;3626:224:45:o;2169:321:50:-;2303:20;2326:50;2370:5;2326;-1:-1:-1;;;;;2326:15:50;;2350:4;2357:7;2326:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;:50;:43;:50;:::i;:::-;2303:73;;2386:97;2406:5;2436:22;;;2460:7;2469:12;2413:69;;;;;;;;;;2386:97;2169:321;;;;:::o;2101:389:45:-;2215:6;2190:21;:31;;2182:73;;;;-1:-1:-1;;;2182:73:45;;;;;;;;;2344:12;2362:9;-1:-1:-1;;;;;2362:14:45;2384:6;2362:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:52;;;2413:7;2405:78;;;;-1:-1:-1;;;2405:78:45;;;;;;;;3279:771:50;3706:23;3732:69;3760:4;3732:69;;;;;;;;;;;;;;;;;3740:5;-1:-1:-1;;;;;3732:27:50;;;:69;;;;;:::i;:::-;3815:17;;3706:95;;-1:-1:-1;3815:21:50;3811:233;;3967:10;3956:30;;;;;;;;;;;;;;3948:85;;;;-1:-1:-1;;;3948:85:50;;;;;;;;5071:994:45;5239:12;5271:18;5282:6;5271:10;:18::i;:::-;5263:60;;;;-1:-1:-1;;;5263:60:45;;;;;;;;;5394:12;5408:23;5435:6;-1:-1:-1;;;;;5435:11:45;5454:8;5464:4;5435:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:76;;;;5483:7;5479:580;;;5513:10;-1:-1:-1;5506:17:45;;-1:-1:-1;5506:17:45;5479:580;5624:17;;:21;5620:429;;5882:10;5876:17;5942:15;5929:10;5925:2;5921:19;5914:44;5831:145;6021:12;6014:20;;-1:-1:-1;;;6014:20:45;;;;;;;;;922:176:51;980:7;1011:5;;;1034:6;;;;1026:46;;;;-1:-1:-1;;;1026:46:51;;;;;;;;;1090:1;-1:-1:-1;922:176:51;;;;;:::o;751:433:45:-;1123:20;1169:8;;;751:433::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;-1:-1;;;;;24598:54;;26567:35;;26557:2;;26616:1;;26606:12;1237:440;;1338:3;1331:4;1323:6;1319:17;1315:27;1305:2;;-1:-1;;1346:12;1305:2;1393:6;1380:20;22453:18;22445:6;22442:30;22439:2;;;-1:-1;;22475:12;22439:2;1415:64;22548:9;22529:17;;-1:-1;;22525:33;22616:4;22606:15;1415:64;;;1406:73;;1499:6;1492:5;1485:21;1603:3;22616:4;1594:6;1527;1585:16;;1582:25;1579:2;;;1620:1;;1610:12;1579:2;25940:6;22616:4;1527:6;1523:17;22616:4;1561:5;1557:16;25917:30;25996:1;25978:16;;;22616:4;25978:16;25971:27;1561:5;1298:379;-1:-1;;1298:379;1685:160;1767:20;;26974:2;26964:13;;26954:2;;26991:1;;26981:12;3644:574;;;3826:2;3814:9;3805:7;3801:23;3797:32;3794:2;;;-1:-1;;3832:12;3794:2;3890:17;3877:31;3928:18;;3920:6;3917:30;3914:2;;;-1:-1;;3950:12;3914:2;4069:6;4058:9;4054:22;476:3;469:4;461:6;457:17;453:27;443:2;;-1:-1;;484:12;443:2;531:6;518:20;504:34;;3928:18;22150:6;22147:30;22144:2;;;-1:-1;;22180:12;22144:2;22225:4;553:108;22225:4;;22217:6;22213:17;22278:15;553:108;;;689:21;;;746:14;;;;721:17;;;-1:-1;826:261;851:6;848:1;845:13;826:261;;;921:17;;909:30;;2001:6;1980:19;;;-1:-1;;1980:19;1976:32;1973:2;;;-1:-1;;2011:12;1973:2;2039:22;2001:6;2039:22;;;2149:64;2209:3;22225:4;909:30;;2149:64;;;2131:16;2124:90;2309:49;2354:3;3826:2;909:30;2330:22;2309:49;;;22225:4;2295:5;2291:16;2284:75;2462:49;2507:3;2483:22;909:30;2483:22;2462:49;;;3826:2;2448:5;2444:16;2437:75;2607:49;2652:3;2628:22;909:30;2628:22;2607:49;;;2483:22;2593:5;2589:16;2582:75;2776:22;909:30;2776:22;3433:20;2628:22;2741:5;2737:16;2730:75;2923:22;909:30;2923:22;3433:20;2776:22;2888:5;2884:16;2877:75;3069:22;909:30;3069:22;3433:20;2923:22;3034:5;3030:16;3023:75;2001:6;909:30;3172:19;3159:33;3928:18;3204:6;3201:30;3198:2;;;-1:-1;;3234:12;3198:2;3279:58;3333:3;22225:4;3324:6;909:30;3309:22;;3279:58;;;3069:22;3261:16;;3254:84;-1:-1;946:78;;-1:-1;1038:14;;;;1066;;;;873:1;866:9;826:261;;;830:14;;3970:116;;;;;4141:61;4194:7;22225:4;4174:9;4170:22;4141:61;;;4131:71;;;;;;3788:430;;;;;;4225:257;;4337:2;4325:9;4316:7;4312:23;4308:32;4305:2;;;-1:-1;;4343:12;4305:2;1182:6;1176:13;26853:5;24367:13;24360:21;26831:5;26828:32;26818:2;;-1:-1;;26864:12;4489:263;;4604:2;4592:9;4583:7;4579:23;4575:32;4572:2;;;-1:-1;;4610:12;4572:2;-1:-1;3581:13;;4566:186;-1:-1;4566:186;5182:103;-1:-1;;;;;24598:54;5243:37;;5237:48;6559:323;;6691:5;22955:12;23555:6;23550:3;23543:19;6774:52;6819:6;23592:4;23587:3;23583:14;23592:4;6800:5;6796:16;6774:52;;;22548:9;26357:14;-1:-1;;26353:28;6838:39;;;;23592:4;6838:39;;6639:243;-1:-1;;6639:243;7600:142;26478:2;26471:5;26468:13;26458:2;;26485:9;26458:2;7674:63;;7668:74;13958:271;;7049:5;22955:12;7160:52;7205:6;7200:3;7193:4;7186:5;7182:16;7160:52;;;7224:16;;;;;14092:137;-1:-1;;14092:137;14236:379;14600:10;14424:191;14622:238;-1:-1;;;;;24598:54;;;;5112:58;;14757:2;14742:18;;14728:132;14867:333;-1:-1;;;;;24598:54;;;5243:37;;24598:54;;15186:2;15171:18;;5243:37;15022:2;15007:18;;14993:207;15563:333;-1:-1;;;;;24598:54;;;;5243:37;;15882:2;15867:18;;13789:37;15718:2;15703:18;;15689:207;15903:482;16136:2;16150:47;;;22955:12;;16121:18;;;23543:19;;;15903:482;;16136:2;23583:14;;;;;;5942:17;;;5933:27;;;;22781:14;;;15903:482;6098:414;6123:6;6120:1;6117:13;6098:414;;;6175:20;;16125:9;6179:4;6175:20;;6170:3;6163:33;6230:6;6224:13;12341:6;12444:76;12505:14;12421:16;12415:23;12444:76;;;16136:2;12593:5;12589:16;12583:23;12612:63;16136:2;12664:3;12660:14;12646:12;12612:63;;;;23583:14;12756:5;12752:16;12746:23;12775:63;23583:14;12827:3;12823:14;12809:12;12775:63;;;;12918:4;;12911:5;12907:16;12901:23;12930:63;12918:4;12982:3;12978:14;12964:12;12930:63;;;-1:-1;;13075:4;13064:16;;;13058:23;13135:14;;;13789:37;13231:4;13220:16;;;13214:23;13291:14;;;13789:37;13386:4;13375:16;;;13369:23;13446:14;;;13789:37;13540:4;13529:16;;;13523:23;13566:14;;;13559:38;;;13612:71;12332:16;;;13523:23;13612:71;;;6491:14;;;;6244:128;-1:-1;;;23370:14;;;;-1:-1;;6145:1;6138:9;6098:414;;;-1:-1;16203:172;;16107:278;-1:-1;;;;;;;;16107:278;16932:310;;17079:2;17100:17;17093:47;17154:78;17079:2;17068:9;17064:18;17218:6;17154:78;;;17146:86;17050:192;-1:-1;;;17050:192;17249:416;17449:2;17463:47;;;8328:2;17434:18;;;23543:19;8364:29;23583:14;;;8344:50;8413:12;;;17420:245;17672:416;17872:2;17886:47;;;8664:2;17857:18;;;23543:19;8700:34;23583:14;;;8680:55;8769:28;8755:12;;;8748:50;8817:12;;;17843:245;18095:416;18295:2;18309:47;;;9068:2;18280:18;;;23543:19;9104:31;23583:14;;;9084:52;9155:12;;;18266:245;18518:416;18718:2;18732:47;;;9406:2;18703:18;;;23543:19;9442:34;23583:14;;;9422:55;9511:25;9497:12;;;9490:47;9556:12;;;18689:245;18941:416;19141:2;19155:47;;;9807:2;19126:18;;;23543:19;9843:34;23583:14;;;9823:55;-1:-1;;;9898:12;;;9891:38;9948:12;;;19112:245;19364:416;19564:2;19578:47;;;10199:2;19549:18;;;23543:19;10235:34;23583:14;;;10215:55;-1:-1;;;10290:12;;;10283:34;10336:12;;;19535:245;19787:416;19987:2;20001:47;;;10892:2;19972:18;;;23543:19;10928:31;23583:14;;;10908:52;10979:12;;;19958:245;20210:416;20410:2;20424:47;;;11230:2;20395:18;;;23543:19;11266:34;23583:14;;;11246:55;-1:-1;;;11321:12;;;11314:34;11367:12;;;20381:245;20633:416;20833:2;20847:47;;;11618:2;20818:18;;;23543:19;11654:33;23583:14;;;11634:54;11707:12;;;20804:245;21056:416;21256:2;21270:47;;;11958:2;21241:18;;;23543:19;11994:34;23583:14;;;11974:55;-1:-1;;;12049:12;;;12042:46;12107:12;;;21227:245;21479:222;13789:37;;;21606:2;21591:18;;21577:124;21708:256;21770:2;21764:9;21796:17;;;21871:18;21856:34;;21892:22;;;21853:62;21850:2;;;21928:1;;21918:12;21850:2;21770;21937:22;21748:216;;-1:-1;21748:216;26013:268;26078:1;26085:101;26099:6;26096:1;26093:13;26085:101;;;26166:11;;;26160:18;26147:11;;;26140:39;26121:2;26114:10;26085:101;;;26201:6;26198:1;26195:13;26192:2;;;-1:-1;;26078:1;26248:16;;26241:27;26062:219"
+ },
+ "methodIdentifiers": {
+ "controller()": "f77c4791",
+ "operate((uint8,address,address,address,uint256,uint256,uint256,bytes)[],address)": "dbde2927",
+ "weth()": "3fc8cef3"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_marginPool\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract Controller\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"_actions\",\"type\":\"tuple[]\"},{\"internalType\":\"address payable\",\"name\":\"_sendEthTo\",\"type\":\"address\"}],\"name\":\"operate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract WETH9\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"details\":\"Contract for wrapping/unwrapping ETH before/after interacting with the Gamma Protocol\",\"methods\":{\"operate((uint8,address,address,address,uint256,uint256,uint256,bytes)[],address)\":{\"details\":\"a wrapper for the Controller operate function, to wrap WETH and the beginning and unwrap WETH at the end of the execution\",\"params\":{\"_actions\":\"array of actions arguments\",\"_sendEthTo\":\"address to send the remaining eth to\"}}},\"title\":\"PayableProxyController\"},\"userdoc\":{\"methods\":{\"operate((uint8,address,address,address,uint256,uint256,uint256,bytes)[],address)\":{\"notice\":\"execute a number of actions\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/external/proxies/PayableProxyController.sol\":\"PayableProxyController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/Controller.sol\":{\"keccak256\":\"0x3eb654a99a0826194d0cccddda11b167bb0bd174b722cc28b967ec76a554c64b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://30ef3c3e0e3b907da30fe0f14dd3c6e20c8bac00df6c97cf11df03379ae35767\",\"dweb:/ipfs/QmVApGsW6vCdU4PHGgYE53TWfhAA6bcAW67fxo98jF7FKR\"]},\"contracts/external/canonical-weth/WETH9.sol\":{\"keccak256\":\"0x183bca8885cb2df4064f96f36e945befe33ee5c670c21a6b155de27ec0c613d0\",\"license\":\"GNU GPL\",\"urls\":[\"bzz-raw://849e256e73f9caae88c1ac6ccc1d2b8a58257bde18014d42957e62ef28c7306a\",\"dweb:/ipfs/QmNUaMRemWVPVwBgDymgZDycgNg3buQeNDi71uR2AC5qQp\"]},\"contracts/external/proxies/PayableProxyController.sol\":{\"keccak256\":\"0x8c7fcc7b370a7d50a34cbf3681e405064e1581b1be26b218c02355481068f69b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://dbefb24e9e6ed7cfab1b7f5c5302f6dcd9babf897c68171d416dfb4a327c370d\",\"dweb:/ipfs/Qmf18PiiyKNm7bCzWgZ1brosdrDskhTLeVyNSzsUhx5L74\"]},\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/MarginCalculatorInterface.sol\":{\"keccak256\":\"0x612ed78099f6e569226aea5a3b384c13a2906f803c23273d97a1d35141063830\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://89c8bdb741ce6a95a54ef2f439c71ecceb1925af06a3f50a52979916e281bbaf\",\"dweb:/ipfs/QmPgB45UPQ675CYWrcSg8jeSw88tSzbLysDSC36zfTfACG\"]},\"contracts/interfaces/MarginPoolInterface.sol\":{\"keccak256\":\"0x9c615edc86d4472d3ad8a488bec65fcfd682f1ad78476c4126786a72810d4b05\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f28e66c6b5cc0b2f7c31fe9bc097023e28939786128ce45ded9aa9d16b3f1b9d\",\"dweb:/ipfs/Qmat1EwHXkReWtrpFbFy4AtYKVQqyYqnGuNDfZLtCwRvT3\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]},\"contracts/interfaces/WhitelistInterface.sol\":{\"keccak256\":\"0xf4f8c9a4a9face43a6c1f36d385bdbbcb57d723530cb4f7c8e402b79fdf41479\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://38182c860371ac05f28813011bb9a0c8ffa742c6b1cfdd39ce19438cf10fa3c8\",\"dweb:/ipfs/QmaiZH48mYxVFHe4ZVKjWJzPEGpehpW5SThAzj6XebiCj9\"]},\"contracts/libs/Actions.sol\":{\"keccak256\":\"0x2466a1a3131110b868a7b44c63bea7b5b96f4dabef85955375ac2fe232668470\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cc5bb8b5a9b755a0f1516d9dabc27057839b0a7abc1231750f7d7eb27593a2fa\",\"dweb:/ipfs/Qmb9ELtRVGuBBzxpTuf72KSskwPS16bi35fxYHcRqX8WRy\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/ReentrancyGuard.sol\":{\"keccak256\":\"0x4a1442a7dc4bea3bba4c387998959e83d2e688470fb237fd1d4477fbb1cd69ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5408e90a419c640d5500894027bbd2909862ca30e50e08ebc18773b5ec1aa618\",\"dweb:/ipfs/QmT4zgbryLPWf5nC48nV39BY4dY7gKm5EMZchNVypLDg6z\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol\":{\"keccak256\":\"0x2a7a3283ace985c58643ad7045551778f50174a0665ea2383eccb04254d0c5ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://baf62f2ce6e2285dfeb8833dbb7e48462780accde795637faf39294db97baf87\",\"dweb:/ipfs/QmYbZCPR7gqVZ7QqkimQ85XyQLbS9AELmbAWWB1igRcJF5\"]},\"contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol\":{\"keccak256\":\"0x57cae6e6b294632e501446cbdf7a21ad8945869b249b49c699d84af63baaacbc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e736cd8a17692b7f7a4036bb7a8682ac040821eb7e3eeb1140eb40631e6f97d6\",\"dweb:/ipfs/QmdogWK1hx6KpGcq9iCieVGjGX4Bo7mFTokKfNq27Mh8Xd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/AddressBookInterface.sol": {
+ "AddressBookInterface": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getController",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getLiquidationManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getMarginCalculator",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getMarginPool",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOracle",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenFactory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenImpl",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getWhitelist",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_id",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "_newImpl",
+ "type": "address"
+ }
+ ],
+ "name": "setAddress",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_controller",
+ "type": "address"
+ }
+ ],
+ "name": "setController",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_liquidationManager",
+ "type": "address"
+ }
+ ],
+ "name": "setLiquidationManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_calculator",
+ "type": "address"
+ }
+ ],
+ "name": "setMarginCalculator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_marginPool",
+ "type": "address"
+ }
+ ],
+ "name": "setMarginPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otokenImpl",
+ "type": "address"
+ }
+ ],
+ "name": "setOracleImpl",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_factory",
+ "type": "address"
+ }
+ ],
+ "name": "setOtokenFactory",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otokenImpl",
+ "type": "address"
+ }
+ ],
+ "name": "setOtokenImpl",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_whitelist",
+ "type": "address"
+ }
+ ],
+ "name": "setWhitelist",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "getAddress(bytes32)": "21f8a721",
+ "getController()": "3018205f",
+ "getLiquidationManager()": "ee8a4632",
+ "getMarginCalculator()": "cf28493f",
+ "getMarginPool()": "75486342",
+ "getOracle()": "833b1fce",
+ "getOtokenFactory()": "1ffaf0db",
+ "getOtokenImpl()": "a8de41d5",
+ "getWhitelist()": "d01f63f5",
+ "setAddress(bytes32,address)": "ca446dd9",
+ "setController(address)": "92eefe9b",
+ "setLiquidationManager(address)": "38f92fc7",
+ "setMarginCalculator(address)": "e9f2e8be",
+ "setMarginPool(address)": "e7cf7841",
+ "setOracleImpl(address)": "ad144e92",
+ "setOtokenFactory(address)": "d94f323e",
+ "setOtokenImpl(address)": "b508ac99",
+ "setWhitelist(address)": "854cff2f"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarginCalculator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarginPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWhitelist\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_newImpl\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidationManager\",\"type\":\"address\"}],\"name\":\"setLiquidationManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_calculator\",\"type\":\"address\"}],\"name\":\"setMarginCalculator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_marginPool\",\"type\":\"address\"}],\"name\":\"setMarginPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otokenImpl\",\"type\":\"address\"}],\"name\":\"setOracleImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"name\":\"setOtokenFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otokenImpl\",\"type\":\"address\"}],\"name\":\"setOtokenImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_whitelist\",\"type\":\"address\"}],\"name\":\"setWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/AddressBookInterface.sol\":\"AddressBookInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/AggregatorInterface.sol": {
+ "AggregatorInterface": {
+ "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"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "decimals()": "313ce567",
+ "description()": "7284e416",
+ "getRoundData(uint80)": "9a6fc8f5",
+ "latestRoundData()": "feaf968c",
+ "version()": "54fd4d50"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":{\"details\":\"Interface of the Chainlink aggregator\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/AggregatorInterface.sol\":\"AggregatorInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/AggregatorInterface.sol\":{\"keccak256\":\"0xc3c386002d1d3a237c8eb0c43c7b26b073f50ceeadfde0dfad3f131dd0a72fa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://753b98595a6de7800958e0034a602b17096188d87e01fecf2b40fdfdb6937cef\",\"dweb:/ipfs/QmYRrAj5vSzD9PSdMqRp6YfVRoHLq44TKUnaEuLZb7wkmZ\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/CTokenInterface.sol": {
+ "CTokenInterface": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "exchangeRateStored",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "decimals()": "313ce567",
+ "exchangeRateStored()": "182df0f5"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of Compound cToken\",\"methods\":{\"exchangeRateStored()\":{\"returns\":{\"_0\":\"Calculated exchange rate scaled by 1e18\"}}}},\"userdoc\":{\"methods\":{\"exchangeRateStored()\":{\"notice\":\"Calculates the exchange rate from the underlying to the CToken\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/CTokenInterface.sol\":\"CTokenInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/CTokenInterface.sol\":{\"keccak256\":\"0x8f645adac095e22f77b0a317605ac81e3c1a3cd5f8a9c7fa0f6bda4d3ddb9c9a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5da24cd856a478bf6970b02a318128e069fa959affd5f3ea97a488f0bee1dd3e\",\"dweb:/ipfs/QmWcWdSUcmKUgVPhnQdnS3kRDrYYVEcsC2dXWZcgLB8fL1\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/CalleeInterface.sol": {
+ "CalleeInterface": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "_sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "callFunction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "callFunction(address,bytes)": "9c23da50"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"callFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract interface that can be called from Controller as a call action.\",\"methods\":{\"callFunction(address,bytes)\":{\"params\":{\"_data\":\"Arbitrary data given by the sender\",\"_sender\":\"The msg.sender to Controller\"}}}},\"userdoc\":{\"methods\":{\"callFunction(address,bytes)\":{\"notice\":\"Allows users to send this contract arbitrary data.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/CalleeInterface.sol\":\"CalleeInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/ERC20Interface.sol": {
+ "ERC20Interface": {
+ "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": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"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.\",\"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 `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` 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.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ERC20Interface.sol\":\"ERC20Interface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/MarginCalculatorInterface.sol": {
+ "MarginCalculatorInterface": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getExcessCollateral",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "netValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "isExcess",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "getExpiredPayoutRate",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultLatestUpdate",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_roundId",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLiquidatable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)": "cd43fbfb",
+ "getExpiredPayoutRate(address)": "47840930",
+ "isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)": "a6c56907"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"}],\"name\":\"getExcessCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"netValue\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isExcess\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"getExpiredPayoutRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_vaultLatestUpdate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_roundId\",\"type\":\"uint256\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/MarginCalculatorInterface.sol\":\"MarginCalculatorInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/MarginCalculatorInterface.sol\":{\"keccak256\":\"0x612ed78099f6e569226aea5a3b384c13a2906f803c23273d97a1d35141063830\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://89c8bdb741ce6a95a54ef2f439c71ecceb1925af06a3f50a52979916e281bbaf\",\"dweb:/ipfs/QmPgB45UPQ675CYWrcSg8jeSw88tSzbLysDSC36zfTfACG\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/MarginPoolInterface.sol": {
+ "MarginPoolInterface": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "_asset",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "_user",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_amount",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferToPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "_asset",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "_user",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_amount",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferToUser",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "farm",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "farmer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getStoredBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_farmer",
+ "type": "address"
+ }
+ ],
+ "name": "setFarmer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_user",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferToPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_user",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferToUser",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "batchTransferToPool(address[],address[],uint256[])": "4979cd14",
+ "batchTransferToUser(address[],address[],uint256[])": "86a19c5e",
+ "farm(address,address,uint256)": "baf46ba6",
+ "farmer()": "d811fcf0",
+ "getStoredBalance(address)": "c595b007",
+ "setFarmer(address)": "e2ed781c",
+ "transferToPool(address,address,uint256)": "dd2c99f7",
+ "transferToUser(address,address,uint256)": "fa93b2a5"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_asset\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_user\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amount\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_asset\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_user\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amount\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferToUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"farm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"farmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getStoredBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_farmer\",\"type\":\"address\"}],\"name\":\"setFarmer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/MarginPoolInterface.sol\":\"MarginPoolInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/MarginPoolInterface.sol\":{\"keccak256\":\"0x9c615edc86d4472d3ad8a488bec65fcfd682f1ad78476c4126786a72810d4b05\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f28e66c6b5cc0b2f7c31fe9bc097023e28939786128ce45ded9aa9d16b3f1b9d\",\"dweb:/ipfs/Qmat1EwHXkReWtrpFbFy4AtYKVQqyYqnGuNDfZLtCwRvT3\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/OpynPricerInterface.sol": {
+ "OpynPricerInterface": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getHistoricalPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "getHistoricalPrice(uint80)": "eec377c0",
+ "getPrice()": "98d5fdca"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getHistoricalPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/OpynPricerInterface.sol\":\"OpynPricerInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/OpynPricerInterface.sol\":{\"keccak256\":\"0xa937e5fa413ff096600cd4bb62795cda1aa6916a3ad4b1e50ab11aaf5cdd07c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://194bd27f9bbbac1a58c920bda262886f9cdc315985ad152c584f9715261d8317\",\"dweb:/ipfs/QmQGXWP6dNSBxhqrW93mAsS3E2ahBSNgnG5mBais6rgdaK\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/OracleInterface.sol": {
+ "OracleInterface": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "disputeExpiryPrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getChainlinkRoundData",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getDisputer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "getExpiryPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getPricer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "getPricerDisputePeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "getPricerLockingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "isDisputePeriodOver",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLockingPeriodOver",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "setAssetPricer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_disputePeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "setDisputePeriod",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_disputer",
+ "type": "address"
+ }
+ ],
+ "name": "setDisputer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_lockingPeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "setLockingPeriod",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "disputeExpiryPrice(address,uint256,uint256)": "57a37dca",
+ "getChainlinkRoundData(address,uint80)": "1b85462d",
+ "getDisputer()": "def3cb05",
+ "getExpiryPrice(address,uint256)": "01957f81",
+ "getPrice(address)": "41976e09",
+ "getPricer(address)": "2ecd8857",
+ "getPricerDisputePeriod(address)": "9c7fe9d6",
+ "getPricerLockingPeriod(address)": "b7e1d145",
+ "isDisputePeriodOver(address,uint256)": "5fdc7149",
+ "isLockingPeriodOver(address,uint256)": "d2f3b4e8",
+ "setAssetPricer(address,address)": "3fd3ec8f",
+ "setDisputePeriod(address,uint256)": "8b3cddaf",
+ "setDisputer(address)": "8ee5074d",
+ "setExpiryPrice(address,uint256,uint256)": "ee531409",
+ "setLockingPeriod(address,uint256)": "f19ae734"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"disputeExpiryPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getChainlinkRoundData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"getExpiryPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getPricer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"getPricerDisputePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"getPricerLockingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"isDisputePeriodOver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"isLockingPeriodOver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"setAssetPricer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_disputePeriod\",\"type\":\"uint256\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"setDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setExpiryPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lockingPeriod\",\"type\":\"uint256\"}],\"name\":\"setLockingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/OracleInterface.sol\":\"OracleInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/OtokenInterface.sol": {
+ "OtokenInterface": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "collateralAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "expiryTimestamp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenDetails",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "init",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isPut",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mintOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "strikeAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "strikePrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlyingAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "burnOtoken(address,uint256)": "56d878f7",
+ "collateralAsset()": "aabaecd6",
+ "expiryTimestamp()": "ade6e2aa",
+ "getOtokenDetails()": "af0968fc",
+ "init(address,address,address,address,uint256,uint256,bool)": "f630df34",
+ "isPut()": "f3c274a6",
+ "mintOtoken(address,uint256)": "51b0a410",
+ "strikeAsset()": "17d69bc8",
+ "strikePrice()": "c52987cf",
+ "underlyingAsset()": "7158da7c"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expiryTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenDetails\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPut\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strikeAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strikePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/OtokenInterface.sol\":\"OtokenInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/WSTETHInterface.sol": {
+ "WSTETHInterface": {
+ "abi": [
+ {
+ "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": "stEthPerToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "decimals()": "313ce567",
+ "name()": "06fdde03",
+ "stEthPerToken()": "035faf82",
+ "symbol()": "95d89b41"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"stEthPerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/WSTETHInterface.sol\":\"WSTETHInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/WSTETHInterface.sol\":{\"keccak256\":\"0x410f849507cbfb7593edcf49b1da43215e6137feae16954b907f8e3c02682447\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16eac7a0c8960b2d66fd6a1301441d2beb9410c2a854a17f5b4efa291db268ec\",\"dweb:/ipfs/QmXPEanGdXzahaJStsikGGrTn5fMojWiCF9r6AYWypUthZ\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/WhitelistInterface.sol": {
+ "WhitelistInterface": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "blacklistCallee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "blacklistCollateral",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "blacklistOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "blacklistProduct",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "isWhitelistedCallee",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "isWhitelistedCollateral",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "isWhitelistedOtoken",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "isWhitelistedProduct",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ }
+ ],
+ "name": "whitelistCallee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "whitelistCollateral",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "whitelistOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "whitelistProduct",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "blacklistCallee(address)": "ebd31e8e",
+ "blacklistCollateral(address)": "15f73b01",
+ "blacklistOtoken(address)": "79df1e44",
+ "blacklistProduct(address,address,address,bool)": "a6dfe83f",
+ "isWhitelistedCallee(address)": "a2ae545a",
+ "isWhitelistedCollateral(address)": "f9839d89",
+ "isWhitelistedOtoken(address)": "11946b98",
+ "isWhitelistedProduct(address,address,address,bool)": "401a83cf",
+ "whitelistCallee(address)": "708a0393",
+ "whitelistCollateral(address)": "a34626c4",
+ "whitelistOtoken(address)": "ec7127b6",
+ "whitelistProduct(address,address,address,bool)": "82d90ebf"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"blacklistCallee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"blacklistCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"blacklistOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"blacklistProduct\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"isWhitelistedCallee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"isWhitelistedCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"isWhitelistedOtoken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"isWhitelistedProduct\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"}],\"name\":\"whitelistCallee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"whitelistCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"whitelistOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"whitelistProduct\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/WhitelistInterface.sol\":\"WhitelistInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/WhitelistInterface.sol\":{\"keccak256\":\"0xf4f8c9a4a9face43a6c1f36d385bdbbcb57d723530cb4f7c8e402b79fdf41479\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://38182c860371ac05f28813011bb9a0c8ffa742c6b1cfdd39ce19438cf10fa3c8\",\"dweb:/ipfs/QmaiZH48mYxVFHe4ZVKjWJzPEGpehpW5SThAzj6XebiCj9\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/YearnVaultInterface.sol": {
+ "YearnVaultInterface": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "pricePerShare",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "decimals()": "313ce567",
+ "deposit(uint256)": "b6b55f25",
+ "name()": "06fdde03",
+ "pricePerShare()": "99530b06",
+ "symbol()": "95d89b41",
+ "withdraw(uint256)": "2e1a7d4d"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pricePerShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/YearnVaultInterface.sol\":\"YearnVaultInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/YearnVaultInterface.sol\":{\"keccak256\":\"0x20d7d090e5281983b354bf9faa43b272738996146e1ceecceb799a14c8373b6e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d5543480ce3f4c9cced95d8b207c523cccf2c7d4a9c8299401f0696367bcea1\",\"dweb:/ipfs/QmbFKtnEr87jyxdsToqw3FugHncy5UANvJGd89jtnAnF2P\"]}},\"version\":1}"
+ }
+ },
+ "contracts/interfaces/ZeroXExchangeInterface.sol": {
+ "ZeroXExchangeInterface": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct ZeroXExchangeInterface.LimitOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct ZeroXExchangeInterface.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128[]",
+ "name": "takerTokenFillAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "revertIfIncomplete",
+ "type": "bool"
+ }
+ ],
+ "name": "batchFillLimitOrders",
+ "outputs": [
+ {
+ "internalType": "uint128[]",
+ "name": "takerTokenFilledAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "uint128[]",
+ "name": "makerTokenFilledAmounts",
+ "type": "uint128[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "batchFillLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)": "1baaa00b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"makerToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"takerToken\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"makerAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"takerAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"takerTokenFeeAmount\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pool\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"internalType\":\"struct ZeroXExchangeInterface.LimitOrder[]\",\"name\":\"orders\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct ZeroXExchangeInterface.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint128[]\",\"name\":\"takerTokenFillAmounts\",\"type\":\"uint128[]\"},{\"internalType\":\"bool\",\"name\":\"revertIfIncomplete\",\"type\":\"bool\"}],\"name\":\"batchFillLimitOrders\",\"outputs\":[{\"internalType\":\"uint128[]\",\"name\":\"takerTokenFilledAmounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint128[]\",\"name\":\"makerTokenFilledAmounts\",\"type\":\"uint128[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ZeroX Exchange contract interface.\",\"methods\":{\"batchFillLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)\":{\"details\":\"Executes multiple calls of fillLimitOrder.\",\"params\":{\"orders\":\"Array of order specifications.\",\"signatures\":\"Array of proofs that orders have been created by makers.\",\"takerTokenFillAmounts\":\"Array of desired amounts of takerToken to sell in orders.\"},\"returns\":{\"makerTokenFilledAmounts\":\"Array of amount of makerToken(s) filled.\",\"takerTokenFilledAmounts\":\"Array of amount of takerToken(s) filled.\"}}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ZeroXExchangeInterface.sol\":\"ZeroXExchangeInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ZeroXExchangeInterface.sol\":{\"keccak256\":\"0x5fbb6560df1f3398ba1daa1461191bcd7e89cead09ccd2e18f517def122d733a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b721bf0287858ab2e3e3561ae68a23c4ad13b071f2982d609609a27cf58556a9\",\"dweb:/ipfs/QmUucGcsGcMCXrvmAg9LPjLgYANKm13EYhjo8VXLnzYepd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/libs/Actions.sol": {
+ "Actions": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122097645a101dc13840d470381db746d514e160c33405126017828abe68435cb1c264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 SWAP8 PUSH5 0x5A101DC138 BLOCKHASH 0xD4 PUSH17 0x381DB746D514E160C33405126017828ABE PUSH9 0x435CB1C264736F6C63 NUMBER STOP MOD EXP STOP CALLER ",
+ "sourceMap": "1450:11663:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122097645a101dc13840d470381db746d514e160c33405126017828abe68435cb1c264736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 PUSH5 0x5A101DC138 BLOCKHASH 0xD4 PUSH17 0x381DB746D514E160C33405126017828ABE PUSH9 0x435CB1C264736F6C63 NUMBER STOP MOD EXP STOP CALLER ",
+ "sourceMap": "1450:11663:26:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{},\"title\":\"Actions\"},\"userdoc\":{\"methods\":{},\"notice\":\"A library that provides a ActionArgs struct, sub types of Action structs, and functions to parse ActionArgs into specific Actions. errorCode A1 can only parse arguments for open vault actions A2 cannot open vault for an invalid account A3 cannot open vault with an invalid type A4 can only parse arguments for mint actions A5 cannot mint from an invalid account A6 can only parse arguments for burn actions A7 cannot burn from an invalid account A8 can only parse arguments for deposit actions A9 cannot deposit to an invalid account A10 can only parse arguments for withdraw actions A11 cannot withdraw from an invalid account A12 cannot withdraw to an invalid account A13 can only parse arguments for redeem actions A14 cannot redeem to an invalid account A15 can only parse arguments for settle vault actions A16 cannot settle vault for an invalid account A17 cannot withdraw payout to an invalid account A18 can only parse arguments for liquidate action A19 cannot liquidate vault for an invalid account owner A20 cannot send collateral to an invalid account A21 cannot parse liquidate action with no round id A22 can only parse arguments for call actions A23 target address cannot be address(0)\"}},\"settings\":{\"compilationTarget\":{\"contracts/libs/Actions.sol\":\"Actions\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/Actions.sol\":{\"keccak256\":\"0x2466a1a3131110b868a7b44c63bea7b5b96f4dabef85955375ac2fe232668470\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cc5bb8b5a9b755a0f1516d9dabc27057839b0a7abc1231750f7d7eb27593a2fa\",\"dweb:/ipfs/Qmb9ELtRVGuBBzxpTuf72KSskwPS16bi35fxYHcRqX8WRy\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/libs/FixedPointInt256.sol": {
+ "FixedPointInt256": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c363c4b6364ef6bee8cbbf35a63dddcb71df9ed5023bd6fb267dcd19a161ab5464736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xC3 PUSH4 0xC4B6364E 0xF6 0xBE 0xE8 0xCB 0xBF CALLDATALOAD 0xA6 RETURNDATASIZE 0xDD 0xCB PUSH18 0xDF9ED5023BD6FB267DCD19A161AB5464736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "279:6588:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c363c4b6364ef6bee8cbbf35a63dddcb71df9ed5023bd6fb267dcd19a161ab5464736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 PUSH4 0xC4B6364E 0xF6 0xBE 0xE8 0xCB 0xBF CALLDATALOAD 0xA6 RETURNDATASIZE 0xDD 0xCB PUSH18 0xDF9ED5023BD6FB267DCD19A161AB5464736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "279:6588:27:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{},\"title\":\"FixedPointInt256\"},\"userdoc\":{\"methods\":{},\"notice\":\"FixedPoint library\"}},\"settings\":{\"compilationTarget\":{\"contracts/libs/FixedPointInt256.sol\":\"FixedPointInt256\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/FixedPointInt256.sol\":{\"keccak256\":\"0x430dc07238bfc5b1c422ac67366b7bf7cfeb7ff64f158bf0b5293a21aa4bb2ab\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fdd0edd9eb050609f26da31fb5d6e8e610a6aadaf7b751224b31aa9f656bfcf0\",\"dweb:/ipfs/QmbmZEW49thzmKqUUqdcEFwLahx5REXQZ4kQMBr1yfc1XB\"]},\"contracts/libs/SignedConverter.sol\":{\"keccak256\":\"0xcd580557dc2c337a870d632b1120f2ec0f7494056d48620598a11d09418dcfa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cfa5fb05fa755dde57c74abf107eaf806794c48fa571cf17abaf856074fddd30\",\"dweb:/ipfs/QmV5L5XdK6BwmKDxj4zqPVh7MnHJeY8pUxZ2JLHqzW1B22\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/SignedSafeMath.sol\":{\"keccak256\":\"0x5c37725e4c762112901151ff9fbd6678f2edd936666f987d0904865b528647e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://072c740989fea30fe46f9410377697fafadc8b79a0c297a0ebfbd38f5a40f305\",\"dweb:/ipfs/QmSb7ggwKV5LU9QDHHZ6tUDUEhCyiFEoD12ZS4FFFnqjkF\"]}},\"version\":1}"
+ }
+ },
+ "contracts/libs/MarginVault.sol": {
+ "MarginVault": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "610a8d610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80637b5c2835146100715780637e5d2ac014610093578063951dd8d3146100b3578063aadf9398146100d3578063e02ff740146100f3578063ef682c1b14610113575b600080fd5b81801561007d57600080fd5b5061009161008c36600461088a565b610133565b005b81801561009f57600080fd5b506100916100ae36600461088a565b610228565b8180156100bf57600080fd5b506100916100ce36600461088a565b6103cb565b8180156100df57600080fd5b506100916100ee36600461088a565b61048e565b8180156100ff57600080fd5b5061009161010e36600461088a565b6105e1565b81801561011f57600080fd5b5061009161012e36600461088a565b6106a4565b8354811061015c5760405162461bcd60e51b815260040161015390610924565b60405180910390fd5b826001600160a01b031684600001828154811061017557fe5b6000918252602090912001546001600160a01b0316146101a75760405162461bcd60e51b815260040161015390610993565b60006101d5838660030184815481106101bc57fe5b90600052602060002001546107f090919063ffffffff16565b905080610205578460000182815481106101eb57fe5b600091825260209091200180546001600160a01b03191690555b8085600301838154811061021557fe5b6000918252602090912001555050505050565b600082116102485760405162461bcd60e51b815260040161015390610977565b60028401548114801561025e5750600584015481145b156102ae57600284018054600180820183556000928352602080842090920180546001600160a01b0319166001600160a01b038816179055600587018054918201815583529120018290556103c5565b6002840154811080156102c45750600584015481105b6102e05760405162461bcd60e51b815260040161015390610a03565b60008460020182815481106102f157fe5b6000918252602090912001546001600160a01b039081169150841681148061032057506001600160a01b038116155b61033c5760405162461bcd60e51b815260040161015390610a1f565b6103688386600501848154811061034f57fe5b906000526020600020015461083990919063ffffffff16565b85600501838154811061037757fe5b90600052602060002001819055508385600201838154811061039557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505b50505050565b600184015481106103ee5760405162461bcd60e51b8152600401610153906109cb565b826001600160a01b031684600101828154811061040757fe5b6000918252602090912001546001600160a01b0316146104395760405162461bcd60e51b815260040161015390610a3b565b600061044e838660040184815481106101bc57fe5b90508061047e5784600101828154811061046457fe5b600091825260209091200180546001600160a01b03191690555b8085600401838154811061021557fe5b600082116104ae5760405162461bcd60e51b8152600401610153906109e7565b6001840154811480156104c45750600484015481145b15610513576001848101805480830182556000918252602080832090910180546001600160a01b0319166001600160a01b038816179055600487018054938401815582529020018290556103c5565b6001840154811080156105295750600484015481105b6105455760405162461bcd60e51b8152600401610153906109cb565b600084600101828154811061055657fe5b6000918252602090912001546001600160a01b039081169150841681148061058557506001600160a01b038116155b6105a15760405162461bcd60e51b815260040161015390610a3b565b6105b48386600401848154811061034f57fe5b8560040183815481106105c357fe5b90600052602060002001819055508385600101838154811061039557fe5b600284015481106106045760405162461bcd60e51b815260040161015390610a03565b826001600160a01b031684600201828154811061061d57fe5b6000918252602090912001546001600160a01b03161461064f5760405162461bcd60e51b815260040161015390610a1f565b6000610664838660050184815481106101bc57fe5b9050806106945784600201828154811061067a57fe5b600091825260209091200180546001600160a01b03191690555b8085600501838154811061021557fe5b600082116106c45760405162461bcd60e51b8152600401610153906109af565b8354811480156106d75750600384015481145b15610725578354600180820186556000868152602080822090930180546001600160a01b0319166001600160a01b0388161790556003870180549283018155815291909120018290556103c5565b8354811080156107385750600384015481105b6107545760405162461bcd60e51b815260040161015390610924565b600084600001828154811061076557fe5b6000918252602090912001546001600160a01b039081169150841681148061079457506001600160a01b038116155b6107b05760405162461bcd60e51b815260040161015390610993565b6107c38386600301848154811061034f57fe5b8560030183815481106107d257fe5b90600052602060002001819055508385600001838154811061039557fe5b600061083283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061085e565b9392505050565b6000828201838110156108325760405162461bcd60e51b815260040161015390610940565b600081848411156108825760405162461bcd60e51b815260040161015391906108d1565b505050900390565b6000806000806080858703121561089f578384fd5b8435935060208501356001600160a01b03811681146108bc578384fd5b93969395505050506040820135916060013590565b6000602080835283518082850152825b818110156108fd578581018301518582016040015282016108e1565b8181111561090e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600290820152612b1960f11b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b602080825260029082015261563760f01b604082015260600190565b602080825260029082015261563360f01b604082015260600190565b602080825260029082015261563160f01b604082015260600190565b602080825260029082015261563560f01b604082015260600190565b602080825260029082015261158d60f21b604082015260600190565b6020808252600290820152610ac760f31b604082015260600190565b602080825260029082015261563960f01b604082015260600190565b6020808252600290820152612b1b60f11b60408201526060019056fea26469706673582212208d6fcb427ec0222b89647664898db23d68d60686900134a1ebc076c5352d9b1a64736f6c634300060a0033",
+ "opcodes": "PUSH2 0xA8D PUSH2 0x26 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x19 JUMPI INVALID 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 0x6C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B5C2835 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x7E5D2AC0 EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x951DD8D3 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0xAADF9398 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xE02FF740 EQ PUSH2 0xF3 JUMPI DUP1 PUSH4 0xEF682C1B EQ PUSH2 0x113 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x8C CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x133 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0xAE CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x228 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x3CB JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x48E JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x10E CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x5E1 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x12E CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x6A4 JUMP JUMPDEST DUP4 SLOAD DUP2 LT PUSH2 0x15C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x175 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D5 DUP4 DUP7 PUSH1 0x3 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1BC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x7F0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x205 JUMPI DUP5 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1EB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST DUP1 DUP6 PUSH1 0x3 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x215 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x248 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x977 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD SLOAD DUP2 EQ DUP1 ISZERO PUSH2 0x25E JUMPI POP PUSH1 0x5 DUP5 ADD SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0x2AE JUMPI PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP4 SSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 KECCAK256 SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR SWAP1 SSTORE PUSH1 0x5 DUP8 ADD DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE SWAP2 KECCAK256 ADD DUP3 SWAP1 SSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD SLOAD DUP2 LT DUP1 ISZERO PUSH2 0x2C4 JUMPI POP PUSH1 0x5 DUP5 ADD SLOAD DUP2 LT JUMPDEST PUSH2 0x2E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA03 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2F1 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP5 AND DUP2 EQ DUP1 PUSH2 0x320 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST PUSH2 0x33C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA1F JUMP JUMPDEST PUSH2 0x368 DUP4 DUP7 PUSH1 0x5 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x34F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x839 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 PUSH1 0x5 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x377 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP6 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x395 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 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 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD DUP2 LT PUSH2 0x3EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9CB JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x407 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x439 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44E DUP4 DUP7 PUSH1 0x4 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1BC JUMPI INVALID JUMPDEST SWAP1 POP DUP1 PUSH2 0x47E JUMPI DUP5 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x464 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST DUP1 DUP6 PUSH1 0x4 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x215 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9E7 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD DUP2 EQ DUP1 ISZERO PUSH2 0x4C4 JUMPI POP PUSH1 0x4 DUP5 ADD SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0x513 JUMPI PUSH1 0x1 DUP5 DUP2 ADD DUP1 SLOAD DUP1 DUP4 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR SWAP1 SSTORE PUSH1 0x4 DUP8 ADD DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP3 MSTORE SWAP1 KECCAK256 ADD DUP3 SWAP1 SSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD DUP2 LT DUP1 ISZERO PUSH2 0x529 JUMPI POP PUSH1 0x4 DUP5 ADD SLOAD DUP2 LT JUMPDEST PUSH2 0x545 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9CB JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x556 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP5 AND DUP2 EQ DUP1 PUSH2 0x585 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST PUSH2 0x5A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA3B JUMP JUMPDEST PUSH2 0x5B4 DUP4 DUP7 PUSH1 0x4 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x34F JUMPI INVALID JUMPDEST DUP6 PUSH1 0x4 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x5C3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP6 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x395 JUMPI INVALID JUMPDEST PUSH1 0x2 DUP5 ADD SLOAD DUP2 LT PUSH2 0x604 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA03 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x61D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x64F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA1F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x664 DUP4 DUP7 PUSH1 0x5 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1BC JUMPI INVALID JUMPDEST SWAP1 POP DUP1 PUSH2 0x694 JUMPI DUP5 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x67A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST DUP1 DUP6 PUSH1 0x5 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x215 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x6C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9AF JUMP JUMPDEST DUP4 SLOAD DUP2 EQ DUP1 ISZERO PUSH2 0x6D7 JUMPI POP PUSH1 0x3 DUP5 ADD SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0x725 JUMPI DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP7 SSTORE PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR SWAP1 SSTORE PUSH1 0x3 DUP8 ADD DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 ADD DUP3 SWAP1 SSTORE PUSH2 0x3C5 JUMP JUMPDEST DUP4 SLOAD DUP2 LT DUP1 ISZERO PUSH2 0x738 JUMPI POP PUSH1 0x3 DUP5 ADD SLOAD DUP2 LT JUMPDEST PUSH2 0x754 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x765 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP5 AND DUP2 EQ DUP1 PUSH2 0x794 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST PUSH2 0x7B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x7C3 DUP4 DUP7 PUSH1 0x3 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x34F JUMPI INVALID JUMPDEST DUP6 PUSH1 0x3 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x7D2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP6 PUSH1 0x0 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x395 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x832 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x85E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x832 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x940 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x882 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP2 SWAP1 PUSH2 0x8D1 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x89F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x8BC JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8FD JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x8E1 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x90E JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2B19 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5637 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5633 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5631 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5635 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x158D PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0xAC7 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5639 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2B1B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 PUSH16 0xCB427EC0222B89647664898DB23D68D6 MOD DUP7 SWAP1 ADD CALLVALUE LOG1 0xEB 0xC0 PUSH23 0xC5352D9B1A64736F6C634300060A003300000000000000 ",
+ "sourceMap": "809:8505:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80637b5c2835146100715780637e5d2ac014610093578063951dd8d3146100b3578063aadf9398146100d3578063e02ff740146100f3578063ef682c1b14610113575b600080fd5b81801561007d57600080fd5b5061009161008c36600461088a565b610133565b005b81801561009f57600080fd5b506100916100ae36600461088a565b610228565b8180156100bf57600080fd5b506100916100ce36600461088a565b6103cb565b8180156100df57600080fd5b506100916100ee36600461088a565b61048e565b8180156100ff57600080fd5b5061009161010e36600461088a565b6105e1565b81801561011f57600080fd5b5061009161012e36600461088a565b6106a4565b8354811061015c5760405162461bcd60e51b815260040161015390610924565b60405180910390fd5b826001600160a01b031684600001828154811061017557fe5b6000918252602090912001546001600160a01b0316146101a75760405162461bcd60e51b815260040161015390610993565b60006101d5838660030184815481106101bc57fe5b90600052602060002001546107f090919063ffffffff16565b905080610205578460000182815481106101eb57fe5b600091825260209091200180546001600160a01b03191690555b8085600301838154811061021557fe5b6000918252602090912001555050505050565b600082116102485760405162461bcd60e51b815260040161015390610977565b60028401548114801561025e5750600584015481145b156102ae57600284018054600180820183556000928352602080842090920180546001600160a01b0319166001600160a01b038816179055600587018054918201815583529120018290556103c5565b6002840154811080156102c45750600584015481105b6102e05760405162461bcd60e51b815260040161015390610a03565b60008460020182815481106102f157fe5b6000918252602090912001546001600160a01b039081169150841681148061032057506001600160a01b038116155b61033c5760405162461bcd60e51b815260040161015390610a1f565b6103688386600501848154811061034f57fe5b906000526020600020015461083990919063ffffffff16565b85600501838154811061037757fe5b90600052602060002001819055508385600201838154811061039557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505b50505050565b600184015481106103ee5760405162461bcd60e51b8152600401610153906109cb565b826001600160a01b031684600101828154811061040757fe5b6000918252602090912001546001600160a01b0316146104395760405162461bcd60e51b815260040161015390610a3b565b600061044e838660040184815481106101bc57fe5b90508061047e5784600101828154811061046457fe5b600091825260209091200180546001600160a01b03191690555b8085600401838154811061021557fe5b600082116104ae5760405162461bcd60e51b8152600401610153906109e7565b6001840154811480156104c45750600484015481145b15610513576001848101805480830182556000918252602080832090910180546001600160a01b0319166001600160a01b038816179055600487018054938401815582529020018290556103c5565b6001840154811080156105295750600484015481105b6105455760405162461bcd60e51b8152600401610153906109cb565b600084600101828154811061055657fe5b6000918252602090912001546001600160a01b039081169150841681148061058557506001600160a01b038116155b6105a15760405162461bcd60e51b815260040161015390610a3b565b6105b48386600401848154811061034f57fe5b8560040183815481106105c357fe5b90600052602060002001819055508385600101838154811061039557fe5b600284015481106106045760405162461bcd60e51b815260040161015390610a03565b826001600160a01b031684600201828154811061061d57fe5b6000918252602090912001546001600160a01b03161461064f5760405162461bcd60e51b815260040161015390610a1f565b6000610664838660050184815481106101bc57fe5b9050806106945784600201828154811061067a57fe5b600091825260209091200180546001600160a01b03191690555b8085600501838154811061021557fe5b600082116106c45760405162461bcd60e51b8152600401610153906109af565b8354811480156106d75750600384015481145b15610725578354600180820186556000868152602080822090930180546001600160a01b0319166001600160a01b0388161790556003870180549283018155815291909120018290556103c5565b8354811080156107385750600384015481105b6107545760405162461bcd60e51b815260040161015390610924565b600084600001828154811061076557fe5b6000918252602090912001546001600160a01b039081169150841681148061079457506001600160a01b038116155b6107b05760405162461bcd60e51b815260040161015390610993565b6107c38386600301848154811061034f57fe5b8560030183815481106107d257fe5b90600052602060002001819055508385600001838154811061039557fe5b600061083283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061085e565b9392505050565b6000828201838110156108325760405162461bcd60e51b815260040161015390610940565b600081848411156108825760405162461bcd60e51b815260040161015391906108d1565b505050900390565b6000806000806080858703121561089f578384fd5b8435935060208501356001600160a01b03811681146108bc578384fd5b93969395505050506040820135916060013590565b6000602080835283518082850152825b818110156108fd578581018301518582016040015282016108e1565b8181111561090e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600290820152612b1960f11b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b602080825260029082015261563760f01b604082015260600190565b602080825260029082015261563360f01b604082015260600190565b602080825260029082015261563160f01b604082015260600190565b602080825260029082015261563560f01b604082015260600190565b602080825260029082015261158d60f21b604082015260600190565b6020808252600290820152610ac760f31b604082015260600190565b602080825260029082015261563960f01b604082015260600190565b6020808252600290820152612b1b60f11b60408201526060019056fea26469706673582212208d6fcb427ec0222b89647664898db23d68d60686900134a1ebc076c5352d9b1a64736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x6C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B5C2835 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x7E5D2AC0 EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x951DD8D3 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0xAADF9398 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xE02FF740 EQ PUSH2 0xF3 JUMPI DUP1 PUSH4 0xEF682C1B EQ PUSH2 0x113 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x8C CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x133 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0xAE CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x228 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x3CB JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x48E JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x10E CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x5E1 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x12E CALLDATASIZE PUSH1 0x4 PUSH2 0x88A JUMP JUMPDEST PUSH2 0x6A4 JUMP JUMPDEST DUP4 SLOAD DUP2 LT PUSH2 0x15C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x175 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D5 DUP4 DUP7 PUSH1 0x3 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1BC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x7F0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x205 JUMPI DUP5 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1EB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST DUP1 DUP6 PUSH1 0x3 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x215 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x248 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x977 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD SLOAD DUP2 EQ DUP1 ISZERO PUSH2 0x25E JUMPI POP PUSH1 0x5 DUP5 ADD SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0x2AE JUMPI PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP4 SSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 KECCAK256 SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR SWAP1 SSTORE PUSH1 0x5 DUP8 ADD DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE SWAP2 KECCAK256 ADD DUP3 SWAP1 SSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD SLOAD DUP2 LT DUP1 ISZERO PUSH2 0x2C4 JUMPI POP PUSH1 0x5 DUP5 ADD SLOAD DUP2 LT JUMPDEST PUSH2 0x2E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA03 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2F1 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP5 AND DUP2 EQ DUP1 PUSH2 0x320 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST PUSH2 0x33C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA1F JUMP JUMPDEST PUSH2 0x368 DUP4 DUP7 PUSH1 0x5 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x34F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x839 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 PUSH1 0x5 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x377 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP6 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x395 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 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 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD DUP2 LT PUSH2 0x3EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9CB JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x407 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x439 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44E DUP4 DUP7 PUSH1 0x4 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1BC JUMPI INVALID JUMPDEST SWAP1 POP DUP1 PUSH2 0x47E JUMPI DUP5 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x464 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST DUP1 DUP6 PUSH1 0x4 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x215 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9E7 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD DUP2 EQ DUP1 ISZERO PUSH2 0x4C4 JUMPI POP PUSH1 0x4 DUP5 ADD SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0x513 JUMPI PUSH1 0x1 DUP5 DUP2 ADD DUP1 SLOAD DUP1 DUP4 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR SWAP1 SSTORE PUSH1 0x4 DUP8 ADD DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP3 MSTORE SWAP1 KECCAK256 ADD DUP3 SWAP1 SSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD DUP2 LT DUP1 ISZERO PUSH2 0x529 JUMPI POP PUSH1 0x4 DUP5 ADD SLOAD DUP2 LT JUMPDEST PUSH2 0x545 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9CB JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x556 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP5 AND DUP2 EQ DUP1 PUSH2 0x585 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST PUSH2 0x5A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA3B JUMP JUMPDEST PUSH2 0x5B4 DUP4 DUP7 PUSH1 0x4 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x34F JUMPI INVALID JUMPDEST DUP6 PUSH1 0x4 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x5C3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP6 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x395 JUMPI INVALID JUMPDEST PUSH1 0x2 DUP5 ADD SLOAD DUP2 LT PUSH2 0x604 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA03 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x61D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x64F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0xA1F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x664 DUP4 DUP7 PUSH1 0x5 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1BC JUMPI INVALID JUMPDEST SWAP1 POP DUP1 PUSH2 0x694 JUMPI DUP5 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x67A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST DUP1 DUP6 PUSH1 0x5 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x215 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x6C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x9AF JUMP JUMPDEST DUP4 SLOAD DUP2 EQ DUP1 ISZERO PUSH2 0x6D7 JUMPI POP PUSH1 0x3 DUP5 ADD SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0x725 JUMPI DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP7 SSTORE PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR SWAP1 SSTORE PUSH1 0x3 DUP8 ADD DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 ADD DUP3 SWAP1 SSTORE PUSH2 0x3C5 JUMP JUMPDEST DUP4 SLOAD DUP2 LT DUP1 ISZERO PUSH2 0x738 JUMPI POP PUSH1 0x3 DUP5 ADD SLOAD DUP2 LT JUMPDEST PUSH2 0x754 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x765 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP5 AND DUP2 EQ DUP1 PUSH2 0x794 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST PUSH2 0x7B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x7C3 DUP4 DUP7 PUSH1 0x3 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x34F JUMPI INVALID JUMPDEST DUP6 PUSH1 0x3 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x7D2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP6 PUSH1 0x0 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x395 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x832 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x85E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x832 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP1 PUSH2 0x940 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x882 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x153 SWAP2 SWAP1 PUSH2 0x8D1 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x89F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x8BC JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8FD JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x8E1 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x90E JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2B19 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5637 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5633 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5631 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5635 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x158D PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0xAC7 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x5639 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2B1B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 PUSH16 0xCB427EC0222B89647664898DB23D68D6 MOD DUP7 SWAP1 ADD CALLVALUE LOG1 0xEB 0xC0 PUSH23 0xC5352D9B1A64736F6C634300060A003300000000000000 ",
+ "sourceMap": "809:8505:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3801:594;;;;;;;;;;-1:-1:-1;3801:594:28;;;;;;;;:::i;:::-;;7185:1081;;;;;;;;;;-1:-1:-1;7185:1081:28;;;;;;;;:::i;6212:582::-;;;;;;;;;;-1:-1:-1;6212:582:28;;;;;;;;:::i;4806:982::-;;;;;;;;;;-1:-1:-1;4806:982:28;;;;;;;;:::i;8670:642::-;;;;;;;;;;-1:-1:-1;8670:642:28;;;;;;;;:::i;2390:1000::-;;;;;;;;;;-1:-1:-1;2390:1000:28;;;;;;;;:::i;3801:594::-;4063:26;;4054:35;;4046:50;;;;-1:-1:-1;;;4046:50:28;;;;;;;;;;;;;;;;;4145:12;-1:-1:-1;;;;;4114:43:28;:6;:19;;4134:6;4114:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4114:27:28;:43;4106:58;;;;-1:-1:-1;;;4106:58:28;;;;;;;;;4175:22;4200:40;4232:7;4200:6;:19;;4220:6;4200:27;;;;;;;;;;;;;;;;:31;;:40;;;;:::i;:::-;4175:65;-1:-1:-1;4255:19:28;4251:84;;4297:6;:19;;4317:6;4297:27;;;;;;;;;;;;;;;;;4290:34;;-1:-1:-1;;;;;;4290:34:28;;;4251:84;4374:14;4344:6;:19;;4364:6;4344:27;;;;;;;;;;;;;;;;;:44;-1:-1:-1;;;;;3801:594:28:o;7185:1081::-;7364:1;7354:7;:11;7346:26;;;;-1:-1:-1;;;7346:26:28;;;;;;;;;7584:23;;;:30;7574:40;;7573:89;;;;-1:-1:-1;7630:24:28;;;:31;7620:41;;7573:89;7569:691;;;7678:23;;;:46;;;;;;;;-1:-1:-1;7678:46:28;;;;;;;;;;;;-1:-1:-1;;;;;;7678:46:28;-1:-1:-1;;;;;7678:46:28;;;;;7738:24;;;:38;;;;;;;;;;;;;;;7569:691;;;7825:23;;;:30;7816:39;;7815:87;;;;-1:-1:-1;7870:24:28;;;:31;7861:40;;7815:87;7807:102;;;;-1:-1:-1;;;7807:102:28;;;;;;;;;7923:26;7952:6;:23;;7976:6;7952:31;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7952:31:28;;;;-1:-1:-1;8006:38:28;;;;;8005:78;;-1:-1:-1;;;;;;8050:32:28;;;8005:78;7997:93;;;;-1:-1:-1;;;7997:93:28;;;;;;;;;8140:45;8177:7;8140:6;:24;;8165:6;8140:32;;;;;;;;;;;;;;;;:36;;:45;;;;:::i;:::-;8105:6;:24;;8130:6;8105:32;;;;;;;;;;;;;;;:80;;;;8233:16;8199:6;:23;;8223:6;8199:31;;;;;;;;;;;;;;;;:50;;;;;-1:-1:-1;;;;;8199:50:28;;;;;-1:-1:-1;;;;;8199:50:28;;;;;;7569:691;;7185:1081;;;;:::o;6212:582::-;6471:18;;;:25;6462:34;;6454:49;;;;-1:-1:-1;;;6454:49:28;;;;;;;;;6551:11;-1:-1:-1;;;;;6521:41:28;:6;:18;;6540:6;6521:26;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6521:26:28;:41;6513:56;;;;-1:-1:-1;;;6513:56:28;;;;;;;;;6580:21;6604:39;6635:7;6604:6;:18;;6623:6;6604:26;;;;;;;:39;6580:63;-1:-1:-1;6658:18:28;6654:82;;6699:6;:18;;6718:6;6699:26;;;;;;;;;;;;;;;;;6692:33;;-1:-1:-1;;;;;;6692:33:28;;;6654:82;6774:13;6745:6;:18;;6764:6;6745:26;;;;;;;4806:982;4974:1;4964:7;:11;4956:26;;;;-1:-1:-1;;;4956:26:28;;;;;;;;;5194:18;;;:25;5184:35;;5183:78;;;;-1:-1:-1;5235:18:28;;;:25;5225:35;;5183:78;5179:603;;;5277:18;;;;:36;;;;;;;-1:-1:-1;5277:36:28;;;;;;;;;;;;-1:-1:-1;;;;;;5277:36:28;-1:-1:-1;;;;;5277:36:28;;;;;5327:18;;;:32;;;;;;;;;;;;;;;5179:603;;;5408:18;;;:25;5399:34;;5398:76;;;;-1:-1:-1;5448:18:28;;;:25;5439:34;;5398:76;5390:91;;;;-1:-1:-1;;;5390:91:28;;;;;;;;;5495:20;5518:6;:18;;5537:6;5518:26;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5518:26:28;;;;-1:-1:-1;5567:27:28;;;;;5566:61;;-1:-1:-1;;;;;;5600:26:28;;;5566:61;5558:76;;;;-1:-1:-1;;;5558:76:28;;;;;;;;;5678:39;5709:7;5678:6;:18;;5697:6;5678:26;;;;;;;:39;5649:6;:18;;5668:6;5649:26;;;;;;;;;;;;;;;:68;;;;5760:11;5731:6;:18;;5750:6;5731:26;;;;;;;8670:642;8939:23;;;:30;8930:39;;8922:54;;;;-1:-1:-1;;;8922:54:28;;;;;;;;;9029:16;-1:-1:-1;;;;;8994:51:28;:6;:23;;9018:6;8994:31;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8994:31:28;:51;8986:66;;;;-1:-1:-1;;;8986:66:28;;;;;;;;;9063:27;9093:45;9130:7;9093:6;:24;;9118:6;9093:32;;;;;;;:45;9063:75;-1:-1:-1;9153:24:28;9149:93;;9200:6;:23;;9224:6;9200:31;;;;;;;;;;;;;;;;;9193:38;;-1:-1:-1;;;;;;9193:38:28;;;9149:93;9286:19;9251:6;:24;;9276:6;9251:32;;;;;;;2390:1000;2560:1;2550:7;:11;2542:26;;;;-1:-1:-1;;;2542:26:28;;;;;;;;;2780;;2770:36;;2769:80;;;;-1:-1:-1;2822:19:28;;;:26;2812:36;;2769:80;2765:619;;;2865:38;;;;;;;;-1:-1:-1;2865:38:28;;;;;;;;;;;;-1:-1:-1;;;;;;2865:38:28;-1:-1:-1;;;;;2865:38:28;;;;;2917:19;;;:33;;;;;;;;;;;;;;;;;2765:619;;;2999:26;;2990:35;;2989:78;;;;-1:-1:-1;3040:19:28;;;:26;3031:35;;2989:78;2981:93;;;;-1:-1:-1;;;2981:93:28;;;;;;;;;3088:21;3112:6;:19;;3132:6;3112:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3112:27:28;;;;-1:-1:-1;3162:29:28;;;;;3161:64;;-1:-1:-1;;;;;;3197:27:28;;;3161:64;3153:79;;;;-1:-1:-1;;;3153:79:28;;;;;;;;;3277:40;3309:7;3277:6;:19;;3297:6;3277:27;;;;;;;:40;3247:6;:19;;3267:6;3247:27;;;;;;;;;;;;;;;:70;;;;3361:12;3331:6;:19;;3351:6;3331:27;;;;;;;1362:134:51;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1439:50;1362:134;-1:-1:-1;;;1362:134:51:o;922:176::-;980:7;1011:5;;;1034:6;;;;1026:46;;;;-1:-1:-1;;;1026:46:51;;;;;;;;1780:217;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;466:667:-1:-;;;;;646:3;634:9;625:7;621:23;617:33;614:2;;;-1:-1;;653:12;614:2;234:20;;;-1:-1;830:2;869:22;;72:20;-1:-1;;;;;9732:54;;10318:35;;10308:2;;-1:-1;;10357:12;10308:2;608:525;;838:63;;-1:-1;;;;938:2;977:22;;396:20;;1046:2;1085:22;396:20;;608:525;4620:310;;4767:2;;4788:17;4781:47;1285:5;9255:12;9412:6;4767:2;4756:9;4752:18;9400:19;-1:-1;9950:101;9964:6;9961:1;9958:13;9950:101;;;10031:11;;;;;10025:18;10012:11;;;9440:14;10012:11;10005:39;9979:10;;9950:101;;;10066:6;10063:1;10060:13;10057:2;;;-1:-1;9440:14;10122:6;4756:9;10113:16;;10106:27;10057:2;-1:-1;10238:7;10222:14;-1:-1;;10218:28;1443:39;;;;9440:14;1443:39;;4738:192;-1:-1;;;4738:192;4937:416;5137:2;5151:47;;;1719:1;5122:18;;;9400:19;-1:-1;;;9440:14;;;1734:25;1778:12;;;5108:245;5360:416;5560:2;5574:47;;;2029:2;5545:18;;;9400:19;2065:29;9440:14;;;2045:50;2114:12;;;5531:245;5783:416;5983:2;5997:47;;;2365:1;5968:18;;;9400:19;-1:-1;;;9440:14;;;2380:25;2424:12;;;5954:245;6206:416;6406:2;6420:47;;;2675:1;6391:18;;;9400:19;-1:-1;;;9440:14;;;2690:25;2734:12;;;6377:245;6629:416;6829:2;6843:47;;;2985:1;6814:18;;;9400:19;-1:-1;;;9440:14;;;3000:25;3044:12;;;6800:245;7052:416;7252:2;7266:47;;;3295:1;7237:18;;;9400:19;-1:-1;;;9440:14;;;3310:25;3354:12;;;7223:245;7475:416;7675:2;7689:47;;;3605:1;7660:18;;;9400:19;-1:-1;;;9440:14;;;3620:25;3664:12;;;7646:245;7898:416;8098:2;8112:47;;;3915:1;8083:18;;;9400:19;-1:-1;;;9440:14;;;3930:25;3974:12;;;8069:245;8321:416;8521:2;8535:47;;;4225:1;8506:18;;;9400:19;-1:-1;;;9440:14;;;4240:25;4284:12;;;8492:245;8744:416;8944:2;8958:47;;;4535:1;8929:18;;;9400:19;-1:-1;;;9440:14;;;4550:25;4594:12;;;8915:245"
+ },
+ "methodIdentifiers": {
+ "addCollateral(MarginVault.Vault storage,address,uint256,uint256)": "7e5d2ac0",
+ "addLong(MarginVault.Vault storage,address,uint256,uint256)": "aadf9398",
+ "addShort(MarginVault.Vault storage,address,uint256,uint256)": "ef682c1b",
+ "removeCollateral(MarginVault.Vault storage,address,uint256,uint256)": "e02ff740",
+ "removeLong(MarginVault.Vault storage,address,uint256,uint256)": "951dd8d3",
+ "removeShort(MarginVault.Vault storage,address,uint256,uint256)": "7b5c2835"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"addCollateral(MarginVault.Vault storage,address,uint256,uint256)\":{\"details\":\"increase the collateral balance in a vault\",\"params\":{\"_amount\":\"number of _collateralAsset being added to the user's vault\",\"_collateralAsset\":\"address of the _collateralAsset being added to the user's vault\",\"_index\":\"index of _collateralAsset in the user's vault.collateralAssets array\",\"_vault\":\"vault to add collateral to\"}},\"addLong(MarginVault.Vault storage,address,uint256,uint256)\":{\"details\":\"increase the long oToken balance in a vault when an oToken is deposited\",\"params\":{\"_amount\":\"number of _longOtoken the protocol is adding to the user's vault\",\"_index\":\"index of _longOtoken in the user's vault.longOtokens array\",\"_longOtoken\":\"address of the _longOtoken being added to the user's vault\",\"_vault\":\"vault to add a long position to\"}},\"addShort(MarginVault.Vault storage,address,uint256,uint256)\":{\"details\":\"increase the short oToken balance in a vault when a new oToken is minted\",\"params\":{\"_amount\":\"number of _shortOtoken being minted from the user's vault\",\"_index\":\"index of _shortOtoken in the user's vault.shortOtokens array\",\"_shortOtoken\":\"address of the _shortOtoken being minted from the user's vault\",\"_vault\":\"vault to add or increase the short position in\"}},\"removeCollateral(MarginVault.Vault storage,address,uint256,uint256)\":{\"details\":\"decrease the collateral balance in a vault\",\"params\":{\"_amount\":\"number of _collateralAsset being removed from the user's vault\",\"_collateralAsset\":\"address of the _collateralAsset being removed from the user's vault\",\"_index\":\"index of _collateralAsset in the user's vault.collateralAssets array\",\"_vault\":\"vault to remove collateral from\"}},\"removeLong(MarginVault.Vault storage,address,uint256,uint256)\":{\"details\":\"decrease the long oToken balance in a vault when an oToken is withdrawn\",\"params\":{\"_amount\":\"number of _longOtoken the protocol is removing from the user's vault\",\"_index\":\"index of _longOtoken in the user's vault.longOtokens array\",\"_longOtoken\":\"address of the _longOtoken being removed from the user's vault\",\"_vault\":\"vault to remove a long position from\"}},\"removeShort(MarginVault.Vault storage,address,uint256,uint256)\":{\"details\":\"decrease the short oToken balance in a vault when an oToken is burned\",\"params\":{\"_amount\":\"number of _shortOtoken being reduced in the user's vault\",\"_index\":\"index of _shortOtoken in the user's vault.shortOtokens array\",\"_shortOtoken\":\"address of the _shortOtoken being reduced in the user's vault\",\"_vault\":\"vault to decrease short position in\"}}},\"title\":\"MarginVault\"},\"userdoc\":{\"methods\":{},\"notice\":\"A library that provides the Controller with a Vault struct and the functions that manipulate vaults. Vaults describe discrete position combinations of long options, short options, and collateral assets that a user can have.\"}},\"settings\":{\"compilationTarget\":{\"contracts/libs/MarginVault.sol\":\"MarginVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/libs/SignedConverter.sol": {
+ "SignedConverter": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122090e6cb228f8f7b140a52e740e5fd8a22bec616507e87ceb5ac02ec47680c0bc464736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 SWAP1 0xE6 0xCB 0x22 DUP16 DUP16 PUSH28 0x140A52E740E5FD8A22BEC616507E87CEB5AC02EC47680C0BC464736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "236:729:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122090e6cb228f8f7b140a52e740e5fd8a22bec616507e87ceb5ac02ec47680c0bc464736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP1 0xE6 0xCB 0x22 DUP16 DUP16 PUSH28 0x140A52E740E5FD8A22BEC616507E87CEB5AC02EC47680C0BC464736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "236:729:29:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{},\"title\":\"SignedConverter\"},\"userdoc\":{\"methods\":{},\"notice\":\"A library to convert an unsigned integer to signed integer or signed integer to unsigned integer.\"}},\"settings\":{\"compilationTarget\":{\"contracts/libs/SignedConverter.sol\":\"SignedConverter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/SignedConverter.sol\":{\"keccak256\":\"0xcd580557dc2c337a870d632b1120f2ec0f7494056d48620598a11d09418dcfa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cfa5fb05fa755dde57c74abf107eaf806794c48fa571cf17abaf856074fddd30\",\"dweb:/ipfs/QmV5L5XdK6BwmKDxj4zqPVh7MnHJeY8pUxZ2JLHqzW1B22\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/Mock0xERC20Proxy.sol": {
+ "Mock0xERC20Proxy": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferToken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b5061041c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80632c54de4f14610030575b600080fd5b61004361003e366004610237565b610045565b005b6100606001600160a01b03851684848463ffffffff61006616565b50505050565b610060846323b872dd60e01b858585604051602401610087939291906102ca565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152606061010e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166101569092919063ffffffff16565b805190915015610151578080602001905181019061012c9190610287565b6101515760405162461bcd60e51b815260040161014890610358565b60405180910390fd5b505050565b6060610165848460008561016d565b949350505050565b606061017885610231565b6101945760405162461bcd60e51b815260040161014890610321565b60006060866001600160a01b031685876040516101b191906102ae565b60006040518083038185875af1925050503d80600081146101ee576040519150601f19603f3d011682016040523d82523d6000602084013e6101f3565b606091505b509150915081156102075791506101659050565b8051156102175780518082602001fd5b8360405162461bcd60e51b815260040161014891906102ee565b3b151590565b6000806000806080858703121561024c578384fd5b8435610257816103ce565b93506020850135610267816103ce565b92506040850135610277816103ce565b9396929550929360600135925050565b600060208284031215610298578081fd5b815180151581146102a7578182fd5b9392505050565b600082516102c08184602087016103a2565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208252825180602084015261030d8160408501602087016103a2565b601f01601f19169190910160400192915050565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b838110156103bd5781810151838201526020016103a5565b838111156100605750506000910152565b6001600160a01b03811681146103e357600080fd5b5056fea2646970667358221220c50177e2df0d47a9c8fb1adae4d3f95bcaa9d0fde27e911bc9050fa525e8ea3264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41C 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 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2C54DE4F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x237 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x66 AND JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x60 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x87 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2CA 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 PUSH1 0x60 PUSH2 0x10E 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 0x156 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x151 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x287 JUMP JUMPDEST PUSH2 0x151 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP1 PUSH2 0x358 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x165 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x16D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x178 DUP6 PUSH2 0x231 JUMP JUMPDEST PUSH2 0x194 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP1 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B1 SWAP2 SWAP1 PUSH2 0x2AE 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 0x1EE 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 0x1F3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x207 JUMPI SWAP2 POP PUSH2 0x165 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x217 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP2 SWAP1 PUSH2 0x2EE JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x257 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x267 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x277 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x298 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2A7 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3A2 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP 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 PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x30D DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3A2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3A5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x60 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 ADD PUSH24 0xE2DF0D47A9C8FB1ADAE4D3F95BCAA9D0FDE27E911BC9050F 0xA5 0x25 0xE8 0xEA ORIGIN PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "268:275:30:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80632c54de4f14610030575b600080fd5b61004361003e366004610237565b610045565b005b6100606001600160a01b03851684848463ffffffff61006616565b50505050565b610060846323b872dd60e01b858585604051602401610087939291906102ca565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152606061010e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166101569092919063ffffffff16565b805190915015610151578080602001905181019061012c9190610287565b6101515760405162461bcd60e51b815260040161014890610358565b60405180910390fd5b505050565b6060610165848460008561016d565b949350505050565b606061017885610231565b6101945760405162461bcd60e51b815260040161014890610321565b60006060866001600160a01b031685876040516101b191906102ae565b60006040518083038185875af1925050503d80600081146101ee576040519150601f19603f3d011682016040523d82523d6000602084013e6101f3565b606091505b509150915081156102075791506101659050565b8051156102175780518082602001fd5b8360405162461bcd60e51b815260040161014891906102ee565b3b151590565b6000806000806080858703121561024c578384fd5b8435610257816103ce565b93506020850135610267816103ce565b92506040850135610277816103ce565b9396929550929360600135925050565b600060208284031215610298578081fd5b815180151581146102a7578182fd5b9392505050565b600082516102c08184602087016103a2565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208252825180602084015261030d8160408501602087016103a2565b601f01601f19169190910160400192915050565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b838110156103bd5781810151838201526020016103a5565b838111156100605750506000910152565b6001600160a01b03811681146103e357600080fd5b5056fea2646970667358221220c50177e2df0d47a9c8fb1adae4d3f95bcaa9d0fde27e911bc9050fa525e8ea3264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2C54DE4F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x237 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x66 AND JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x60 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x87 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2CA 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 PUSH1 0x60 PUSH2 0x10E 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 0x156 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x151 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x287 JUMP JUMPDEST PUSH2 0x151 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP1 PUSH2 0x358 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x165 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x16D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x178 DUP6 PUSH2 0x231 JUMP JUMPDEST PUSH2 0x194 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP1 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B1 SWAP2 SWAP1 PUSH2 0x2AE 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 0x1EE 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 0x1F3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x207 JUMPI SWAP2 POP PUSH2 0x165 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x217 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP2 SWAP1 PUSH2 0x2EE JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x257 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x267 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x277 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x298 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2A7 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3A2 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP 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 PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x30D DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3A2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3A5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x60 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 ADD PUSH24 0xE2DF0D47A9C8FB1ADAE4D3F95BCAA9D0FDE27E911BC9050F 0xA5 0x25 0xE8 0xEA ORIGIN PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "268:275:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;341:200;;;;;;;;;:::i;:::-;;;478:56;-1:-1:-1;;;;;478:38:30;;517:4;523:2;527:6;478:38;:56::i;:::-;341:200;;;;:::o;982:249:50:-;1128:96;1148:5;1178:27;;;1207:4;1213:2;1217:5;1155:68;;;;;;;;;;;;;;;-1:-1:-1;;1155:68:50;;;;;;;;;;;;;;;-1:-1:-1;;;;;1155:68:50;-1:-1:-1;;;;;;1155:68:50;;;;;;;;;;;3732:69;;;;;;;;;;;;;;;;;;;1155:68;3706:23;;3732:69;;-1:-1:-1;;;;;3732:27:50;;;1155:68;;3732:27;:69::i;:::-;3815:17;;3706:95;;-1:-1:-1;3815:21:50;3811:233;;3967:10;3956:30;;;;;;;;;;;;;;3948:85;;;;-1:-1:-1;;;3948:85:50;;;;;;;;;;;;;;;;;3279:771;;;:::o;3626:224:45:-;3759:12;3790:53;3813:6;3821:4;3827:1;3830:12;3790:22;:53::i;:::-;3783:60;3626:224;-1:-1:-1;;;;3626:224:45:o;5071:994::-;5239:12;5271:18;5282:6;5271:10;:18::i;:::-;5263:60;;;;-1:-1:-1;;;5263:60:45;;;;;;;;;5394:12;5408:23;5435:6;-1:-1:-1;;;;;5435:11:45;5454:8;5464:4;5435:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:76;;;;5483:7;5479:580;;;5513:10;-1:-1:-1;5506:17:45;;-1:-1:-1;5506:17:45;5479:580;5624:17;;:21;5620:429;;5882:10;5876:17;5942:15;5929:10;5925:2;5921:19;5914:44;5831:145;6014:20;;-1:-1:-1;;;6014:20:45;;;;6021:12;;6014:20;;;;751:433;1123:20;1169:8;;;751:433::o;414:617:-1:-;;;;;569:3;557:9;548:7;544:23;540:33;537:2;;;-1:-1;;576:12;537:2;85:6;72:20;97:33;124:5;97:33;;;628:63;-1:-1;728:2;767:22;;72:20;97:33;72:20;97:33;;;736:63;-1:-1;836:2;875:22;;72:20;97:33;72:20;97:33;;;531:500;;;;-1:-1;844:63;;944:2;983:22;344:20;;-1:-1;;531:500;1038:257;;1150:2;1138:9;1129:7;1125:23;1121:32;1118:2;;;-1:-1;;1156:12;1118:2;223:6;217:13;6443:5;5623:13;5616:21;6421:5;6418:32;6408:2;;-1:-1;;6454:12;6408:2;1208:71;1112:183;-1:-1;;;1112:183;2985:271;;1582:5;4964:12;1693:52;1738:6;1733:3;1726:4;1719:5;1715:16;1693:52;;;1757:16;;;;;3119:137;-1:-1;;3119:137;3263:444;-1:-1;;;;;5711:54;;;1373:37;;5711:54;;;;3610:2;3595:18;;1373:37;3693:2;3678:18;;2936:37;;;;3446:2;3431:18;;3417:290;3714:310;;3861:2;3882:17;3875:47;1930:5;4964:12;5403:6;3861:2;3850:9;3846:18;5391:19;2024:52;2069:6;5431:14;3850:9;5431:14;3861:2;2050:5;2046:16;2024:52;;;6217:7;6201:14;-1:-1;;6197:28;2088:39;;;;5431:14;2088:39;;3832:192;-1:-1;;3832:192;4031:416;4231:2;4245:47;;;2364:2;4216:18;;;5391:19;2400:31;5431:14;;;2380:52;2451:12;;;4202:245;4454:416;4654:2;4668:47;;;2702:2;4639:18;;;5391:19;2738:34;5431:14;;;2718:55;-1:-1;;;2793:12;;;2786:34;2839:12;;;4625:245;5857:268;5922:1;5929:101;5943:6;5940:1;5937:13;5929:101;;;6010:11;;;6004:18;5991:11;;;5984:39;5965:2;5958:10;5929:101;;;6045:6;6042:1;6039:13;6036:2;;;-1:-1;;5922:1;6092:16;;6085:27;5906:219;6238:117;-1:-1;;;;;5711:54;;6297:35;;6287:2;;6346:1;;6336:12;6287:2;6281:74;"
+ },
+ "methodIdentifiers": {
+ "transferToken(address,address,address,uint256)": "2c54de4f"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"Mock 0x ERC20 Proxy\"}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/Mock0xERC20Proxy.sol\":\"Mock0xERC20Proxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/mocks/Mock0xERC20Proxy.sol\":{\"keccak256\":\"0x8c6c444e50e5a5fb1d3a9e987867b60dd3cba492722b984982beaebd48ad0862\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d73e23922538996c54486c46aa2a19723e3965987071ebf87c9dc1532d48cb1\",\"dweb:/ipfs/QmfQuYsthJacZj84V2S7GPNNLeWcRAB1CYXe7MQmt4JDb7\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/Mock0xExchange.sol": {
+ "Mock0xExchange": {
+ "abi": [
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct ZeroXExchangeInterface.LimitOrder[]",
+ "name": "_orders",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct ZeroXExchangeInterface.Signature[]",
+ "name": "_signatures",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128[]",
+ "name": "_takerTokenFillAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "_revertIfIncomplete",
+ "type": "bool"
+ }
+ ],
+ "name": "batchFillLimitOrders",
+ "outputs": [
+ {
+ "internalType": "uint128[]",
+ "name": "takerTokenFilledAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "uint128[]",
+ "name": "makerTokenFilledAmounts",
+ "type": "uint128[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "called",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "fillAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct ZeroXExchangeInterface.LimitOrder",
+ "name": "_order",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct ZeroXExchangeInterface.Signature",
+ "name": "_signature",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "_takerTokenFillAmount",
+ "type": "uint128"
+ }
+ ],
+ "name": "fillLimitOrder",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "makerAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "proxy",
+ "outputs": [
+ {
+ "internalType": "contract Mock0xERC20Proxy",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "signature",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "takerAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040526000805534801561001457600080fd5b5060405161002190610063565b604051809103906000f08015801561003d573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392909216919091179055610070565b61043c806108aa83390190565b61082b8061007f6000396000f3fe60806040526004361061007b5760003560e01c8063acd00a5c1161004e578063acd00a5c14610103578063dddfff8714610118578063ec5568891461012d578063f6274f661461014f5761007b565b80631baaa00b146100805780632b5bd88e146100aa57806350f9b6cd146100cc57806351ff4847146100e1575b600080fd5b61009361008e36600461055c565b610170565b6040516100a19291906106e4565b60405180910390f35b3480156100b657600080fd5b506100bf61020e565b6040516100a19190610793565b3480156100d857600080fd5b506100bf610214565b3480156100ed57600080fd5b506100f661021a565b6040516100a19190610712565b34801561010f57600080fd5b506100bf6102a8565b34801561012457600080fd5b506100bf6102ae565b34801561013957600080fd5b506101426102b4565b6040516100a19190610765565b61016261015d366004610659565b6102c3565b6040516100a1929190610779565b60608060005b8651811015610204576101c387828151811061018e57fe5b60200260200101518783815181106101a257fe5b60200260200101518784815181106101b657fe5b60200260200101516102c3565b8483815181106101cf57fe5b602002602001018484815181106101e257fe5b6001600160801b03938416602091820292909201015291169052600101610176565b5094509492505050565b60015481565b60005481565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102a05780601f10610275576101008083540402835291602001916102a0565b820191906000526020600020905b81548152906001019060200180831161028357829003601f168201915b505050505081565b60045481565b60025481565b6005546001600160a01b031681565b600080935093915050565b80356001600160a01b03811681146102e557600080fd5b92915050565b600082601f8301126102fb578081fd5b813561030e610309826107c3565b61079c565b818152915060208083019084810160808085028701830188101561033157600080fd5b60005b858110156103585761034689846104d4565b85529383019391810191600101610334565b50505050505092915050565b600082601f830112610374578081fd5b8135610382610309826107c3565b8181529150602080830190848101818402860182018710156103a357600080fd5b6000805b858110156103585782356001600160801b03811681146103c5578283fd5b855293830193918301916001016103a7565b803580151581146102e557600080fd5b60006101808083850312156103fa578182fd5b6104038161079c565b91505061041083836102ce565b815261041f83602084016102ce565b6020820152610431836040840161052d565b6040820152610443836060840161052d565b6060820152610455836080840161052d565b60808201526104678360a084016102ce565b60a08201526104798360c084016102ce565b60c082015261048b8360e084016102ce565b60e082015261010061049f848285016102ce565b9082015261012082810135908201526101406104bd84828501610544565b818301525061016080830135818301525092915050565b6000608082840312156104e5578081fd5b6104ef608061079c565b905081356104fc816107e3565b8152602082013561050c816107e3565b80602083015250604082013560408201526060820135606082015292915050565b80356001600160801b03811681146102e557600080fd5b803567ffffffffffffffff811681146102e557600080fd5b60008060008060808587031215610571578384fd5b843567ffffffffffffffff80821115610588578586fd5b81870188601f820112610599578687fd5b803592506105a9610309846107c3565b80848252602080830192508084016101808d83828a0288010111156105cc578b8cfd5b8b95505b878610156105f8576105e28e836103e7565b85526001959095019493820193908101906105d0565b509199508a0135945050505080821115610610578485fd5b61061c888389016102eb565b94506040870135915080821115610631578384fd5b5061063e87828801610364565b92505061064e86606087016103d7565b905092959194509250565b6000806000610220848603121561066e578283fd5b61067885856103e7565b92506106888561018086016104d4565b915061069885610200860161052d565b90509250925092565b6000815180845260208085019450808401835b838110156106d95781516001600160801b0316875295820195908201906001016106b4565b509495945050505050565b6000604082526106f760408301856106a1565b828103602084015261070981856106a1565b95945050505050565b6000602080835283518082850152825b8181101561073e57858101830151858201604001528201610722565b8181111561074f5783604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0391909116815260200190565b6001600160801b0392831681529116602082015260400190565b90815260200190565b60405181810167ffffffffffffffff811182821017156107bb57600080fd5b604052919050565b600067ffffffffffffffff8211156107d9578081fd5b5060209081020190565b60ff811681146107f257600080fd5b5056fea264697066735822122002af41ed280a395ba6f3a9c963f7d6bd33389f65cc1b1ea637b5fb08e5f85da764736f6c634300060a0033608060405234801561001057600080fd5b5061041c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80632c54de4f14610030575b600080fd5b61004361003e366004610237565b610045565b005b6100606001600160a01b03851684848463ffffffff61006616565b50505050565b610060846323b872dd60e01b858585604051602401610087939291906102ca565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152606061010e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166101569092919063ffffffff16565b805190915015610151578080602001905181019061012c9190610287565b6101515760405162461bcd60e51b815260040161014890610358565b60405180910390fd5b505050565b6060610165848460008561016d565b949350505050565b606061017885610231565b6101945760405162461bcd60e51b815260040161014890610321565b60006060866001600160a01b031685876040516101b191906102ae565b60006040518083038185875af1925050503d80600081146101ee576040519150601f19603f3d011682016040523d82523d6000602084013e6101f3565b606091505b509150915081156102075791506101659050565b8051156102175780518082602001fd5b8360405162461bcd60e51b815260040161014891906102ee565b3b151590565b6000806000806080858703121561024c578384fd5b8435610257816103ce565b93506020850135610267816103ce565b92506040850135610277816103ce565b9396929550929360600135925050565b600060208284031215610298578081fd5b815180151581146102a7578182fd5b9392505050565b600082516102c08184602087016103a2565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208252825180602084015261030d8160408501602087016103a2565b601f01601f19169190910160400192915050565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b838110156103bd5781810151838201526020016103a5565b838111156100605750506000910152565b6001600160a01b03811681146103e357600080fd5b5056fea2646970667358221220c50177e2df0d47a9c8fb1adae4d3f95bcaa9d0fde27e911bc9050fa525e8ea3264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x21 SWAP1 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x5 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 PUSH2 0x70 JUMP JUMPDEST PUSH2 0x43C DUP1 PUSH2 0x8AA DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x82B DUP1 PUSH2 0x7F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xACD00A5C GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xACD00A5C EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0xDDDFFF87 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0xEC556889 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0xF6274F66 EQ PUSH2 0x14F JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x1BAAA00B EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x2B5BD88E EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x50F9B6CD EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x51FF4847 EQ PUSH2 0xE1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x93 PUSH2 0x8E CALLDATASIZE PUSH1 0x4 PUSH2 0x55C JUMP JUMPDEST PUSH2 0x170 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP3 SWAP2 SWAP1 PUSH2 0x6E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x20E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x793 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x214 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6 PUSH2 0x21A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x712 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x2A8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x2AE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x142 PUSH2 0x2B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x765 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x659 JUMP JUMPDEST PUSH2 0x2C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP3 SWAP2 SWAP1 PUSH2 0x779 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x204 JUMPI PUSH2 0x1C3 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1B6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2C3 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1E2 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 DUP5 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE SWAP2 AND SWAP1 MSTORE PUSH1 0x1 ADD PUSH2 0x176 JUMP JUMPDEST POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2A0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x275 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2A0 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 0x283 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2FB JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x30E PUSH2 0x309 DUP3 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD PUSH1 0x80 DUP1 DUP6 MUL DUP8 ADD DUP4 ADD DUP9 LT ISZERO PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x358 JUMPI PUSH2 0x346 DUP10 DUP5 PUSH2 0x4D4 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP2 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x334 JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x374 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x382 PUSH2 0x309 DUP3 PUSH2 0x7C3 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x358 JUMPI DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3C5 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3A7 JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FA JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x403 DUP2 PUSH2 0x79C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x410 DUP4 DUP4 PUSH2 0x2CE JUMP JUMPDEST DUP2 MSTORE PUSH2 0x41F DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x431 DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0x52D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x443 DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0x52D JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x455 DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0x52D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x467 DUP4 PUSH1 0xA0 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x479 DUP4 PUSH1 0xC0 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x48B DUP4 PUSH1 0xE0 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x49F DUP5 DUP3 DUP6 ADD PUSH2 0x2CE JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x4BD DUP5 DUP3 DUP6 ADD PUSH2 0x544 JUMP JUMPDEST DUP2 DUP4 ADD MSTORE POP PUSH2 0x160 DUP1 DUP4 ADD CALLDATALOAD DUP2 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E5 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x4EF PUSH1 0x80 PUSH2 0x79C JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH2 0x4FC DUP2 PUSH2 0x7E3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x50C DUP2 PUSH2 0x7E3 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x571 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x588 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP2 DUP8 ADD DUP9 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x599 JUMPI DUP7 DUP8 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP PUSH2 0x5A9 PUSH2 0x309 DUP5 PUSH2 0x7C3 JUMP JUMPDEST DUP1 DUP5 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP5 ADD PUSH2 0x180 DUP14 DUP4 DUP3 DUP11 MUL DUP9 ADD ADD GT ISZERO PUSH2 0x5CC JUMPI DUP12 DUP13 REVERT JUMPDEST DUP12 SWAP6 POP JUMPDEST DUP8 DUP7 LT ISZERO PUSH2 0x5F8 JUMPI PUSH2 0x5E2 DUP15 DUP4 PUSH2 0x3E7 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP3 ADD SWAP4 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5D0 JUMP JUMPDEST POP SWAP2 SWAP10 POP DUP11 ADD CALLDATALOAD SWAP5 POP POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x610 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x61C DUP9 DUP4 DUP10 ADD PUSH2 0x2EB JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x631 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x63E DUP8 DUP3 DUP9 ADD PUSH2 0x364 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x64E DUP7 PUSH1 0x60 DUP8 ADD PUSH2 0x3D7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x220 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x66E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x678 DUP6 DUP6 PUSH2 0x3E7 JUMP JUMPDEST SWAP3 POP PUSH2 0x688 DUP6 PUSH2 0x180 DUP7 ADD PUSH2 0x4D4 JUMP JUMPDEST SWAP2 POP PUSH2 0x698 DUP6 PUSH2 0x200 DUP7 ADD PUSH2 0x52D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6D9 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x6B4 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x6F7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x6A1 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x709 DUP2 DUP6 PUSH2 0x6A1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x73E JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x722 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x74F JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x7BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x7D9 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x7F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL 0xAF COINBASE 0xED 0x28 EXP CODECOPY JUMPDEST 0xA6 RETURN 0xA9 0xC9 PUSH4 0xF7D6BD33 CODESIZE SWAP16 PUSH6 0xCC1B1EA637B5 0xFB ADDMOD 0xE5 0xF8 0x5D 0xA7 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41C 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 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2C54DE4F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x237 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x66 AND JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x60 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x87 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2CA 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 PUSH1 0x60 PUSH2 0x10E 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 0x156 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x151 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x287 JUMP JUMPDEST PUSH2 0x151 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP1 PUSH2 0x358 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x165 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x16D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x178 DUP6 PUSH2 0x231 JUMP JUMPDEST PUSH2 0x194 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP1 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B1 SWAP2 SWAP1 PUSH2 0x2AE 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 0x1EE 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 0x1F3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x207 JUMPI SWAP2 POP PUSH2 0x165 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x217 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP2 SWAP1 PUSH2 0x2EE JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x257 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x267 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x277 DUP2 PUSH2 0x3CE JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x298 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2A7 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3A2 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP 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 PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x30D DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3A2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3A5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x60 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 ADD PUSH24 0xE2DF0D47A9C8FB1ADAE4D3F95BCAA9D0FDE27E911BC9050F 0xA5 0x25 0xE8 0xEA ORIGIN PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "402:1378:31:-:0;;;496:1;472:25;;662:105;;;;;;;;;;701:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;693:5:31;:30;;-1:-1:-1;;;;;;693:30:31;-1:-1:-1;;;;;693:30:31;;;;;;;;;;402:1378;;;;;;;;;;:::o;:::-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "60806040526004361061007b5760003560e01c8063acd00a5c1161004e578063acd00a5c14610103578063dddfff8714610118578063ec5568891461012d578063f6274f661461014f5761007b565b80631baaa00b146100805780632b5bd88e146100aa57806350f9b6cd146100cc57806351ff4847146100e1575b600080fd5b61009361008e36600461055c565b610170565b6040516100a19291906106e4565b60405180910390f35b3480156100b657600080fd5b506100bf61020e565b6040516100a19190610793565b3480156100d857600080fd5b506100bf610214565b3480156100ed57600080fd5b506100f661021a565b6040516100a19190610712565b34801561010f57600080fd5b506100bf6102a8565b34801561012457600080fd5b506100bf6102ae565b34801561013957600080fd5b506101426102b4565b6040516100a19190610765565b61016261015d366004610659565b6102c3565b6040516100a1929190610779565b60608060005b8651811015610204576101c387828151811061018e57fe5b60200260200101518783815181106101a257fe5b60200260200101518784815181106101b657fe5b60200260200101516102c3565b8483815181106101cf57fe5b602002602001018484815181106101e257fe5b6001600160801b03938416602091820292909201015291169052600101610176565b5094509492505050565b60015481565b60005481565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102a05780601f10610275576101008083540402835291602001916102a0565b820191906000526020600020905b81548152906001019060200180831161028357829003601f168201915b505050505081565b60045481565b60025481565b6005546001600160a01b031681565b600080935093915050565b80356001600160a01b03811681146102e557600080fd5b92915050565b600082601f8301126102fb578081fd5b813561030e610309826107c3565b61079c565b818152915060208083019084810160808085028701830188101561033157600080fd5b60005b858110156103585761034689846104d4565b85529383019391810191600101610334565b50505050505092915050565b600082601f830112610374578081fd5b8135610382610309826107c3565b8181529150602080830190848101818402860182018710156103a357600080fd5b6000805b858110156103585782356001600160801b03811681146103c5578283fd5b855293830193918301916001016103a7565b803580151581146102e557600080fd5b60006101808083850312156103fa578182fd5b6104038161079c565b91505061041083836102ce565b815261041f83602084016102ce565b6020820152610431836040840161052d565b6040820152610443836060840161052d565b6060820152610455836080840161052d565b60808201526104678360a084016102ce565b60a08201526104798360c084016102ce565b60c082015261048b8360e084016102ce565b60e082015261010061049f848285016102ce565b9082015261012082810135908201526101406104bd84828501610544565b818301525061016080830135818301525092915050565b6000608082840312156104e5578081fd5b6104ef608061079c565b905081356104fc816107e3565b8152602082013561050c816107e3565b80602083015250604082013560408201526060820135606082015292915050565b80356001600160801b03811681146102e557600080fd5b803567ffffffffffffffff811681146102e557600080fd5b60008060008060808587031215610571578384fd5b843567ffffffffffffffff80821115610588578586fd5b81870188601f820112610599578687fd5b803592506105a9610309846107c3565b80848252602080830192508084016101808d83828a0288010111156105cc578b8cfd5b8b95505b878610156105f8576105e28e836103e7565b85526001959095019493820193908101906105d0565b509199508a0135945050505080821115610610578485fd5b61061c888389016102eb565b94506040870135915080821115610631578384fd5b5061063e87828801610364565b92505061064e86606087016103d7565b905092959194509250565b6000806000610220848603121561066e578283fd5b61067885856103e7565b92506106888561018086016104d4565b915061069885610200860161052d565b90509250925092565b6000815180845260208085019450808401835b838110156106d95781516001600160801b0316875295820195908201906001016106b4565b509495945050505050565b6000604082526106f760408301856106a1565b828103602084015261070981856106a1565b95945050505050565b6000602080835283518082850152825b8181101561073e57858101830151858201604001528201610722565b8181111561074f5783604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0391909116815260200190565b6001600160801b0392831681529116602082015260400190565b90815260200190565b60405181810167ffffffffffffffff811182821017156107bb57600080fd5b604052919050565b600067ffffffffffffffff8211156107d9578081fd5b5060209081020190565b60ff811681146107f257600080fd5b5056fea264697066735822122002af41ed280a395ba6f3a9c963f7d6bd33389f65cc1b1ea637b5fb08e5f85da764736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xACD00A5C GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xACD00A5C EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0xDDDFFF87 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0xEC556889 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0xF6274F66 EQ PUSH2 0x14F JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x1BAAA00B EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x2B5BD88E EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x50F9B6CD EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x51FF4847 EQ PUSH2 0xE1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x93 PUSH2 0x8E CALLDATASIZE PUSH1 0x4 PUSH2 0x55C JUMP JUMPDEST PUSH2 0x170 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP3 SWAP2 SWAP1 PUSH2 0x6E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x20E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x793 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x214 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6 PUSH2 0x21A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x712 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x2A8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBF PUSH2 0x2AE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x142 PUSH2 0x2B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x765 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x659 JUMP JUMPDEST PUSH2 0x2C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP3 SWAP2 SWAP1 PUSH2 0x779 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x204 JUMPI PUSH2 0x1C3 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1B6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2C3 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1E2 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 DUP5 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE SWAP2 AND SWAP1 MSTORE PUSH1 0x1 ADD PUSH2 0x176 JUMP JUMPDEST POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2A0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x275 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2A0 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 0x283 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2FB JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x30E PUSH2 0x309 DUP3 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD PUSH1 0x80 DUP1 DUP6 MUL DUP8 ADD DUP4 ADD DUP9 LT ISZERO PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x358 JUMPI PUSH2 0x346 DUP10 DUP5 PUSH2 0x4D4 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP2 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x334 JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x374 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x382 PUSH2 0x309 DUP3 PUSH2 0x7C3 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x358 JUMPI DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3C5 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3A7 JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FA JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x403 DUP2 PUSH2 0x79C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x410 DUP4 DUP4 PUSH2 0x2CE JUMP JUMPDEST DUP2 MSTORE PUSH2 0x41F DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x431 DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0x52D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x443 DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0x52D JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x455 DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0x52D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x467 DUP4 PUSH1 0xA0 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x479 DUP4 PUSH1 0xC0 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x48B DUP4 PUSH1 0xE0 DUP5 ADD PUSH2 0x2CE JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x49F DUP5 DUP3 DUP6 ADD PUSH2 0x2CE JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x4BD DUP5 DUP3 DUP6 ADD PUSH2 0x544 JUMP JUMPDEST DUP2 DUP4 ADD MSTORE POP PUSH2 0x160 DUP1 DUP4 ADD CALLDATALOAD DUP2 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E5 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x4EF PUSH1 0x80 PUSH2 0x79C JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH2 0x4FC DUP2 PUSH2 0x7E3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x50C DUP2 PUSH2 0x7E3 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x571 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x588 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP2 DUP8 ADD DUP9 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x599 JUMPI DUP7 DUP8 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP PUSH2 0x5A9 PUSH2 0x309 DUP5 PUSH2 0x7C3 JUMP JUMPDEST DUP1 DUP5 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP5 ADD PUSH2 0x180 DUP14 DUP4 DUP3 DUP11 MUL DUP9 ADD ADD GT ISZERO PUSH2 0x5CC JUMPI DUP12 DUP13 REVERT JUMPDEST DUP12 SWAP6 POP JUMPDEST DUP8 DUP7 LT ISZERO PUSH2 0x5F8 JUMPI PUSH2 0x5E2 DUP15 DUP4 PUSH2 0x3E7 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP3 ADD SWAP4 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5D0 JUMP JUMPDEST POP SWAP2 SWAP10 POP DUP11 ADD CALLDATALOAD SWAP5 POP POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x610 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x61C DUP9 DUP4 DUP10 ADD PUSH2 0x2EB JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x631 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x63E DUP8 DUP3 DUP9 ADD PUSH2 0x364 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x64E DUP7 PUSH1 0x60 DUP8 ADD PUSH2 0x3D7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x220 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x66E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x678 DUP6 DUP6 PUSH2 0x3E7 JUMP JUMPDEST SWAP3 POP PUSH2 0x688 DUP6 PUSH2 0x180 DUP7 ADD PUSH2 0x4D4 JUMP JUMPDEST SWAP2 POP PUSH2 0x698 DUP6 PUSH2 0x200 DUP7 ADD PUSH2 0x52D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6D9 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x6B4 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x6F7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x6A1 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x709 DUP2 DUP6 PUSH2 0x6A1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x73E JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x722 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x74F JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x7BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x7D9 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x7F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL 0xAF COINBASE 0xED 0x28 EXP CODECOPY JUMPDEST 0xA6 RETURN 0xA9 0xC9 PUSH4 0xF7D6BD33 CODESIZE SWAP16 PUSH6 0xCC1B1EA637B5 0xFB ADDMOD 0xE5 0xF8 0x5D 0xA7 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "402:1378:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1083:695;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;503:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;472:25;;;;;;;;;;;;;:::i;567:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;595:25;;;;;;;;;;;;;:::i;535:26::-;;;;;;;;;;;;;:::i;626:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;773:304;;;;;;;;;:::i;:::-;;;;;;;;;1083:695;1351:40;;1450:9;1445:260;1469:7;:14;1465:1;:18;1445:260;;;1563:131;1595:7;1603:1;1595:10;;;;;;;;;;;;;;1623:11;1635:1;1623:14;;;;;;;;;;;;;;1655:22;1678:1;1655:25;;;;;;;;;;;;;;1563:14;:131::i;:::-;1505:23;1529:1;1505:26;;;;;;;;;;;;;1533:23;1557:1;1533:26;;;;;;;;-1:-1:-1;;;;;1504:190:31;;;1533:26;;;;;;;;;1504:190;;;;;1485:3;;1445:260;;;-1:-1:-1;1083:695:31;;;;;;;:::o;503:26::-;;;;:::o;472:25::-;;;;:::o;567:22::-;;;;;;;;;;;;;;;-1:-1:-1;;567:22:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;595:25::-;;;;:::o;535:26::-;;;;:::o;626:29::-;;;-1:-1:-1;;;;;626:29:31;;:::o;773:304::-;983:30;;773:304;;;;;;:::o;5:130:-1:-;72:20;;-1:-1;;;;;14176:54;;15274:35;;15264:2;;15323:1;;15313:12;15264:2;57:78;;;;;1046:788;;1190:3;1183:4;1175:6;1171:17;1167:27;1157:2;;-1:-1;;1198:12;1157:2;1245:6;1232:20;1267:107;1282:91;1366:6;1282:91;;;1267:107;;;1402:21;;;1258:116;-1:-1;1446:4;1459:14;;;;1434:17;;;1560:4;1548:17;;;1539:27;;;;1536:36;-1:-1;1533:2;;;1585:1;;1575:12;1533:2;1610:1;1595:233;1620:6;1617:1;1614:13;1595:233;;;1700:64;1760:3;1748:10;1700:64;;;1688:77;;1779:14;;;;1807;;;;1642:1;1635:9;1595:233;;;1599:14;;;;;;1150:684;;;;;1860:707;;1977:3;1970:4;1962:6;1958:17;1954:27;1944:2;;-1:-1;;1985:12;1944:2;2032:6;2019:20;2054:80;2069:64;2126:6;2069:64;;2054:80;2162:21;;;2045:89;-1:-1;2206:4;2219:14;;;;2194:17;;;2308;;;2299:27;;;;2296:36;-1:-1;2293:2;;;2345:1;;2335:12;2293:2;2370:1;;2355:206;2380:6;2377:1;2374:13;2355:206;;;5767:6;5754:20;-1:-1;;;;;15668:5;14056:46;15643:5;15640:35;15630:2;;2370:1;;15679:12;15630:2;2448:50;;2512:14;;;;2540;;;;2402:1;2395:9;2355:206;;2575:124;2639:20;;13889:13;;13882:21;15395:32;;15385:2;;15441:1;;15431:12;2890:1984;;3007:6;;2995:9;2990:3;2986:19;2982:32;2979:2;;;-1:-1;;3017:12;2979:2;3045:22;3007:6;3045:22;;;3036:31;;;3155:49;3200:3;3176:22;3155:49;;;3137:16;3130:75;3305:49;3350:3;3272:2;3330:9;3326:22;3305:49;;;3272:2;3291:5;3287:16;3280:75;3456:49;3501:3;3423:2;3481:9;3477:22;3456:49;;;3423:2;3442:5;3438:16;3431:75;3607:49;3652:3;3574:2;3632:9;3628:22;3607:49;;;3574:2;3593:5;3589:16;3582:75;3767:49;3812:3;3733;3792:9;3788:22;3767:49;;;3733:3;3753:5;3749:16;3742:75;3913:49;3958:3;3879;3938:9;3934:22;3913:49;;;3879:3;3899:5;3895:16;3888:75;4059:49;4104:3;4025;4084:9;4080:22;4059:49;;;4025:3;4045:5;4041:16;4034:75;4206:49;4251:3;4172;4231:9;4227:22;4206:49;;;4172:3;4192:5;4188:16;4181:75;4325:3;4361:49;4406:3;4325;4386:9;4382:22;4361:49;;;4341:18;;;4334:77;4472:3;4529:22;;;2773:20;4488:18;;;4481:77;4621:3;4657:48;4701:3;4677:22;;;4657:48;;;4621:3;4641:5;4637:18;4630:76;;4767:3;;4828:9;4824:22;5891:20;4767:3;4787:5;4783:18;4776:77;;2973:1901;;;;;4927:753;;5043:4;5031:9;5026:3;5022:19;5018:30;5015:2;;;-1:-1;;5051:12;5015:2;5079:20;5043:4;5079:20;;;5070:29;;6174:6;6161:20;6186:31;6211:5;6186:31;;;5165:73;;5296:2;5348:22;;6161:20;6186:31;6161:20;6186:31;;;5329:47;5296:2;5315:5;5311:16;5304:73;;5435:2;5493:9;5489:22;2773:20;5435:2;5454:5;5450:16;5443:75;5576:2;5634:9;5630:22;2773:20;5576:2;5595:5;5591:16;5584:75;5009:671;;;;;5687:130;5754:20;;-1:-1;;;;;14056:46;;15640:35;;15630:2;;15689:1;;15679:12;5961:128;6027:20;;14393:18;14382:30;;15887:34;;15877:2;;15935:1;;15925:12;6229:1129;;;;;6511:3;6499:9;6490:7;6486:23;6482:33;6479:2;;;-1:-1;;6518:12;6479:2;6576:17;6563:31;6614:18;;6606:6;6603:30;6600:2;;;-1:-1;;6636:12;6600:2;6755:6;6744:9;6740:22;338:3;331:4;323:6;319:17;315:27;305:2;;-1:-1;;346:12;305:2;393:6;380:20;366:34;;415:108;430:92;515:6;430:92;;415:108;529:16;565:6;558:5;551:21;595:4;;612:3;608:14;601:21;;595:4;587:6;583:17;709:6;719:3;595:4;709:6;701;697:19;587:6;688:29;;685:38;682:2;;;-1:-1;;726:12;682:2;-1:-1;752:10;;746:236;771:6;768:1;765:13;746:236;;;851:65;912:3;900:10;851:65;;;839:78;;793:1;786:9;;;;;931:14;;;;959:16;;;;746:236;;;-1:-1;6656:116;;-1:-1;6822:18;;6809:32;;-1:-1;;;;6850:30;;;6847:2;;;-1:-1;;6883:12;6847:2;6913:105;7010:7;7001:6;6990:9;6986:22;6913:105;;;6903:115;;7083:2;7072:9;7068:18;7055:32;7041:46;;6614:18;7099:6;7096:30;7093:2;;;-1:-1;;7129:12;7093:2;;7159:78;7229:7;7220:6;7209:9;7205:22;7159:78;;;7149:88;;;7292:50;7334:7;7274:2;7314:9;7310:22;7292:50;;;7282:60;;6473:885;;;;;;;;7365:604;;;;7558:3;7546:9;7537:7;7533:23;7529:33;7526:2;;;-1:-1;;7565:12;7526:2;7627:81;7700:7;7676:22;7627:81;;;7617:91;;7764:80;7836:7;7745:3;7816:9;7812:22;7764:80;;;7754:90;;7900:53;7945:7;7881:3;7925:9;7921:22;7900:53;;;7890:63;;7520:449;;;;;;8189:690;;8382:5;13083:12;13498:6;13493:3;13486:19;13535:4;;13530:3;13526:14;8394:93;;13535:4;8558:5;12937:14;-1:-1;8597:260;8622:6;8619:1;8616:13;8597:260;;;8683:13;;-1:-1;;;;;14056:46;9483:37;;8130:14;;;;13341;;;;8644:1;8637:9;8597:260;;;-1:-1;8863:10;;8313:566;-1:-1;;;;;8313:566;9772:629;;10027:2;10048:17;10041:47;10102:108;10027:2;10016:9;10012:18;10196:6;10102:108;;;10258:9;10252:4;10248:20;10243:2;10232:9;10228:18;10221:48;10283:108;10386:4;10377:6;10283:108;;;10275:116;9998:403;-1:-1;;;;;9998:403;10408:306;;10553:2;;10574:17;10567:47;9029:5;13083:12;13498:6;10553:2;10542:9;10538:18;13486:19;-1:-1;14906:101;14920:6;14917:1;14914:13;14906:101;;;14987:11;;;;;14981:18;14968:11;;;13526:14;14968:11;14961:39;14935:10;;14906:101;;;15022:6;15019:1;15016:13;15013:2;;;-1:-1;13526:14;15078:6;10542:9;15069:16;;15062:27;15013:2;-1:-1;15194:7;15178:14;-1:-1;;15174:28;9186:39;;;;13526:14;9186:39;;10524:190;-1:-1;;;10524:190;10721:274;-1:-1;;;;;14176:54;;;;9334:76;;10874:2;10859:18;;10845:150;11002:333;-1:-1;;;;;14056:46;;;9483:37;;14056:46;;11321:2;11306:18;;9483:37;11157:2;11142:18;;11128:207;11342:222;9723:37;;;11469:2;11454:18;;11440:124;11571:256;11633:2;11627:9;11659:17;;;11734:18;11719:34;;11755:22;;;11716:62;11713:2;;;11791:1;;11781:12;11713:2;11633;11800:22;11611:216;;-1:-1;11611:216;11834:332;;12021:18;12013:6;12010:30;12007:2;;;-1:-1;;12043:12;12007:2;-1:-1;12088:4;12076:17;;;12141:15;;11944:222;15951:113;14495:4;16034:5;14484:16;16011:5;16008:33;15998:2;;16055:1;;16045:12;15998:2;15992:72;"
+ },
+ "methodIdentifiers": {
+ "batchFillLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)": "1baaa00b",
+ "called()": "50f9b6cd",
+ "fillAmount()": "acd00a5c",
+ "fillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": "f6274f66",
+ "makerAmount()": "dddfff87",
+ "proxy()": "ec556889",
+ "signature()": "51ff4847",
+ "takerAmount()": "2b5bd88e"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"makerToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"takerToken\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"makerAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"takerAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"takerTokenFeeAmount\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pool\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"internalType\":\"struct ZeroXExchangeInterface.LimitOrder[]\",\"name\":\"_orders\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct ZeroXExchangeInterface.Signature[]\",\"name\":\"_signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint128[]\",\"name\":\"_takerTokenFillAmounts\",\"type\":\"uint128[]\"},{\"internalType\":\"bool\",\"name\":\"_revertIfIncomplete\",\"type\":\"bool\"}],\"name\":\"batchFillLimitOrders\",\"outputs\":[{\"internalType\":\"uint128[]\",\"name\":\"takerTokenFilledAmounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint128[]\",\"name\":\"makerTokenFilledAmounts\",\"type\":\"uint128[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"called\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fillAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"makerToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"takerToken\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"makerAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"takerAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"takerTokenFeeAmount\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pool\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"internalType\":\"struct ZeroXExchangeInterface.LimitOrder\",\"name\":\"_order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct ZeroXExchangeInterface.Signature\",\"name\":\"_signature\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"_takerTokenFillAmount\",\"type\":\"uint128\"}],\"name\":\"fillLimitOrder\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"takerTokenFilledAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"makerTokenFilledAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"makerAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxy\",\"outputs\":[{\"internalType\":\"contract Mock0xERC20Proxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"takerAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"Mock 0x Exchange\"}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/Mock0xExchange.sol\":\"Mock0xExchange\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/ZeroXExchangeInterface.sol\":{\"keccak256\":\"0x5fbb6560df1f3398ba1daa1461191bcd7e89cead09ccd2e18f517def122d733a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b721bf0287858ab2e3e3561ae68a23c4ad13b071f2982d609609a27cf58556a9\",\"dweb:/ipfs/QmUucGcsGcMCXrvmAg9LPjLgYANKm13EYhjo8VXLnzYepd\"]},\"contracts/mocks/Mock0xERC20Proxy.sol\":{\"keccak256\":\"0x8c6c444e50e5a5fb1d3a9e987867b60dd3cba492722b984982beaebd48ad0862\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d73e23922538996c54486c46aa2a19723e3965987071ebf87c9dc1532d48cb1\",\"dweb:/ipfs/QmfQuYsthJacZj84V2S7GPNNLeWcRAB1CYXe7MQmt4JDb7\"]},\"contracts/mocks/Mock0xExchange.sol\":{\"keccak256\":\"0xd2d4ca4b12bf91aec1e522430072bbf05d0be8ed59222c3836add2ee17f7c83e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d05c1474693f2a862f84e882c138e79c7e803bed9ff591cc86b5006ab14c2bf1\",\"dweb:/ipfs/QmbWKtSn6ccGNGUfanbbVXYGfowXiHLz7azgidE9D5BpJ5\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockCToken.sol": {
+ "MockCToken": {
+ "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": [],
+ "name": "exchangeRateStored",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_exchangeRateStored",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExchangeRate",
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040523480156200001157600080fd5b5060405162000f7638038062000f76833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505050620001b18282620001ce60201b60201c565b620001c660086001600160e01b03620002bc16565b50506200037b565b600054610100900460ff1680620001f35750620001f36001600160e01b03620002d216565b8062000202575060005460ff16155b6200023f5760405162461bcd60e51b815260040180806020018281038252602e81526020018062000f48602e913960400191505060405180910390fd5b600054610100900460ff161580156200026b576000805460ff1961ff0019909116610100171660011790555b825162000280906068906020860190620002d9565b50815162000296906069906020850190620002d9565b50606a805460ff191660121790558015620002b7576000805461ff00191690555b505050565b606a805460ff191660ff92909216919091179055565b303b155b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200031c57805160ff19168380011785556200034c565b828001600101855582156200034c579182015b828111156200034c5782518255916020019190600101906200032f565b506200035a9291506200035e565b5090565b620002d691905b808211156200035a576000815560010162000365565b610bbd806200038b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806340c10f191161008c578063a457c2d711610066578063a457c2d7146102aa578063a9059cbb146102d6578063db068e0e14610302578063dd62ed3e1461031f576100ea565b806340c10f191461024e57806370a082311461027c57806395d89b41146102a2576100ea565b8063182df0f5116100c8578063182df0f5146101c657806323b872dd146101ce578063313ce567146102045780633950935114610222576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101ac575b600080fd5b6100f761034d565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101986004803603604081101561018257600080fd5b506001600160a01b0381351690602001356103e3565b604080519115158252519081900360200190f35b6101b4610400565b60408051918252519081900360200190f35b6101b4610406565b610198600480360360608110156101e457600080fd5b506001600160a01b0381358116916020810135909116906040013561040c565b61020c610499565b6040805160ff9092168252519081900360200190f35b6101986004803603604081101561023857600080fd5b506001600160a01b0381351690602001356104a2565b61027a6004803603604081101561026457600080fd5b506001600160a01b0381351690602001356104f6565b005b6101b46004803603602081101561029257600080fd5b50356001600160a01b0316610504565b6100f761051f565b610198600480360360408110156102c057600080fd5b506001600160a01b038135169060200135610580565b610198600480360360408110156102ec57600080fd5b506001600160a01b0381351690602001356105ee565b61027a6004803603602081101561031857600080fd5b5035610602565b6101b46004803603604081101561033557600080fd5b506001600160a01b0381358116916020013516610607565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b820191906000526020600020905b8154815290600101906020018083116103bc57829003601f168201915b5050505050905090565b60006103f76103f0610632565b8484610636565b50600192915050565b60675490565b60975481565b6000610419848484610722565b61048f84610425610632565b61048a85604051806060016040528060288152602001610af2602891396001600160a01b038a16600090815260666020526040812090610463610632565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61088b16565b610636565b5060019392505050565b606a5460ff1690565b60006103f76104af610632565b8461048a85606660006104c0610632565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61092216565b6105008282610983565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b60006103f761058d610632565b8461048a85604051806060016040528060258152602001610b6360259139606660006105b7610632565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61088b16565b60006103f76105fb610632565b8484610722565b609755565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b03831661067b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610b3f6024913960400191505060405180910390fd5b6001600160a01b0382166106c05760405162461bcd60e51b8152600401808060200182810382526022815260200180610aaa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107675760405162461bcd60e51b8152600401808060200182810382526025815260200180610b1a6025913960400191505060405180910390fd5b6001600160a01b0382166107ac5760405162461bcd60e51b8152600401808060200182810382526023815260200180610a876023913960400191505060405180910390fd5b6107b7838383610a81565b6107fa81604051806060016040528060268152602001610acc602691396001600160a01b038616600090815260656020526040902054919063ffffffff61088b16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461082f908263ffffffff61092216565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561097c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166109de576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109ea60008383610a81565b6067546109fd908263ffffffff61092216565b6067556001600160a01b038216600090815260656020526040902054610a29908263ffffffff61092216565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077db0c49192d1512b5ef323070ab6a6bec8b2df19c848c37ffad0f090044d67c64736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF76 CODESIZE SUB DUP1 PUSH3 0xF76 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP PUSH3 0x1B1 DUP3 DUP3 PUSH3 0x1CE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1C6 PUSH1 0x8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2BC AND JUMP JUMPDEST POP POP PUSH3 0x37B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x1F3 JUMPI POP PUSH3 0x1F3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2D2 AND JUMP JUMPDEST DUP1 PUSH3 0x202 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x23F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0xF48 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x26B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH3 0x280 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x296 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH3 0x2B7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x31C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x34C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x34C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x34C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x32F JUMP JUMPDEST POP PUSH3 0x35A SWAP3 SWAP2 POP PUSH3 0x35E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x2D6 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x35A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x365 JUMP JUMPDEST PUSH2 0xBBD DUP1 PUSH3 0x38B 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 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2D6 JUMPI DUP1 PUSH4 0xDB068E0E EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x31F JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2A2 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x182DF0F5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x182DF0F5 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x204 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x222 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1AC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B4 PUSH2 0x400 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40C JUMP JUMPDEST PUSH2 0x20C PUSH2 0x499 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4F6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x504 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x51F JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x580 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5EE JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x602 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 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 0x3BC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x3F0 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x419 DUP5 DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH2 0x48F DUP5 PUSH2 0x425 PUSH2 0x632 JUMP JUMPDEST PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAF2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x463 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x4AF PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x4C0 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH2 0x500 DUP3 DUP3 PUSH2 0x983 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x58D PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB63 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x5B7 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x5FB PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB3F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAAA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB1A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA87 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B7 DUP4 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH2 0x7FA DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xACC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x82F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x97C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9EA PUSH1 0x0 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x9FD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA29 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x735822122077DB 0xC 0x49 NOT 0x2D ISZERO SLT 0xB5 0xEF ORIGIN ADDRESS PUSH17 0xAB6A6BEC8B2DF19C848C37FFAD0F090044 0xD6 PUSH29 0x64736F6C634300060A0033436F6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564000000000000000000 ",
+ "sourceMap": "150:458:32:-:0;;;236:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;236:145:32;;;;;;;;;;-1:-1:-1;236:145:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;236:145:32;;;;;;;;;;-1:-1:-1;236:145:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;309:38;332:5;339:7;309:22;;;:38;;:::i;:::-;357:17;372:1;-1:-1:-1;;;;;357:14:32;:17;:::i;:::-;236:145;;150:458;;2296:178:54;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;10531:88::-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;;:::o;150:458:32:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150:458:32;;;-1:-1:-1;150:458:32;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c806340c10f191161008c578063a457c2d711610066578063a457c2d7146102aa578063a9059cbb146102d6578063db068e0e14610302578063dd62ed3e1461031f576100ea565b806340c10f191461024e57806370a082311461027c57806395d89b41146102a2576100ea565b8063182df0f5116100c8578063182df0f5146101c657806323b872dd146101ce578063313ce567146102045780633950935114610222576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101ac575b600080fd5b6100f761034d565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101986004803603604081101561018257600080fd5b506001600160a01b0381351690602001356103e3565b604080519115158252519081900360200190f35b6101b4610400565b60408051918252519081900360200190f35b6101b4610406565b610198600480360360608110156101e457600080fd5b506001600160a01b0381358116916020810135909116906040013561040c565b61020c610499565b6040805160ff9092168252519081900360200190f35b6101986004803603604081101561023857600080fd5b506001600160a01b0381351690602001356104a2565b61027a6004803603604081101561026457600080fd5b506001600160a01b0381351690602001356104f6565b005b6101b46004803603602081101561029257600080fd5b50356001600160a01b0316610504565b6100f761051f565b610198600480360360408110156102c057600080fd5b506001600160a01b038135169060200135610580565b610198600480360360408110156102ec57600080fd5b506001600160a01b0381351690602001356105ee565b61027a6004803603602081101561031857600080fd5b5035610602565b6101b46004803603604081101561033557600080fd5b506001600160a01b0381358116916020013516610607565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b820191906000526020600020905b8154815290600101906020018083116103bc57829003601f168201915b5050505050905090565b60006103f76103f0610632565b8484610636565b50600192915050565b60675490565b60975481565b6000610419848484610722565b61048f84610425610632565b61048a85604051806060016040528060288152602001610af2602891396001600160a01b038a16600090815260666020526040812090610463610632565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61088b16565b610636565b5060019392505050565b606a5460ff1690565b60006103f76104af610632565b8461048a85606660006104c0610632565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61092216565b6105008282610983565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b60006103f761058d610632565b8461048a85604051806060016040528060258152602001610b6360259139606660006105b7610632565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61088b16565b60006103f76105fb610632565b8484610722565b609755565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b03831661067b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610b3f6024913960400191505060405180910390fd5b6001600160a01b0382166106c05760405162461bcd60e51b8152600401808060200182810382526022815260200180610aaa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107675760405162461bcd60e51b8152600401808060200182810382526025815260200180610b1a6025913960400191505060405180910390fd5b6001600160a01b0382166107ac5760405162461bcd60e51b8152600401808060200182810382526023815260200180610a876023913960400191505060405180910390fd5b6107b7838383610a81565b6107fa81604051806060016040528060268152602001610acc602691396001600160a01b038616600090815260656020526040902054919063ffffffff61088b16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461082f908263ffffffff61092216565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561097c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166109de576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109ea60008383610a81565b6067546109fd908263ffffffff61092216565b6067556001600160a01b038216600090815260656020526040902054610a29908263ffffffff61092216565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077db0c49192d1512b5ef323070ab6a6bec8b2df19c848c37ffad0f090044d67c64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2D6 JUMPI DUP1 PUSH4 0xDB068E0E EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x31F JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2A2 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x182DF0F5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x182DF0F5 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x204 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x222 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1AC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B4 PUSH2 0x400 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40C JUMP JUMPDEST PUSH2 0x20C PUSH2 0x499 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4F6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x504 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x51F JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x580 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5EE JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x602 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 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 0x3BC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x3F0 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x419 DUP5 DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH2 0x48F DUP5 PUSH2 0x425 PUSH2 0x632 JUMP JUMPDEST PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAF2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x463 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x4AF PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x4C0 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH2 0x500 DUP3 DUP3 PUSH2 0x983 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x58D PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB63 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x5B7 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x5FB PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB3F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAAA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB1A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA87 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B7 DUP4 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH2 0x7FA DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xACC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x82F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x97C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9EA PUSH1 0x0 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x9FD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA29 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x735822122077DB 0xC 0x49 NOT 0x2D ISZERO SLT 0xB5 0xEF ORIGIN ADDRESS PUSH17 0xAB6A6BEC8B2DF19C848C37FFAD0F090044 0xD6 PUSH29 0x64736F6C634300060A0033000000000000000000000000000000000000 ",
+ "sourceMap": "150:458:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3582:98;;;:::i;:::-;;;;;;;;;;;;;;;;196:33:32;;;:::i;5208:393:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5996:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;387:93:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;387:93:32;;;;;;;;:::i;:::-;;3738:117:54;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2733:85::-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;486:120:32:-;;;;;;;;;;;;;;;;-1:-1:-1;486:120:32;;:::i;4288:149:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;2539:81::-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;3582:98::-;3661:12;;3582:98;:::o;196:33:32:-;;;;:::o;5208:393:54:-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;5996:215::-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;387:93:32:-;451:22;457:7;466:6;451:5;:22::i;:::-;387:93;;:::o;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2733:85::-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;486:120:32:-;559:18;:40;486:120::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;938:176::-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;11206:121::-;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "exchangeRateStored()": "182df0f5",
+ "increaseAllowance(address,uint256)": "39509351",
+ "mint(address,uint256)": "40c10f19",
+ "name()": "06fdde03",
+ "setExchangeRate(uint256)": "db068e0e",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_exchangeRateStored\",\"type\":\"uint256\"}],\"name\":\"setExchangeRate\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockCToken.sol\":\"MockCToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/mocks/MockCToken.sol\":{\"keccak256\":\"0x1e76265d7f2ba2290fd701c3844ff6dfb04d39b273e7ef1026ac20dc2c7be430\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6e73eba32586d29c025a18ab769a7c7d5ed16cd3a3fd3810ba12f4233ac55143\",\"dweb:/ipfs/QmNTF235EAMSZJxUUUAXcmrTWNrsqmkw3gNodt464xecXi\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockCUSDC.sol": {
+ "MockCUSDC": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "_symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_initExchangeRateStored",
+ "type": "uint256"
+ }
+ ],
+ "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": [],
+ "name": "exchangeRateStored",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "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": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "redeem",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "scale",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_exchangeRateStored",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExchangeRate",
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlying",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "6080604052670de0b6b3a76400006099553480156200001d57600080fd5b506040516200145338038062001453833981810160405260808110156200004357600080fd5b81019080805160405193929190846401000000008211156200006457600080fd5b9083019060208201858111156200007a57600080fd5b82516401000000008111828201881017156200009557600080fd5b82525081516020918201929091019080838360005b83811015620000c4578181015183820152602001620000aa565b50505050905090810190601f168015620000f25780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011657600080fd5b9083019060208201858111156200012c57600080fd5b82516401000000008111828201881017156200014757600080fd5b82525081516020918201929091019080838360005b83811015620001765781810151838201526020016200015c565b50505050905090810190601f168015620001a45780820380516001836020036101000a031916815260200191505b50604090815260208201519101519092509050620001cc84846001600160e01b036200020e16565b620001e160086001600160e01b03620002fc16565b609880546001600160a01b0319166001600160a01b03939093169290921790915560975550620003bb9050565b600054610100900460ff1680620002335750620002336001600160e01b036200031216565b8062000242575060005460ff16155b6200027f5760405162461bcd60e51b815260040180806020018281038252602e81526020018062001425602e913960400191505060405180910390fd5b600054610100900460ff16158015620002ab576000805460ff1961ff0019909116610100171660011790555b8251620002c090606890602086019062000319565b508151620002d690606990602085019062000319565b50606a805460ff191660121790558015620002f7576000805461ff00191690555b505050565b606a805460ff191660ff92909216919091179055565b303b155b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200035c57805160ff19168380011785556200038c565b828001600101855582156200038c579182015b828111156200038c5782518255916020019190600101906200036f565b506200039a9291506200039e565b5090565b6200031691905b808211156200039a5760008155600101620003a5565b61105a80620003cb6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a9059cbb11610071578063a9059cbb1461030a578063db006a7514610336578063db068e0e14610353578063dd62ed3e14610372578063f51e181a146103a05761010b565b806370a082311461029357806395d89b41146102b9578063a0712d68146102c1578063a457c2d7146102de5761010b565b806323b872dd116100de57806323b872dd146101ef578063313ce5671461022557806339509351146102435780636f307dc31461026f5761010b565b806306fdde0314610110578063095ea7b31461018d57806318160ddd146101cd578063182df0f5146101e7575b600080fd5b6101186103a8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015257818101518382015260200161013a565b50505050905090810190601f16801561017f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b9600480360360408110156101a357600080fd5b506001600160a01b03813516906020013561043e565b604080519115158252519081900360200190f35b6101d561045c565b60408051918252519081900360200190f35b6101d5610462565b6101b96004803603606081101561020557600080fd5b506001600160a01b03813581169160208101359091169060400135610468565b61022d6104f5565b6040805160ff9092168252519081900360200190f35b6101b96004803603604081101561025957600080fd5b506001600160a01b0381351690602001356104fe565b610277610552565b604080516001600160a01b039092168252519081900360200190f35b6101d5600480360360208110156102a957600080fd5b50356001600160a01b0316610561565b61011861057c565b6101d5600480360360208110156102d757600080fd5b50356105dd565b6101b9600480360360408110156102f457600080fd5b506001600160a01b0381351690602001356106aa565b6101b96004803603604081101561032057600080fd5b506001600160a01b038135169060200135610718565b6101d56004803603602081101561034c57600080fd5b503561072c565b6103706004803603602081101561036957600080fd5b50356107eb565b005b6101d56004803603604081101561038857600080fd5b506001600160a01b03813581169160200135166107f0565b6101d561081b565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104345780601f1061040957610100808354040283529160200191610434565b820191906000526020600020905b81548152906001019060200180831161041757829003601f168201915b5050505050905090565b600061045261044b610821565b8484610825565b5060015b92915050565b60675490565b60975481565b6000610475848484610911565b6104eb84610481610821565b6104e685604051806060016040528060288152602001610f6e602891396001600160a01b038a166000908152606660205260408120906104bf610821565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610a7a16565b610825565b5060019392505050565b606a5460ff1690565b600061045261050b610821565b846104e6856066600061051c610821565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610b1116565b6098546001600160a01b031681565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104345780601f1061040957610100808354040283529160200191610434565b6000806105f583609954610b7290919063ffffffff16565b9050600061060e60975483610bcb90919063ffffffff16565b905061061a3382610c0d565b609854604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561067457600080fd5b505af1158015610688573d6000803e3d6000fd5b505050506040513d602081101561069e57600080fd5b50600095945050505050565b60006104526106b7610821565b846104e68560405180606001604052806025815260200161100060259139606660006106e1610821565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610a7a16565b6000610452610725610821565b8484610911565b60006107383383610d0b565b600061076160995461075560975486610b7290919063ffffffff16565b9063ffffffff610bcb16565b6098546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156107b857600080fd5b505af11580156107cc573d6000803e3d6000fd5b505050506040513d60208110156107e257600080fd5b50919392505050565b609755565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b60995481565b3390565b6001600160a01b03831661086a5760405162461bcd60e51b8152600401808060200182810382526024815260200180610fdc6024913960400191505060405180910390fd5b6001600160a01b0382166108af5760405162461bcd60e51b8152600401808060200182810382526022815260200180610f056022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166109565760405162461bcd60e51b8152600401808060200182810382526025815260200180610fb76025913960400191505060405180910390fd5b6001600160a01b03821661099b5760405162461bcd60e51b8152600401808060200182810382526023815260200180610ec06023913960400191505060405180910390fd5b6109a6838383610e13565b6109e981604051806060016040528060268152602001610f27602691396001600160a01b038616600090815260656020526040902054919063ffffffff610a7a16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610a1e908263ffffffff610b1116565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610b095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ace578181015183820152602001610ab6565b50505050905090810190601f168015610afb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610b6b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082610b8157506000610456565b82820282848281610b8e57fe5b0414610b6b5760405162461bcd60e51b8152600401808060200182810382526021815260200180610f4d6021913960400191505060405180910390fd5b6000610b6b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e18565b6001600160a01b038216610c68576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610c7460008383610e13565b606754610c87908263ffffffff610b1116565b6067556001600160a01b038216600090815260656020526040902054610cb3908263ffffffff610b1116565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610d505760405162461bcd60e51b8152600401808060200182810382526021815260200180610f966021913960400191505060405180910390fd5b610d5c82600083610e13565b610d9f81604051806060016040528060228152602001610ee3602291396001600160a01b038516600090815260656020526040902054919063ffffffff610a7a16565b6001600160a01b038316600090815260656020526040902055606754610dcb908263ffffffff610e7d16565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b60008183610e675760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ace578181015183820152602001610ab6565b506000838581610e7357fe5b0495945050505050565b6000610b6b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610a7a56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206b42fd4b0c19d342114edd42c13ba1d047a7f38146af1ee8437faac71d46d28f64736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0x99 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1453 CODESIZE SUB DUP1 PUSH3 0x1453 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH3 0x43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xC4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xAA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xF2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x176 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x15C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1A4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x1CC DUP5 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x20E AND JUMP JUMPDEST PUSH3 0x1E1 PUSH1 0x8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2FC AND JUMP JUMPDEST PUSH1 0x98 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x97 SSTORE POP PUSH3 0x3BB SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x233 JUMPI POP PUSH3 0x233 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x312 AND JUMP JUMPDEST DUP1 PUSH3 0x242 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x27F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0x1425 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x2AB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH3 0x2C0 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x319 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x2D6 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x319 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH3 0x2F7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x35C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x38C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x38C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x38C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x36F JUMP JUMPDEST POP PUSH3 0x39A SWAP3 SWAP2 POP PUSH3 0x39E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x316 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x39A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x3A5 JUMP JUMPDEST PUSH2 0x105A DUP1 PUSH3 0x3CB 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 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0xDB006A75 EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0xDB068E0E EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x372 JUMPI DUP1 PUSH4 0xF51E181A EQ PUSH2 0x3A0 JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2DE JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x26F JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x182DF0F5 EQ PUSH2 0x1E7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x3A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x152 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x13A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x17F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D5 PUSH2 0x45C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D5 PUSH2 0x462 JUMP JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST PUSH2 0x22D PUSH2 0x4F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x259 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x277 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x561 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x57C JUMP JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5DD JUMP JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6AA JUMP JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x718 JUMP JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x72C JUMP JUMPDEST PUSH2 0x370 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7EB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x1D5 PUSH2 0x81B JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x434 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x409 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x434 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 0x417 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x44B PUSH2 0x821 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x825 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x475 DUP5 DUP5 DUP5 PUSH2 0x911 JUMP JUMPDEST PUSH2 0x4EB DUP5 PUSH2 0x481 PUSH2 0x821 JUMP JUMPDEST PUSH2 0x4E6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4BF PUSH2 0x821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH2 0x825 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x50B PUSH2 0x821 JUMP JUMPDEST DUP5 PUSH2 0x4E6 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x51C PUSH2 0x821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x98 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x434 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x409 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x434 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x5F5 DUP4 PUSH1 0x99 SLOAD PUSH2 0xB72 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x60E PUSH1 0x97 SLOAD DUP4 PUSH2 0xBCB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x61A CALLER DUP3 PUSH2 0xC0D JUMP JUMPDEST PUSH1 0x98 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x674 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x688 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x6B7 PUSH2 0x821 JUMP JUMPDEST DUP5 PUSH2 0x4E6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1000 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x6E1 PUSH2 0x821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x725 PUSH2 0x821 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x911 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x738 CALLER DUP4 PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x761 PUSH1 0x99 SLOAD PUSH2 0x755 PUSH1 0x97 SLOAD DUP7 PUSH2 0xB72 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xBCB AND JUMP JUMPDEST PUSH1 0x98 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA9059CBB SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 0x99 SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x86A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFDC PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x8AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF05 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x956 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFB7 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x99B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xEC0 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9A6 DUP4 DUP4 DUP4 PUSH2 0xE13 JUMP JUMPDEST PUSH2 0x9E9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF27 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA1E SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xB09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xACE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAB6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xAFB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xB6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xB81 JUMPI POP PUSH1 0x0 PUSH2 0x456 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0xB8E JUMPI INVALID JUMPDEST DIV EQ PUSH2 0xB6B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF4D PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB6B DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0xE18 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC74 PUSH1 0x0 DUP4 DUP4 PUSH2 0xE13 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0xC87 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xCB3 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF96 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD5C DUP3 PUSH1 0x0 DUP4 PUSH2 0xE13 JUMP JUMPDEST PUSH2 0xD9F DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEE3 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0xDCB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xE7D AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0xE67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xACE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAB6 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0xE73 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB6B DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xA7A JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636553616665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212206B42 REVERT 0x4B 0xC NOT 0xD3 TIMESTAMP GT 0x4E 0xDD TIMESTAMP 0xC1 EXTCODESIZE LOG1 0xD0 SELFBALANCE 0xA7 RETURN DUP2 CHAINID 0xAF 0x1E 0xE8 NUMBER PUSH32 0xAAC71D46D28F64736F6C634300060A0033436F6E747261637420696E7374616E PUSH4 0x65206861 PUSH20 0x20616C7265616479206265656E20696E69746961 PUSH13 0x697A6564000000000000000000 ",
+ "sourceMap": "269:1185:33:-:0;;;407:4;384:27;;418:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;418:326:33;;;;;;;;;;-1:-1:-1;418:326:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;418:326:33;;;;;;;;;;-1:-1:-1;418:326:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;418:326:33;;;;;;;;;;;;;-1:-1:-1;418:326:33;-1:-1:-1;583:38:33;606:5;613:7;-1:-1:-1;;;;;583:22:33;:38;:::i;:::-;631:17;646:1;-1:-1:-1;;;;;631:14:33;:17;:::i;:::-;659:10;:24;;-1:-1:-1;;;;;;659:24:33;-1:-1:-1;;;;;659:24:33;;;;;;;;;;;693:18;:44;-1:-1:-1;269:1185:33;;-1:-1:-1;269:1185:33;2296:178:54;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;10531:88::-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;;:::o;269:1185:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;269:1185:33;;;-1:-1:-1;269:1185:33;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a9059cbb11610071578063a9059cbb1461030a578063db006a7514610336578063db068e0e14610353578063dd62ed3e14610372578063f51e181a146103a05761010b565b806370a082311461029357806395d89b41146102b9578063a0712d68146102c1578063a457c2d7146102de5761010b565b806323b872dd116100de57806323b872dd146101ef578063313ce5671461022557806339509351146102435780636f307dc31461026f5761010b565b806306fdde0314610110578063095ea7b31461018d57806318160ddd146101cd578063182df0f5146101e7575b600080fd5b6101186103a8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015257818101518382015260200161013a565b50505050905090810190601f16801561017f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b9600480360360408110156101a357600080fd5b506001600160a01b03813516906020013561043e565b604080519115158252519081900360200190f35b6101d561045c565b60408051918252519081900360200190f35b6101d5610462565b6101b96004803603606081101561020557600080fd5b506001600160a01b03813581169160208101359091169060400135610468565b61022d6104f5565b6040805160ff9092168252519081900360200190f35b6101b96004803603604081101561025957600080fd5b506001600160a01b0381351690602001356104fe565b610277610552565b604080516001600160a01b039092168252519081900360200190f35b6101d5600480360360208110156102a957600080fd5b50356001600160a01b0316610561565b61011861057c565b6101d5600480360360208110156102d757600080fd5b50356105dd565b6101b9600480360360408110156102f457600080fd5b506001600160a01b0381351690602001356106aa565b6101b96004803603604081101561032057600080fd5b506001600160a01b038135169060200135610718565b6101d56004803603602081101561034c57600080fd5b503561072c565b6103706004803603602081101561036957600080fd5b50356107eb565b005b6101d56004803603604081101561038857600080fd5b506001600160a01b03813581169160200135166107f0565b6101d561081b565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104345780601f1061040957610100808354040283529160200191610434565b820191906000526020600020905b81548152906001019060200180831161041757829003601f168201915b5050505050905090565b600061045261044b610821565b8484610825565b5060015b92915050565b60675490565b60975481565b6000610475848484610911565b6104eb84610481610821565b6104e685604051806060016040528060288152602001610f6e602891396001600160a01b038a166000908152606660205260408120906104bf610821565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610a7a16565b610825565b5060019392505050565b606a5460ff1690565b600061045261050b610821565b846104e6856066600061051c610821565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610b1116565b6098546001600160a01b031681565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104345780601f1061040957610100808354040283529160200191610434565b6000806105f583609954610b7290919063ffffffff16565b9050600061060e60975483610bcb90919063ffffffff16565b905061061a3382610c0d565b609854604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561067457600080fd5b505af1158015610688573d6000803e3d6000fd5b505050506040513d602081101561069e57600080fd5b50600095945050505050565b60006104526106b7610821565b846104e68560405180606001604052806025815260200161100060259139606660006106e1610821565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610a7a16565b6000610452610725610821565b8484610911565b60006107383383610d0b565b600061076160995461075560975486610b7290919063ffffffff16565b9063ffffffff610bcb16565b6098546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156107b857600080fd5b505af11580156107cc573d6000803e3d6000fd5b505050506040513d60208110156107e257600080fd5b50919392505050565b609755565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b60995481565b3390565b6001600160a01b03831661086a5760405162461bcd60e51b8152600401808060200182810382526024815260200180610fdc6024913960400191505060405180910390fd5b6001600160a01b0382166108af5760405162461bcd60e51b8152600401808060200182810382526022815260200180610f056022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166109565760405162461bcd60e51b8152600401808060200182810382526025815260200180610fb76025913960400191505060405180910390fd5b6001600160a01b03821661099b5760405162461bcd60e51b8152600401808060200182810382526023815260200180610ec06023913960400191505060405180910390fd5b6109a6838383610e13565b6109e981604051806060016040528060268152602001610f27602691396001600160a01b038616600090815260656020526040902054919063ffffffff610a7a16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610a1e908263ffffffff610b1116565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610b095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ace578181015183820152602001610ab6565b50505050905090810190601f168015610afb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610b6b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082610b8157506000610456565b82820282848281610b8e57fe5b0414610b6b5760405162461bcd60e51b8152600401808060200182810382526021815260200180610f4d6021913960400191505060405180910390fd5b6000610b6b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e18565b6001600160a01b038216610c68576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610c7460008383610e13565b606754610c87908263ffffffff610b1116565b6067556001600160a01b038216600090815260656020526040902054610cb3908263ffffffff610b1116565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610d505760405162461bcd60e51b8152600401808060200182810382526021815260200180610f966021913960400191505060405180910390fd5b610d5c82600083610e13565b610d9f81604051806060016040528060228152602001610ee3602291396001600160a01b038516600090815260656020526040902054919063ffffffff610a7a16565b6001600160a01b038316600090815260656020526040902055606754610dcb908263ffffffff610e7d16565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b60008183610e675760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ace578181015183820152602001610ab6565b506000838581610e7357fe5b0495945050505050565b6000610b6b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610a7a56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206b42fd4b0c19d342114edd42c13ba1d047a7f38146af1ee8437faac71d46d28f64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0xDB006A75 EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0xDB068E0E EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x372 JUMPI DUP1 PUSH4 0xF51E181A EQ PUSH2 0x3A0 JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2DE JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x26F JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x182DF0F5 EQ PUSH2 0x1E7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x3A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x152 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x13A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x17F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D5 PUSH2 0x45C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D5 PUSH2 0x462 JUMP JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST PUSH2 0x22D PUSH2 0x4F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x259 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x277 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x561 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x57C JUMP JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5DD JUMP JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6AA JUMP JUMPDEST PUSH2 0x1B9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x718 JUMP JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x72C JUMP JUMPDEST PUSH2 0x370 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7EB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x1D5 PUSH2 0x81B JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x434 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x409 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x434 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 0x417 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x44B PUSH2 0x821 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x825 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x475 DUP5 DUP5 DUP5 PUSH2 0x911 JUMP JUMPDEST PUSH2 0x4EB DUP5 PUSH2 0x481 PUSH2 0x821 JUMP JUMPDEST PUSH2 0x4E6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4BF PUSH2 0x821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH2 0x825 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x50B PUSH2 0x821 JUMP JUMPDEST DUP5 PUSH2 0x4E6 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x51C PUSH2 0x821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x98 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x434 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x409 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x434 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x5F5 DUP4 PUSH1 0x99 SLOAD PUSH2 0xB72 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x60E PUSH1 0x97 SLOAD DUP4 PUSH2 0xBCB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x61A CALLER DUP3 PUSH2 0xC0D JUMP JUMPDEST PUSH1 0x98 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x674 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x688 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x6B7 PUSH2 0x821 JUMP JUMPDEST DUP5 PUSH2 0x4E6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1000 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x6E1 PUSH2 0x821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x452 PUSH2 0x725 PUSH2 0x821 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x911 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x738 CALLER DUP4 PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x761 PUSH1 0x99 SLOAD PUSH2 0x755 PUSH1 0x97 SLOAD DUP7 PUSH2 0xB72 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xBCB AND JUMP JUMPDEST PUSH1 0x98 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA9059CBB SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 0x99 SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x86A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFDC PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x8AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF05 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x956 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFB7 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x99B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xEC0 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9A6 DUP4 DUP4 DUP4 PUSH2 0xE13 JUMP JUMPDEST PUSH2 0x9E9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF27 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA1E SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xB09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xACE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAB6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xAFB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xB6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xB81 JUMPI POP PUSH1 0x0 PUSH2 0x456 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0xB8E JUMPI INVALID JUMPDEST DIV EQ PUSH2 0xB6B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF4D PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB6B DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0xE18 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC74 PUSH1 0x0 DUP4 DUP4 PUSH2 0xE13 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0xC87 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xCB3 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB11 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF96 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD5C DUP3 PUSH1 0x0 DUP4 PUSH2 0xE13 JUMP JUMPDEST PUSH2 0xD9F DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEE3 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xA7A AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0xDCB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xE7D AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0xE67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xACE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAB6 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0xE73 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB6B DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xA7A JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636553616665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212206B42 REVERT 0x4B 0xC NOT 0xD3 TIMESTAMP GT 0x4E 0xDD TIMESTAMP 0xC1 EXTCODESIZE LOG1 0xD0 SELFBALANCE 0xA7 RETURN DUP2 CHAINID 0xAF 0x1E 0xE8 NUMBER PUSH32 0xAAC71D46D28F64736F6C634300060A0033000000000000000000000000000000 ",
+ "sourceMap": "269:1185:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3582:98;;;:::i;:::-;;;;;;;;;;;;;;;;314:33:33;;;:::i;5208:393:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5996:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;353:25:33:-;;;:::i;:::-;;;;-1:-1:-1;;;;;353:25:33;;;;;;;;;;;;;;3738:117:54;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2733:85::-;;;:::i;750:318:33:-;;;;;;;;;;;;;;;;-1:-1:-1;750:318:33;;:::i;6698:312:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;1074:252:33:-;;;;;;;;;;;;;;;;-1:-1:-1;1074:252:33;;:::i;1332:120::-;;;;;;;;;;;;;;;;-1:-1:-1;1332:120:33;;:::i;:::-;;4288:149:54;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;384:27:33:-;;;:::i;2539:81:54:-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;;:::o;3582:98::-;3661:12;;3582:98;:::o;314:33:33:-;;;;:::o;5208:393:54:-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;5996:215::-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;353:25:33:-;;;-1:-1:-1;;;;;353:25:33;;:::o;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2733:85::-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;750:318:33;796:7;815:17;835;845:6;835:5;;:9;;:17;;;;:::i;:::-;815:37;;862:20;885:33;899:18;;885:9;:13;;:33;;;;:::i;:::-;862:56;;928:31;934:10;946:12;928:5;:31::i;:::-;984:10;;969:74;;;-1:-1:-1;;;969:74:33;;1009:10;969:74;;;;1029:4;969:74;;;;;;;;;;;;-1:-1:-1;;;;;984:10:33;;;;969:39;;:74;;;;;;;;;;;;;;;984:10;;969:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1060:1:33;;750:318;-1:-1:-1;;;;;750:318:33:o;6698:312:54:-;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;1074:252:33:-;1122:7;1141:25;1147:10;1159:6;1141:5;:25::i;:::-;1176:24;1203:41;1238:5;;1203:30;1214:18;;1203:6;:10;;:30;;;;:::i;:::-;:34;:41;:34;:41;:::i;:::-;1269:10;;1254:65;;;-1:-1:-1;;;1254:65:33;;1290:10;1254:65;;;;;;;;;;;;1176:68;;-1:-1:-1;;;;;;1269:10:33;;;;1254:35;;:65;;;;;;;;;;;;;;;1269:10;;1254:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1074:252:33;;;-1:-1:-1;;;1074:252:33:o;1332:120::-;1405:18;:40;1332:120::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;384:27:33:-;;;;:::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;938:176::-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;2274:459::-;2332:7;2573:6;2569:45;;-1:-1:-1;2602:1:67;2595:8;;2569:45;2636:5;;;2640:1;2636;:5;:1;2659:5;;;;;:10;2651:56;;;;-1:-1:-1;;;2651:56:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3195:130;3253:7;3279:39;3283:1;3286;3279:39;;;;;;;;;;;;;;;;;:3;:39::i;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;9005:410::-;-1:-1:-1;;;;;9088:21:54;;9080:67;;;;-1:-1:-1;;;9080:67:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9158:49;9179:7;9196:1;9200:6;9158:20;:49::i;:::-;9239:68;9262:6;9239:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9239:18:54;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;9218:18:54;;;;;;:9;:18;;;;;:89;9332:12;;:24;;9349:6;9332:24;:16;:24;:::i;:::-;9317:12;:39;9371:37;;;;;;;;9397:1;;-1:-1:-1;;;;;9371:37:54;;;;;;;;;;;;9005:410;;:::o;11206:121::-;;;;:::o;3807:302:67:-;3923:7;3957:12;3950:5;3942:28;;;;-1:-1:-1;;;3942:28:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3980:9;3996:1;3992;:5;;;;;;;3807:302;-1:-1:-1;;;;;3807:302:67:o;1385:134::-;1443:7;1469:43;1473:1;1476;1469:43;;;;;;;;;;;;;;;;;:3;:43::i"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "exchangeRateStored()": "182df0f5",
+ "increaseAllowance(address,uint256)": "39509351",
+ "mint(uint256)": "a0712d68",
+ "name()": "06fdde03",
+ "redeem(uint256)": "db006a75",
+ "scale()": "f51e181a",
+ "setExchangeRate(uint256)": "db068e0e",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd",
+ "underlying()": "6f307dc3"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initExchangeRateStored\",\"type\":\"uint256\"}],\"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\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_exchangeRateStored\",\"type\":\"uint256\"}],\"name\":\"setExchangeRate\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockCUSDC.sol\":\"MockCUSDC\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/mocks/MockCUSDC.sol\":{\"keccak256\":\"0x74a579ef8bd6b7c216d0bec7480d8c1d31a74ded866df87cf38476fb732bc2a8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3b8b29929068ead5aad1b45234e3fe88c1cdca3f65dbd79805be68776a3857b9\",\"dweb:/ipfs/QmZ8BCfKTnPu5E7w3A91gdJvWfbNiszdZZh37Fsa5iGz47\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockController.sol": {
+ "MockController": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_callee",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "test0xCallee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "testBurnOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "testMintOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610410806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80632814d662146100675780632cbd54971461009f578063485cc955146101555780634eaee251146101835780638da5cb5b146101b9578063f5887cdd146101dd575b600080fd5b61009d6004803603606081101561007d57600080fd5b506001600160a01b038135811691602081013590911690604001356101e5565b005b61009d600480360360408110156100b557600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100e057600080fd5b8201836020820111156100f257600080fd5b8035906020019184600183028401116401000000008311171561011457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610262945050505050565b61009d6004803603604081101561016b57600080fd5b506001600160a01b038135811691602001351661032e565b61009d6004803603606081101561019957600080fd5b506001600160a01b0381358116916020810135909116906040013561035c565b6101c16103bc565b604080516001600160a01b039092168252519081900360200190f35b6101c16103cb565b826001600160a01b03166351b0a41083836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561024557600080fd5b505af1158015610259573d6000803e3d6000fd5b50505050505050565b604080516309c23da560e41b81523360048201818152602483019384528451604484015284516001600160a01b03871694639c23da5094879392606490910190602085019080838360005b838110156102c55781810151838201526020016102ad565b50505050905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561031257600080fd5b505af1158015610326573d6000803e3d6000fd5b505050505050565b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055565b826001600160a01b03166356d878f783836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561024557600080fd5b6001546001600160a01b031681565b6000546001600160a01b03168156fea2646970667358221220e66ab073174d0d6f6c6709046aa70af2c8cc276f6487519a12b9a41c83ef109564736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 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 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2814D662 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x2CBD5497 EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x4EAEE251 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x1DD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1E5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 SWAP3 SWAP6 POP PUSH2 0x262 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x32E JUMP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x35C JUMP JUMPDEST PUSH2 0x1C1 PUSH2 0x3BC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C1 PUSH2 0x3CB JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x51B0A410 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x259 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x9C23DA5 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x24 DUP4 ADD SWAP4 DUP5 MSTORE DUP5 MLOAD PUSH1 0x44 DUP5 ADD MSTORE DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP5 PUSH4 0x9C23DA50 SWAP5 DUP8 SWAP4 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2AD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2F2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 PUSH11 0xB073174D0D6F6C6709046A 0xA7 EXP CALLCODE 0xC8 0xCC 0x27 PUSH16 0x6487519A12B9A41C83EF109564736F6C PUSH4 0x4300060A STOP CALLER ",
+ "sourceMap": "394:1274:34:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c80632814d662146100675780632cbd54971461009f578063485cc955146101555780634eaee251146101835780638da5cb5b146101b9578063f5887cdd146101dd575b600080fd5b61009d6004803603606081101561007d57600080fd5b506001600160a01b038135811691602081013590911690604001356101e5565b005b61009d600480360360408110156100b557600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100e057600080fd5b8201836020820111156100f257600080fd5b8035906020019184600183028401116401000000008311171561011457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610262945050505050565b61009d6004803603604081101561016b57600080fd5b506001600160a01b038135811691602001351661032e565b61009d6004803603606081101561019957600080fd5b506001600160a01b0381358116916020810135909116906040013561035c565b6101c16103bc565b604080516001600160a01b039092168252519081900360200190f35b6101c16103cb565b826001600160a01b03166351b0a41083836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561024557600080fd5b505af1158015610259573d6000803e3d6000fd5b50505050505050565b604080516309c23da560e41b81523360048201818152602483019384528451604484015284516001600160a01b03871694639c23da5094879392606490910190602085019080838360005b838110156102c55781810151838201526020016102ad565b50505050905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561031257600080fd5b505af1158015610326573d6000803e3d6000fd5b505050505050565b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055565b826001600160a01b03166356d878f783836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561024557600080fd5b6001546001600160a01b031681565b6000546001600160a01b03168156fea2646970667358221220e66ab073174d0d6f6c6709046aa70af2c8cc276f6487519a12b9a41c83ef109564736f6c634300060a0033",
+ "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 0x2814D662 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x2CBD5497 EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x4EAEE251 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x1DD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1E5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 SWAP3 SWAP6 POP PUSH2 0x262 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x32E JUMP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x35C JUMP JUMPDEST PUSH2 0x1C1 PUSH2 0x3BC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C1 PUSH2 0x3CB JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x51B0A410 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x259 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x9C23DA5 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x24 DUP4 ADD SWAP4 DUP5 MSTORE DUP5 MLOAD PUSH1 0x44 DUP5 ADD MSTORE DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP5 PUSH4 0x9C23DA50 SWAP5 DUP8 SWAP4 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2AD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2F2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56D878F7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 PUSH11 0xB073174D0D6F6C6709046A 0xA7 EXP CALLCODE 0xC8 0xCC 0x27 PUSH16 0x6487519A12B9A41C83EF109564736F6C PUSH4 0x4300060A STOP CALLER ",
+ "sourceMap": "394:1274:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:186;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;937:186:34;;;;;;;;;;;;;;;;;:::i;:::-;;1525:141;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1525:141:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1525:141:34;;-1:-1:-1;1525:141:34;;-1:-1:-1;;;;;1525:141:34:i;708:134::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;708:134:34;;;;;;;;;;:::i;1218:186::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1218:186:34;;;;;;;;;;;;;;;;;:::i;492:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;492:20:34;;;;;;;;;;;;;;460:26;;;:::i;937:186::-;1078:7;-1:-1:-1;;;;;1062:35:34;;1098:8;1108:7;1062:54;;;;;;;;;;;;;-1:-1:-1;;;;;1062:54:34;-1:-1:-1;;;;;1062:54:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:186;;;:::o;1525:141::-;1603:56;;;-1:-1:-1;;;1603:56:34;;1641:10;1603:56;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1603:37:34;;;;;1653:5;;1603:56;;;;;;;;;;;;;-1:-1:-1;1603:56:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:141;;:::o;708:134::-;785:11;:26;;-1:-1:-1;;;;;785:26:34;;;-1:-1:-1;;;;;;785:26:34;;;;;;;;821:14;;;;;;;;;;;708:134::o;1218:186::-;1359:7;-1:-1:-1;;;;;1343:35:34;;1379:8;1389:7;1343:54;;;;;;;;;;;;;-1:-1:-1;;;;;1343:54:34;-1:-1:-1;;;;;1343:54:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;492:20;;;-1:-1:-1;;;;;492:20:34;;:::o;460:26::-;;;-1:-1:-1;;;;;460:26:34;;:::o"
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "initialize(address,address)": "485cc955",
+ "owner()": "8da5cb5b",
+ "test0xCallee(address,bytes)": "2cbd5497",
+ "testBurnOtoken(address,address,uint256)": "4eaee251",
+ "testMintOtoken(address,address,uint256)": "2814d662"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"test0xCallee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"testBurnOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"testMintOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"initialize(address,address)\":{\"details\":\"this function is invoked by the proxy contract when this contract is added to the AddressBook.\",\"params\":{\"_addressBook\":\"the address of the AddressBook*\"}},\"test0xCallee(address,bytes)\":{\"details\":\"this function is used to test if controller can be the only msg.sender to the 0xcallee\"},\"testBurnOtoken(address,address,uint256)\":{\"details\":\"this function is used to test if controller can burn otokens\"},\"testMintOtoken(address,address,uint256)\":{\"details\":\"this function is used to test if controller can mint otokens\"}}},\"userdoc\":{\"methods\":{\"addressBook()\":{\"notice\":\"addressbook address\"}},\"notice\":\"Upgradeable Controller that can mock minting and burning calls from controller.\"}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockController.sol\":\"MockController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]},\"contracts/mocks/MockController.sol\":{\"keccak256\":\"0xea39811e3bc2d01afe0b87674d46a8da02d742fbf7771c06378910f1570d0c44\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6d89a0b5b4fd013feb5d8033d2ee3dea02508a0bfc01e5add86984c8fd1f30eb\",\"dweb:/ipfs/QmRaTaJpY8RWWBP8NhJT12kqwPWEjp6UpFaT7w2pFRxj51\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockDumbERC20.sol": {
+ "MockDumbERC20": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name_",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol_",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8",
+ "name": "decimals_",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "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": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "locked_",
+ "type": "bool"
+ }
+ ],
+ "name": "setLocked",
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50604051610aec380380610aec8339818101604052606081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156100ff57600080fd5b90830190602082018581111561011457600080fd5b825164010000000081118282018810171561012e57600080fd5b82525081516020918201929091019080838360005b8381101561015b578181015183820152602001610143565b50505050905090810190601f1680156101885780820380516001836020036101000a031916815260200191505b5060405260209081015185519093506101a792506004918601906101d8565b5081516101bb9060059060208501906101d8565b506006805460ff191660ff92909216919091179055506102739050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061021957805160ff1916838001178555610246565b82800160010185558215610246579182015b8281111561024657825182559160200191906001019061022b565b50610252929150610256565b5090565b61027091905b80821115610252576000815560010161025c565b90565b61086a806102826000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f191461020557806370a082311461023157806395d89b41146102575780639dc29fac1461025f578063a9059cbb1461028b578063dd62ed3e146102b7576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd14610176578063211e28b61461019057806323b872dd146101b1578063313ce567146101e7575b600080fd5b6100c16102e5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b61017e6103dd565b60408051918252519081900360200190f35b6101af600480360360208110156101a657600080fd5b503515156103e3565b005b610162600480360360608110156101c757600080fd5b506001600160a01b038135811691602081013590911690604001356103f6565b6101ef610538565b6040805160ff9092168252519081900360200190f35b6101af6004803603604081101561021b57600080fd5b506001600160a01b038135169060200135610541565b61017e6004803603602081101561024757600080fd5b50356001600160a01b031661058a565b6100c16105a5565b6101af6004803603604081101561027557600080fd5b506001600160a01b038135169060200135610606565b610162600480360360408110156102a157600080fd5b506001600160a01b03813516906020013561062f565b61017e600480360360408110156102cd57600080fd5b506001600160a01b03813581169160200135166106db565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103715780601f1061034657610100808354040283529160200191610371565b820191906000526020600020905b81548152906001019060200180831161035457829003601f168201915b5050505050905090565b3360009081526002602090815260408083206001600160a01b03861684529091528120546103af908363ffffffff61070616565b3360009081526002602090815260408083206001600160a01b03881684529091529020555060015b92915050565b60035490565b6000805460ff1916911515919091179055565b6000805460ff161561040a57506000610531565b6001600160a01b03841660009081526001602052604090205482111561043257506000610531565b6001600160a01b038416600090815260026020908152604080832033845290915290205482111561046557506000610531565b6001600160a01b0384166000908152600260209081526040808320338452909152902054610499908363ffffffff61076016565b6001600160a01b0385166000818152600260209081526040808320338452825280832094909455918152600190915220546104da908363ffffffff61076016565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461050f908363ffffffff61070616565b6001600160a01b03841660009081526001602081905260409091209190915590505b9392505050565b60065460ff1690565b6001600160a01b03821660009081526001602052604090205461056a908263ffffffff61070616565b6001600160a01b0390921660009081526001602052604090209190915550565b6001600160a01b031660009081526001602052604090205490565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103715780601f1061034657610100808354040283529160200191610371565b6001600160a01b03821660009081526001602052604090205461056a908263ffffffff61076016565b6000805460ff1615610643575060006103d7565b33600090815260016020526040902054821115610662575060006103d7565b33600090815260016020526040902054610682908363ffffffff61076016565b33600090815260016020526040808220929092556001600160a01b038516815220546106b4908363ffffffff61070616565b6001600160a01b038416600090815260016020819052604090912091909155905092915050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600082820183811015610531576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061053183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506000818484111561082c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107f15781810151838201526020016107d9565b50505050905090810190601f16801561081e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea264697066735822122035bb2c4893f90d5db3163bf8e927b1150291c8c5674254b304ea24fff415208d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xAEC CODESIZE SUB DUP1 PUSH2 0xAEC DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x143 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x188 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP6 MLOAD SWAP1 SWAP4 POP PUSH2 0x1A7 SWAP3 POP PUSH1 0x4 SWAP2 DUP7 ADD SWAP1 PUSH2 0x1D8 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1BB SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1D8 JUMP JUMPDEST POP PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x273 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x219 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x246 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x246 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x246 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x22B JUMP JUMPDEST POP PUSH2 0x252 SWAP3 SWAP2 POP PUSH2 0x256 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x270 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x25C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x86A DUP1 PUSH2 0x282 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 0x40C10F19 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2B7 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x211E28B6 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x37B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH2 0x3DD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x3E3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F6 JUMP JUMPDEST PUSH2 0x1EF PUSH2 0x538 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x541 JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x58A JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x5A5 JUMP JUMPDEST PUSH2 0x1AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x606 JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x62F JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x371 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x346 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x371 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 0x354 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x40A JUMPI POP PUSH1 0x0 PUSH2 0x531 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x432 JUMPI POP PUSH1 0x0 PUSH2 0x531 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x465 JUMPI POP PUSH1 0x0 PUSH2 0x531 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x499 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH2 0x4DA SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP6 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x50F SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x56A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP 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 SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x371 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x346 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x371 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x56A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x643 JUMPI POP PUSH1 0x0 PUSH2 0x3D7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x662 JUMPI POP PUSH1 0x0 PUSH2 0x3D7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x682 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x6B4 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 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 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x531 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x531 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x82C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x7F1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7D9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x81E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATALOAD 0xBB 0x2C 0x48 SWAP4 0xF9 0xD 0x5D 0xB3 AND EXTCODESIZE 0xF8 0xE9 0x27 0xB1 ISZERO MUL SWAP2 0xC8 0xC5 PUSH8 0x4254B304EA24FFF4 ISZERO KECCAK256 DUP14 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "197:2655:35:-:0;;;532:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;532:198:35;;;;;;;;;;-1:-1:-1;532:198:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;532:198:35;;;;;;;;;;-1:-1:-1;532:198:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;532:198:35;;;;;;;652:13;;532:198;;-1:-1:-1;652:13:35;;-1:-1:-1;652:5:35;;:13;;;;:::i;:::-;-1:-1:-1;675:17:35;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;702:9:35;:21;;-1:-1:-1;;702:21:35;;;;;;;;;;;;-1:-1:-1;197:2655:35;;-1:-1:-1;197:2655:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;197:2655:35;;;-1:-1:-1;197:2655:35;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f191461020557806370a082311461023157806395d89b41146102575780639dc29fac1461025f578063a9059cbb1461028b578063dd62ed3e146102b7576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd14610176578063211e28b61461019057806323b872dd146101b1578063313ce567146101e7575b600080fd5b6100c16102e5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b61017e6103dd565b60408051918252519081900360200190f35b6101af600480360360208110156101a657600080fd5b503515156103e3565b005b610162600480360360608110156101c757600080fd5b506001600160a01b038135811691602081013590911690604001356103f6565b6101ef610538565b6040805160ff9092168252519081900360200190f35b6101af6004803603604081101561021b57600080fd5b506001600160a01b038135169060200135610541565b61017e6004803603602081101561024757600080fd5b50356001600160a01b031661058a565b6100c16105a5565b6101af6004803603604081101561027557600080fd5b506001600160a01b038135169060200135610606565b610162600480360360408110156102a157600080fd5b506001600160a01b03813516906020013561062f565b61017e600480360360408110156102cd57600080fd5b506001600160a01b03813581169160200135166106db565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103715780601f1061034657610100808354040283529160200191610371565b820191906000526020600020905b81548152906001019060200180831161035457829003601f168201915b5050505050905090565b3360009081526002602090815260408083206001600160a01b03861684529091528120546103af908363ffffffff61070616565b3360009081526002602090815260408083206001600160a01b03881684529091529020555060015b92915050565b60035490565b6000805460ff1916911515919091179055565b6000805460ff161561040a57506000610531565b6001600160a01b03841660009081526001602052604090205482111561043257506000610531565b6001600160a01b038416600090815260026020908152604080832033845290915290205482111561046557506000610531565b6001600160a01b0384166000908152600260209081526040808320338452909152902054610499908363ffffffff61076016565b6001600160a01b0385166000818152600260209081526040808320338452825280832094909455918152600190915220546104da908363ffffffff61076016565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461050f908363ffffffff61070616565b6001600160a01b03841660009081526001602081905260409091209190915590505b9392505050565b60065460ff1690565b6001600160a01b03821660009081526001602052604090205461056a908263ffffffff61070616565b6001600160a01b0390921660009081526001602052604090209190915550565b6001600160a01b031660009081526001602052604090205490565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103715780601f1061034657610100808354040283529160200191610371565b6001600160a01b03821660009081526001602052604090205461056a908263ffffffff61076016565b6000805460ff1615610643575060006103d7565b33600090815260016020526040902054821115610662575060006103d7565b33600090815260016020526040902054610682908363ffffffff61076016565b33600090815260016020526040808220929092556001600160a01b038516815220546106b4908363ffffffff61070616565b6001600160a01b038416600090815260016020819052604090912091909155905092915050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600082820183811015610531576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061053183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506000818484111561082c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107f15781810151838201526020016107d9565b50505050905090810190601f16801561081e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea264697066735822122035bb2c4893f90d5db3163bf8e927b1150291c8c5674254b304ea24fff415208d64736f6c634300060a0033",
+ "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 0x40C10F19 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2B7 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x211E28B6 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x37B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH2 0x3DD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x3E3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F6 JUMP JUMPDEST PUSH2 0x1EF PUSH2 0x538 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x541 JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x58A JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x5A5 JUMP JUMPDEST PUSH2 0x1AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x606 JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x62F JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x371 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x346 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x371 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 0x354 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x40A JUMPI POP PUSH1 0x0 PUSH2 0x531 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x432 JUMPI POP PUSH1 0x0 PUSH2 0x531 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x465 JUMPI POP PUSH1 0x0 PUSH2 0x531 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x499 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH2 0x4DA SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP6 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x50F SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x56A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP 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 SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x371 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x346 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x371 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x56A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x643 JUMPI POP PUSH1 0x0 PUSH2 0x3D7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x662 JUMPI POP PUSH1 0x0 PUSH2 0x3D7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x682 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x760 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x6B4 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x706 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 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 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x531 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x531 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x82C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x7F1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7D9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x81E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATALOAD 0xBB 0x2C 0x48 SWAP4 0xF9 0xD 0x5D 0xB3 AND EXTCODESIZE 0xF8 0xE9 0x27 0xB1 ISZERO MUL SWAP2 0xC8 0xC5 PUSH8 0x4254B304EA24FFF4 ISZERO KECCAK256 DUP14 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "197:2655:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;736:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1722:197;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1722:197:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1001:89;;;:::i;:::-;;;;;;;;;;;;;;;;2776:74;;;;;;;;;;;;;;;;-1:-1:-1;2776:74:35;;;;:::i;:::-;;1925:577;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1925:577:35;;;;;;;;;;;;;;;;;:::i;914:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2508:128;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2508:128:35;;;;;;;;:::i;1096:108::-;;;;;;;;;;;;;;;;-1:-1:-1;1096:108:35;-1:-1:-1;;;;;1096:108:35;;:::i;823:85::-;;;:::i;2642:128::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2642:128:35;;;;;;;;:::i;1210:360::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1210:360:35;;;;;;;;:::i;1576:140::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1576:140:35;;;;;;;;;;:::i;736:81::-;805:5;798:12;;;;;;;;-1:-1:-1;;798:12:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;773:13;;798:12;;805:5;;798:12;;805:5;798:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;736:81;:::o;1722:197::-;1859:10;1796:4;1847:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;1847:32:35;;;;;;;;;;:44;;1884:6;1847:44;:36;:44;:::i;:::-;1824:10;1812:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;1812:32:35;;;;;;;;;:79;-1:-1:-1;1908:4:35;1722:197;;;;;:::o;1001:89::-;1071:12;;1001:89;:::o;2776:74::-;2826:7;:17;;-1:-1:-1;;2826:17:35;;;;;;;;;;2776:74::o;1925:577::-;2052:4;2072:7;;;;2068:25;;;-1:-1:-1;2088:5:35;2081:12;;2068:25;-1:-1:-1;;;;;2107:17:35;;;;;;:9;:17;;;;;;:26;-1:-1:-1;2103:69:35;;;-1:-1:-1;2156:5:35;2149:12;;2103:69;-1:-1:-1;;;;;2185:19:35;;;;;;:11;:19;;;;;;;;2205:10;2185:31;;;;;;;;:40;-1:-1:-1;2181:83:35;;;-1:-1:-1;2248:5:35;2241:12;;2181:83;-1:-1:-1;;;;;2307:19:35;;;;;;:11;:19;;;;;;;;2327:10;2307:31;;;;;;;;:43;;2343:6;2307:43;:35;:43;:::i;:::-;-1:-1:-1;;;;;2273:19:35;;;;;;:11;:19;;;;;;;;2293:10;2273:31;;;;;;;:77;;;;2380:17;;;:9;:17;;;;;:29;;2402:6;2380:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;2360:17:35;;;;;;;:9;:17;;;;;;:49;;;;2442:20;;;;;;;:32;;2467:6;2442:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;2419:20:35;;;;;;:9;:20;;;;;;;;:55;;;;:9;-1:-1:-1;1925:577:35;;;;;;:::o;914:81::-;979:9;;;;914:81;:::o;2508:128::-;-1:-1:-1;;;;;2597:20:35;;;;;;:9;:20;;;;;;:32;;2622:6;2597:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;2574:20:35;;;;;;;:9;:20;;;;;:55;;;;-1:-1:-1;2508:128:35:o;1096:108::-;-1:-1:-1;;;;;1179:18:35;1153:7;1179:18;;;:9;:18;;;;;;;1096:108::o;823:85::-;894:7;887:14;;;;;;;;-1:-1:-1;;887:14:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;862:13;;887:14;;894:7;;887:14;;894:7;887:14;;;;;;;;;;;;;;;;;;;;;;;;2642:128;-1:-1:-1;;;;;2731:20:35;;;;;;:9;:20;;;;;;:32;;2756:6;2731:32;:24;:32;:::i;1210:360::-;1287:4;1307:7;;;;1303:25;;;-1:-1:-1;1323:5:35;1316:12;;1303:25;1352:10;1342:21;;;;:9;:21;;;;;;:30;-1:-1:-1;1338:73:35;;;-1:-1:-1;1395:5:35;1388:12;;1338:73;1454:10;1444:21;;;;:9;:21;;;;;;:33;;1470:6;1444:33;:25;:33;:::i;:::-;1430:10;1420:21;;;;:9;:21;;;;;;:57;;;;-1:-1:-1;;;;;1510:20:35;;;;;;:32;;1535:6;1510:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;1487:20:35;;;;;;:9;:20;;;;;;;;:55;;;;:9;-1:-1:-1;1210:360:35;;;;:::o;1576:140::-;-1:-1:-1;;;;;1682:18:35;;;1656:7;1682:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;1576:140::o;922:176:51:-;980:7;1011:5;;;1034:6;;;;1026:46;;;;;-1:-1:-1;;;1026:46:51;;;;;;;;;;;;;;;;;;;;;;;;;;;1362:134;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "burn(address,uint256)": "9dc29fac",
+ "decimals()": "313ce567",
+ "mint(address,uint256)": "40c10f19",
+ "name()": "06fdde03",
+ "setLocked(bool)": "211e28b6",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"locked_\",\"type\":\"bool\"}],\"name\":\"setLocked\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"ERC20 Token that return false when operation failed\"}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockDumbERC20.sol\":\"MockDumbERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/mocks/MockDumbERC20.sol\":{\"keccak256\":\"0xdbd891bf49ffc04f36413b656a70a04666d063c96c57d46c78e15f1530a0a53c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ad043546d9062d31e9948b7248136c1152688834509e584eb4a69ad0486f573\",\"dweb:/ipfs/QmZqrWbMpSB44cJ6HqQtz6toQdPr6cTo3xXAoEbmNChuT7\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockERC20.sol": {
+ "MockERC20": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "_symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8",
+ "name": "_decimals",
+ "type": "uint8"
+ }
+ ],
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040523480156200001157600080fd5b5060405162000f1838038062000f18833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052602001519150620001b9905083836001600160e01b03620001d616565b620001cd816001600160e01b03620002c416565b50505062000383565b600054610100900460ff1680620001fb5750620001fb6001600160e01b03620002da16565b806200020a575060005460ff16155b620002475760405162461bcd60e51b815260040180806020018281038252602e81526020018062000eea602e913960400191505060405180910390fd5b600054610100900460ff1615801562000273576000805460ff1961ff0019909116610100171660011790555b825162000288906068906020860190620002e1565b5081516200029e906069906020850190620002e1565b50606a805460ff191660121790558015620002bf576000805461ff00191690555b505050565b606a805460ff191660ff92909216919091179055565b303b155b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200032457805160ff191683800117855562000354565b8280016001018555821562000354579182015b828111156200035457825182559160200191906001019062000337565b506200036292915062000366565b5090565b620002de91905b808211156200036257600081556001016200036d565b610b5780620003936000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f191461021057806370a082311461023e57806395d89b4114610264578063a457c2d71461026c578063a9059cbb14610298578063dd62ed3e146102c4576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd1461017657806323b872dd14610190578063313ce567146101c657806339509351146101e4575b600080fd5b6100c16102f2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610388565b604080519115158252519081900360200190f35b61017e6103a5565b60408051918252519081900360200190f35b610162600480360360608110156101a657600080fd5b506001600160a01b038135811691602081013590911690604001356103ab565b6101ce610438565b6040805160ff9092168252519081900360200190f35b610162600480360360408110156101fa57600080fd5b506001600160a01b038135169060200135610441565b61023c6004803603604081101561022657600080fd5b506001600160a01b038135169060200135610495565b005b61017e6004803603602081101561025457600080fd5b50356001600160a01b03166104a3565b6100c16104be565b6101626004803603604081101561028257600080fd5b506001600160a01b03813516906020013561051f565b610162600480360360408110156102ae57600080fd5b506001600160a01b03813516906020013561058d565b61017e600480360360408110156102da57600080fd5b506001600160a01b03813581169160200135166105a1565b60688054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b600061039c6103956105cc565b84846105d0565b50600192915050565b60675490565b60006103b88484846106bc565b61042e846103c46105cc565b61042985604051806060016040528060288152602001610a8c602891396001600160a01b038a166000908152606660205260408120906104026105cc565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61082516565b6105d0565b5060019392505050565b606a5460ff1690565b600061039c61044e6105cc565b84610429856066600061045f6105cc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6108bc16565b61049f828261091d565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b600061039c61052c6105cc565b8461042985604051806060016040528060258152602001610afd60259139606660006105566105cc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61082516565b600061039c61059a6105cc565b84846106bc565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166106155760405162461bcd60e51b8152600401808060200182810382526024815260200180610ad96024913960400191505060405180910390fd5b6001600160a01b03821661065a5760405162461bcd60e51b8152600401808060200182810382526022815260200180610a446022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107015760405162461bcd60e51b8152600401808060200182810382526025815260200180610ab46025913960400191505060405180910390fd5b6001600160a01b0382166107465760405162461bcd60e51b8152600401808060200182810382526023815260200180610a216023913960400191505060405180910390fd5b610751838383610a1b565b61079481604051806060016040528060268152602001610a66602691396001600160a01b038616600090815260656020526040902054919063ffffffff61082516565b6001600160a01b0380851660009081526065602052604080822093909355908416815220546107c9908263ffffffff6108bc16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156108b45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610879578181015183820152602001610861565b50505050905090810190601f1680156108a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610916576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610978576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61098460008383610a1b565b606754610997908263ffffffff6108bc16565b6067556001600160a01b0382166000908152606560205260409020546109c3908263ffffffff6108bc16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206640b929b929151503b2560f118b5301d210fc366ffaf63fb9bc3044ee4a27fb64736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF18 CODESIZE SUB DUP1 PUSH3 0xF18 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD MLOAD SWAP2 POP PUSH3 0x1B9 SWAP1 POP DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x1D6 AND JUMP JUMPDEST PUSH3 0x1CD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2C4 AND JUMP JUMPDEST POP POP POP PUSH3 0x383 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x1FB JUMPI POP PUSH3 0x1FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2DA AND JUMP JUMPDEST DUP1 PUSH3 0x20A JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x247 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0xEEA PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x273 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH3 0x288 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x2E1 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x29E SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2E1 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH3 0x2BF JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x324 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x354 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x354 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x354 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x337 JUMP JUMPDEST POP PUSH3 0x362 SWAP3 SWAP2 POP PUSH3 0x366 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x2DE SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x362 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x36D JUMP JUMPDEST PUSH2 0xB57 DUP1 PUSH3 0x393 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 0x40C10F19 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C4 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2F2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH2 0x3A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x438 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x441 JUMP JUMPDEST PUSH2 0x23C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x495 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A3 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x4BE JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x51F JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x58D JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E 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 0x361 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x395 PUSH2 0x5CC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x5D0 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B8 DUP5 DUP5 DUP5 PUSH2 0x6BC JUMP JUMPDEST PUSH2 0x42E DUP5 PUSH2 0x3C4 PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x429 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA8C PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x402 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x825 AND JUMP JUMPDEST PUSH2 0x5D0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x44E PUSH2 0x5CC JUMP JUMPDEST DUP5 PUSH2 0x429 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x45F PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH2 0x49F DUP3 DUP3 PUSH2 0x91D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x52C PUSH2 0x5CC JUMP JUMPDEST DUP5 PUSH2 0x429 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAFD PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x556 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x825 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x59A PUSH2 0x5CC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x615 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAD9 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA44 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAB4 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x746 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA21 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x751 DUP4 DUP4 DUP4 PUSH2 0xA1B JUMP JUMPDEST PUSH2 0x794 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA66 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x825 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x7C9 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x879 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x861 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8A6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x916 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x978 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x984 PUSH1 0x0 DUP4 DUP4 PUSH2 0xA1B JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x997 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9C3 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212206640 0xB9 0x29 0xB9 0x29 ISZERO ISZERO SUB 0xB2 JUMP 0xF GT DUP12 MSTORE8 ADD 0xD2 LT 0xFC CALLDATASIZE PUSH16 0xFAF63FB9BC3044EE4A27FB64736F6C63 NUMBER STOP MOD EXP STOP CALLER NUMBER PUSH16 0x6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564000000000000000000 ",
+ "sourceMap": "150:346:36:-:0;;;195:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;195:200:36;;;;;;;;;;-1:-1:-1;195:200:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;195:200:36;;;;;;;;;;-1:-1:-1;195:200:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;195:200:36;;;;;;-1:-1:-1;315:38:36;;-1:-1:-1;338:5:36;345:7;-1:-1:-1;;;;;315:22:36;:38;:::i;:::-;363:25;378:9;-1:-1:-1;;;;;363:14:36;:25;:::i;:::-;195:200;;;150:346;;2296:178:54;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;10531:88::-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;;:::o;150:346:36:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150:346:36;;;-1:-1:-1;150:346:36;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f191461021057806370a082311461023e57806395d89b4114610264578063a457c2d71461026c578063a9059cbb14610298578063dd62ed3e146102c4576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd1461017657806323b872dd14610190578063313ce567146101c657806339509351146101e4575b600080fd5b6100c16102f2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610388565b604080519115158252519081900360200190f35b61017e6103a5565b60408051918252519081900360200190f35b610162600480360360608110156101a657600080fd5b506001600160a01b038135811691602081013590911690604001356103ab565b6101ce610438565b6040805160ff9092168252519081900360200190f35b610162600480360360408110156101fa57600080fd5b506001600160a01b038135169060200135610441565b61023c6004803603604081101561022657600080fd5b506001600160a01b038135169060200135610495565b005b61017e6004803603602081101561025457600080fd5b50356001600160a01b03166104a3565b6100c16104be565b6101626004803603604081101561028257600080fd5b506001600160a01b03813516906020013561051f565b610162600480360360408110156102ae57600080fd5b506001600160a01b03813516906020013561058d565b61017e600480360360408110156102da57600080fd5b506001600160a01b03813581169160200135166105a1565b60688054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b600061039c6103956105cc565b84846105d0565b50600192915050565b60675490565b60006103b88484846106bc565b61042e846103c46105cc565b61042985604051806060016040528060288152602001610a8c602891396001600160a01b038a166000908152606660205260408120906104026105cc565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61082516565b6105d0565b5060019392505050565b606a5460ff1690565b600061039c61044e6105cc565b84610429856066600061045f6105cc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6108bc16565b61049f828261091d565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b600061039c61052c6105cc565b8461042985604051806060016040528060258152602001610afd60259139606660006105566105cc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61082516565b600061039c61059a6105cc565b84846106bc565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166106155760405162461bcd60e51b8152600401808060200182810382526024815260200180610ad96024913960400191505060405180910390fd5b6001600160a01b03821661065a5760405162461bcd60e51b8152600401808060200182810382526022815260200180610a446022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107015760405162461bcd60e51b8152600401808060200182810382526025815260200180610ab46025913960400191505060405180910390fd5b6001600160a01b0382166107465760405162461bcd60e51b8152600401808060200182810382526023815260200180610a216023913960400191505060405180910390fd5b610751838383610a1b565b61079481604051806060016040528060268152602001610a66602691396001600160a01b038616600090815260656020526040902054919063ffffffff61082516565b6001600160a01b0380851660009081526065602052604080822093909355908416815220546107c9908263ffffffff6108bc16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156108b45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610879578181015183820152602001610861565b50505050905090810190601f1680156108a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610916576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610978576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61098460008383610a1b565b606754610997908263ffffffff6108bc16565b6067556001600160a01b0382166000908152606560205260409020546109c3908263ffffffff6108bc16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206640b929b929151503b2560f118b5301d210fc366ffaf63fb9bc3044ee4a27fb64736f6c634300060a0033",
+ "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 0x40C10F19 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C4 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2F2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH2 0x3A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x438 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x441 JUMP JUMPDEST PUSH2 0x23C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x495 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A3 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x4BE JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x51F JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x58D JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E 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 0x361 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x395 PUSH2 0x5CC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x5D0 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B8 DUP5 DUP5 DUP5 PUSH2 0x6BC JUMP JUMPDEST PUSH2 0x42E DUP5 PUSH2 0x3C4 PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x429 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA8C PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x402 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x825 AND JUMP JUMPDEST PUSH2 0x5D0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x44E PUSH2 0x5CC JUMP JUMPDEST DUP5 PUSH2 0x429 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x45F PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH2 0x49F DUP3 DUP3 PUSH2 0x91D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x52C PUSH2 0x5CC JUMP JUMPDEST DUP5 PUSH2 0x429 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAFD PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x556 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x825 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x59A PUSH2 0x5CC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x615 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAD9 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA44 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAB4 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x746 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA21 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x751 DUP4 DUP4 DUP4 PUSH2 0xA1B JUMP JUMPDEST PUSH2 0x794 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA66 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x825 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x7C9 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x879 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x861 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8A6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x916 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x978 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x984 PUSH1 0x0 DUP4 DUP4 PUSH2 0xA1B JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x997 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9C3 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8BC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212206640 0xB9 0x29 0xB9 0x29 ISZERO ISZERO SUB 0xB2 JUMP 0xF GT DUP12 MSTORE8 ADD 0xD2 LT 0xFC CALLDATASIZE PUSH16 0xFAF63FB9BC3044EE4A27FB64736F6C63 NUMBER STOP MOD EXP STOP CALLER ",
+ "sourceMap": "150:346:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3582:98;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5996:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;401:93:36:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;401:93:36;;;;;;;;:::i;:::-;;3738:117:54;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2733:85::-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;4288:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;2539:81::-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;3582:98::-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;5996:215::-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;401:93:36:-;465:22;471:7;480:6;465:5;:22::i;:::-;401:93;;:::o;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2733:85::-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;4288:149::-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;938:176::-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;11206:121::-;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "increaseAllowance(address,uint256)": "39509351",
+ "mint(address,uint256)": "40c10f19",
+ "name()": "06fdde03",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockERC20.sol\":\"MockERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/mocks/MockERC20.sol\":{\"keccak256\":\"0x858e77014b42c56e0b6534b15f4469b9a62106b727b94018d1230e40cc776696\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c9b689469a7b98bcbcc1ecd5b646e7246532095595045caecc0134c9f89942f4\",\"dweb:/ipfs/QmWp5jDfyykVZxGyoyshxdwatMSpttyJfUUcy1MubhWuUd\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockOracle.sol": {
+ "MockOracle": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getChainlinkRoundData",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "getExpiryPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ }
+ ],
+ "name": "getPricer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "getPricerDisputePeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "getPricerLockingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "isDisputePeriodOver",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "isFinalized",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLockingPeriodOver",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "realTimePrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ }
+ ],
+ "name": "setAssetPricer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_timestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "setChainlinkRoundData",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_disputePeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "setDisputePeriod",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isFinalized",
+ "type": "bool"
+ }
+ ],
+ "name": "setExpiryPriceFinalizedAllPeiodOver",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_result",
+ "type": "bool"
+ }
+ ],
+ "name": "setIsDisputePeriodOver",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isFinalized",
+ "type": "bool"
+ }
+ ],
+ "name": "setIsFinalized",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_result",
+ "type": "bool"
+ }
+ ],
+ "name": "setIsLockingPeriodOver",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_pricer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_lockingPeriod",
+ "type": "uint256"
+ }
+ ],
+ "name": "setLockingPeriod",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setRealTimePrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setStablePrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "storedPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610a13806100206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063854a5bdf116100b8578063b06206321161007c578063b0620632146104a9578063b7e1d145146104d5578063d2f3b4e8146104fb578063d9e800cd14610527578063ee5314091461055b578063f19ae7341461058d57610142565b8063854a5bdf146103bd5780638b3cddaf146103f15780639933cc451461041d5780639a4c9dfb146104575780639c7fe9d61461048357610142565b80632ecd88571161010a5780632ecd8857146102955780633fd3ec8f146102d757806341976e091461030557806355a5bc7c1461032b5780635fdc714914610351578063601407eb1461039157610142565b806301957f81146101475780630701c0211461018c578063098a03d1146101ca5780631379b23a146102275780631b85462d1461025d575b600080fd5b6101736004803603604081101561015d57600080fd5b506001600160a01b0381351690602001356105b9565b6040805192835290151560208301528051918290030190f35b6101b8600480360360408110156101a257600080fd5b506001600160a01b038135169060200135610623565b60408051918252519081900360200190f35b61020e600480360360808110156101e057600080fd5b506001600160a01b038135169069ffffffffffffffffffff6020820135169060408101359060600135610640565b6040805192835260208301919091528051918290030190f35b61025b6004803603606081101561023d57600080fd5b506001600160a01b0381351690602081013590604001351515610692565b005b61020e6004803603604081101561027357600080fd5b5080356001600160a01b0316906020013569ffffffffffffffffffff166106c7565b6102bb600480360360208110156102ab57600080fd5b50356001600160a01b0316610713565b604080516001600160a01b039092168252519081900360200190f35b61025b600480360360408110156102ed57600080fd5b506001600160a01b0381358116916020013516610731565b6101b86004803603602081101561031b57600080fd5b50356001600160a01b031661075f565b6101b86004803603602081101561034157600080fd5b50356001600160a01b031661079e565b61037d6004803603604081101561036757600080fd5b506001600160a01b0381351690602001356107b0565b604080519115158252519081900360200190f35b61025b600480360360408110156103a757600080fd5b506001600160a01b0381351690602001356107db565b61025b600480360360608110156103d357600080fd5b506001600160a01b03813516906020810135906040013515156107f7565b61025b6004803603604081101561040757600080fd5b506001600160a01b03813516906020013561082c565b61025b6004803603608081101561043357600080fd5b506001600160a01b0381351690602081013590604081013590606001351515610848565b61037d6004803603604081101561046d57600080fd5b506001600160a01b0381351690602001356108c9565b6101b86004803603602081101561049957600080fd5b50356001600160a01b03166108e9565b61025b600480360360408110156104bf57600080fd5b506001600160a01b038135169060200135610904565b6101b8600480360360208110156104eb57600080fd5b50356001600160a01b0316610920565b61037d6004803603604081101561051157600080fd5b506001600160a01b03813516906020013561093b565b61025b6004803603606081101561053d57600080fd5b506001600160a01b0381351690602081013590604001351515610966565b61025b6004803603606081101561057157600080fd5b506001600160a01b03813516906020810135906040013561099b565b61025b600480360360408110156105a357600080fd5b506001600160a01b0381351690602001356109c1565b6001600160a01b03821660009081526002602052604081205481906001816106185750506001600160a01b03841660008181526001602090815260408083208784528252808320549383526003825280832087845290915290205460ff165b909590945092505050565b600160209081526000928352604080842090915290825290205481565b6001600160a01b03909316600081815260096020908152604080832069ffffffffffffffffffff90961680845295825280832094909455918152600a8252828120938152929052812091909155908190565b6001600160a01b0392909216600090815260086020908152604080832093835292905220805460ff1916911515919091179055565b6001600160a01b038216600081815260096020908152604080832069ffffffffffffffffffff861680855290835281842054948452600a83528184209084529091529020549250929050565b6001600160a01b039081166000908152600660205260409020541690565b6001600160a01b03918216600090815260066020526040902080546001600160a01b03191691909216179055565b6001600160a01b0381166000908152600260205260408120548061079857506001600160a01b0382166000908152602081905260409020545b92915050565b60006020819052908152604090205481565b6001600160a01b03919091166000908152600760209081526040808320938352929052205460ff1690565b6001600160a01b03909116600090815260026020526040902055565b6001600160a01b0392909216600090815260076020908152604080832093835292905220805460ff1916911515919091179055565b6001600160a01b03909116600090815260056020526040902055565b6001600160a01b039093166000818152600160209081526040808320868452825280832094909455828252600381528382208583528152838220805496151560ff1997881681179091558383526007825284832086845282528483208054881682179055928252600881528382209482529390935291208054909216179055565b600360209081526000928352604080842090915290825290205460ff1681565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b03909116600090815260208190526040902055565b6001600160a01b031660009081526004602052604090205490565b6001600160a01b03919091166000908152600860209081526040808320938352929052205460ff1690565b6001600160a01b0392909216600090815260036020908152604080832093835292905220805460ff1916911515919091179055565b6001600160a01b0390921660009081526001602090815260408083209383529290522055565b6001600160a01b0390911660009081526004602052604090205556fea2646970667358221220e0cbff1ce20f321acfa88d8aa92aa9a6146b70efaedbc3434dce285587d35c4d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA13 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 0x142 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x854A5BDF GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xB0620632 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xB0620632 EQ PUSH2 0x4A9 JUMPI DUP1 PUSH4 0xB7E1D145 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0xD2F3B4E8 EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0xD9E800CD EQ PUSH2 0x527 JUMPI DUP1 PUSH4 0xEE531409 EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0xF19AE734 EQ PUSH2 0x58D JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x854A5BDF EQ PUSH2 0x3BD JUMPI DUP1 PUSH4 0x8B3CDDAF EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x9933CC45 EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x9A4C9DFB EQ PUSH2 0x457 JUMPI DUP1 PUSH4 0x9C7FE9D6 EQ PUSH2 0x483 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x2ECD8857 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x2ECD8857 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0x3FD3EC8F EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x55A5BC7C EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x5FDC7149 EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x601407EB EQ PUSH2 0x391 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x1957F81 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x701C021 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x98A03D1 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x1379B23A EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x1B85462D EQ PUSH2 0x25D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x15D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x623 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x20E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x692 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x20E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x6C7 JUMP JUMPDEST PUSH2 0x2BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x713 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x731 JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x31B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x75F JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x79E JUMP JUMPDEST PUSH2 0x37D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7DB JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x7F7 JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x82C JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x848 JUMP JUMPDEST PUSH2 0x37D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x8C9 JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8E9 JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x904 JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x920 JUMP JUMPDEST PUSH2 0x37D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x93B JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x966 JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x99B JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x9C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0x1 DUP2 PUSH2 0x618 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE PUSH1 0x3 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 AND DUP1 DUP5 MSTORE SWAP6 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xA DUP3 MSTORE DUP3 DUP2 KECCAK256 SWAP4 DUP2 MSTORE SWAP3 SWAP1 MSTORE DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD SWAP5 DUP5 MSTORE PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP1 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x798 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP3 DUP3 MSTORE PUSH1 0x3 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP6 DUP4 MSTORE DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP1 SLOAD SWAP7 ISZERO ISZERO PUSH1 0xFF NOT SWAP8 DUP9 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 DUP4 MSTORE PUSH1 0x7 DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 AND DUP3 OR SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE DUP4 DUP3 KECCAK256 SWAP5 DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND OR SWAP1 SSTORE 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 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 0xCB SELFDESTRUCT SHR 0xE2 0xF ORIGIN BYTE 0xCF 0xA8 DUP14 DUP11 0xA9 0x2A 0xA9 0xA6 EQ PUSH12 0x70EFAEDBC3434DCE285587D3 0x5C 0x4D PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "290:5043:37:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101425760003560e01c8063854a5bdf116100b8578063b06206321161007c578063b0620632146104a9578063b7e1d145146104d5578063d2f3b4e8146104fb578063d9e800cd14610527578063ee5314091461055b578063f19ae7341461058d57610142565b8063854a5bdf146103bd5780638b3cddaf146103f15780639933cc451461041d5780639a4c9dfb146104575780639c7fe9d61461048357610142565b80632ecd88571161010a5780632ecd8857146102955780633fd3ec8f146102d757806341976e091461030557806355a5bc7c1461032b5780635fdc714914610351578063601407eb1461039157610142565b806301957f81146101475780630701c0211461018c578063098a03d1146101ca5780631379b23a146102275780631b85462d1461025d575b600080fd5b6101736004803603604081101561015d57600080fd5b506001600160a01b0381351690602001356105b9565b6040805192835290151560208301528051918290030190f35b6101b8600480360360408110156101a257600080fd5b506001600160a01b038135169060200135610623565b60408051918252519081900360200190f35b61020e600480360360808110156101e057600080fd5b506001600160a01b038135169069ffffffffffffffffffff6020820135169060408101359060600135610640565b6040805192835260208301919091528051918290030190f35b61025b6004803603606081101561023d57600080fd5b506001600160a01b0381351690602081013590604001351515610692565b005b61020e6004803603604081101561027357600080fd5b5080356001600160a01b0316906020013569ffffffffffffffffffff166106c7565b6102bb600480360360208110156102ab57600080fd5b50356001600160a01b0316610713565b604080516001600160a01b039092168252519081900360200190f35b61025b600480360360408110156102ed57600080fd5b506001600160a01b0381358116916020013516610731565b6101b86004803603602081101561031b57600080fd5b50356001600160a01b031661075f565b6101b86004803603602081101561034157600080fd5b50356001600160a01b031661079e565b61037d6004803603604081101561036757600080fd5b506001600160a01b0381351690602001356107b0565b604080519115158252519081900360200190f35b61025b600480360360408110156103a757600080fd5b506001600160a01b0381351690602001356107db565b61025b600480360360608110156103d357600080fd5b506001600160a01b03813516906020810135906040013515156107f7565b61025b6004803603604081101561040757600080fd5b506001600160a01b03813516906020013561082c565b61025b6004803603608081101561043357600080fd5b506001600160a01b0381351690602081013590604081013590606001351515610848565b61037d6004803603604081101561046d57600080fd5b506001600160a01b0381351690602001356108c9565b6101b86004803603602081101561049957600080fd5b50356001600160a01b03166108e9565b61025b600480360360408110156104bf57600080fd5b506001600160a01b038135169060200135610904565b6101b8600480360360208110156104eb57600080fd5b50356001600160a01b0316610920565b61037d6004803603604081101561051157600080fd5b506001600160a01b03813516906020013561093b565b61025b6004803603606081101561053d57600080fd5b506001600160a01b0381351690602081013590604001351515610966565b61025b6004803603606081101561057157600080fd5b506001600160a01b03813516906020810135906040013561099b565b61025b600480360360408110156105a357600080fd5b506001600160a01b0381351690602001356109c1565b6001600160a01b03821660009081526002602052604081205481906001816106185750506001600160a01b03841660008181526001602090815260408083208784528252808320549383526003825280832087845290915290205460ff165b909590945092505050565b600160209081526000928352604080842090915290825290205481565b6001600160a01b03909316600081815260096020908152604080832069ffffffffffffffffffff90961680845295825280832094909455918152600a8252828120938152929052812091909155908190565b6001600160a01b0392909216600090815260086020908152604080832093835292905220805460ff1916911515919091179055565b6001600160a01b038216600081815260096020908152604080832069ffffffffffffffffffff861680855290835281842054948452600a83528184209084529091529020549250929050565b6001600160a01b039081166000908152600660205260409020541690565b6001600160a01b03918216600090815260066020526040902080546001600160a01b03191691909216179055565b6001600160a01b0381166000908152600260205260408120548061079857506001600160a01b0382166000908152602081905260409020545b92915050565b60006020819052908152604090205481565b6001600160a01b03919091166000908152600760209081526040808320938352929052205460ff1690565b6001600160a01b03909116600090815260026020526040902055565b6001600160a01b0392909216600090815260076020908152604080832093835292905220805460ff1916911515919091179055565b6001600160a01b03909116600090815260056020526040902055565b6001600160a01b039093166000818152600160209081526040808320868452825280832094909455828252600381528382208583528152838220805496151560ff1997881681179091558383526007825284832086845282528483208054881682179055928252600881528382209482529390935291208054909216179055565b600360209081526000928352604080842090915290825290205460ff1681565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b03909116600090815260208190526040902055565b6001600160a01b031660009081526004602052604090205490565b6001600160a01b03919091166000908152600860209081526040808320938352929052205460ff1690565b6001600160a01b0392909216600090815260036020908152604080832093835292905220805460ff1916911515919091179055565b6001600160a01b0390921660009081526001602090815260408083209383529290522055565b6001600160a01b0390911660009081526004602052604090205556fea2646970667358221220e0cbff1ce20f321acfa88d8aa92aa9a6146b70efaedbc3434dce285587d35c4d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x142 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x854A5BDF GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xB0620632 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xB0620632 EQ PUSH2 0x4A9 JUMPI DUP1 PUSH4 0xB7E1D145 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0xD2F3B4E8 EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0xD9E800CD EQ PUSH2 0x527 JUMPI DUP1 PUSH4 0xEE531409 EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0xF19AE734 EQ PUSH2 0x58D JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x854A5BDF EQ PUSH2 0x3BD JUMPI DUP1 PUSH4 0x8B3CDDAF EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x9933CC45 EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x9A4C9DFB EQ PUSH2 0x457 JUMPI DUP1 PUSH4 0x9C7FE9D6 EQ PUSH2 0x483 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x2ECD8857 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x2ECD8857 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0x3FD3EC8F EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x55A5BC7C EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x5FDC7149 EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x601407EB EQ PUSH2 0x391 JUMPI PUSH2 0x142 JUMP JUMPDEST DUP1 PUSH4 0x1957F81 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x701C021 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x98A03D1 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x1379B23A EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x1B85462D EQ PUSH2 0x25D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x15D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x623 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x20E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x692 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x20E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x6C7 JUMP JUMPDEST PUSH2 0x2BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x713 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x731 JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x31B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x75F JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x79E JUMP JUMPDEST PUSH2 0x37D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7DB JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x7F7 JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x82C JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x848 JUMP JUMPDEST PUSH2 0x37D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x8C9 JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8E9 JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x904 JUMP JUMPDEST PUSH2 0x1B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x920 JUMP JUMPDEST PUSH2 0x37D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x93B JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x966 JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x99B JUMP JUMPDEST PUSH2 0x25B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x9C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0x1 DUP2 PUSH2 0x618 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE PUSH1 0x3 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 AND DUP1 DUP5 MSTORE SWAP6 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xA DUP3 MSTORE DUP3 DUP2 KECCAK256 SWAP4 DUP2 MSTORE SWAP3 SWAP1 MSTORE DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD SWAP5 DUP5 MSTORE PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP1 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x798 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP3 DUP3 MSTORE PUSH1 0x3 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP6 DUP4 MSTORE DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP1 SLOAD SWAP7 ISZERO ISZERO PUSH1 0xFF NOT SWAP8 DUP9 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 DUP4 MSTORE PUSH1 0x7 DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 AND DUP3 OR SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE DUP4 DUP3 KECCAK256 SWAP5 DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND OR SWAP1 SSTORE 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 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 0xCB SELFDESTRUCT SHR 0xE2 0xF ORIGIN BYTE 0xCF 0xA8 DUP14 DUP11 0xA9 0x2A 0xA9 0xA6 EQ PUSH12 0x70EFAEDBC3434DCE285587D3 0x5C 0x4D PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "290:5043:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3262:391;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3262:391:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;536:66;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;536:66:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2039:285;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2039:285:37;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4227:200;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4227:200:37;;;;;;;;;;;;;;;:::i;:::-;;1483:266;;;;;;;;;;;;;;;;-1:-1:-1;1483:266:37;;-1:-1:-1;;;;;1483:266:37;;;;;;;;:::i;3659:110::-;;;;;;;;;;;;;;;;-1:-1:-1;3659:110:37;-1:-1:-1;;;;;3659:110:37;;:::i;:::-;;;;-1:-1:-1;;;;;3659:110:37;;;;;;;;;;;;;;4815:112;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4815:112:37;;;;;;;;;;:::i;1755:221::-;;;;;;;;;;;;;;;;-1:-1:-1;1755:221:37;-1:-1:-1;;;;;1755:221:37;;:::i;482:48::-;;;;;;;;;;;;;;;;-1:-1:-1;482:48:37;-1:-1:-1;;;;;482:48:37;;:::i;4433:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4433:170:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5221:110;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5221:110:37;;;;;;;;:::i;4609:200::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4609:200:37;;;;;;;;;;;;;;;:::i;5077:138::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5077:138:37;;;;;;;;:::i;2381:436::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2381:436:37;;;;;;;;;;;;;;;;;;;;:::i;662:63::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;662:63:37;;;;;;;;:::i;3914:133::-;;;;;;;;;;;;;;;;-1:-1:-1;3914:133:37;-1:-1:-1;;;;;3914:133:37;;:::i;1322:114::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1322:114:37;;;;;;;;:::i;3775:133::-;;;;;;;;;;;;;;;;-1:-1:-1;3775:133:37;-1:-1:-1;;;;;3775:133:37;;:::i;4053:168::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4053:168:37;;;;;;;;:::i;3063:193::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3063:193:37;;;;;;;;;;;;;;;:::i;2873:184::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2873:184:37;;;;;;;;;;;;;:::i;4933:138::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4933:138:37;;;;;;;;:::i;3262:391::-;-1:-1:-1;;;;;3392:19:37;;3351:7;3392:19;;;:11;:19;;;;;;3351:7;;3441:4;3460:10;3456:152;;-1:-1:-1;;;;;;;3494:19:37;;;;;;:11;:19;;;;;;;;:37;;;;;;;;;3560:19;;;:11;:19;;;;;:37;;;;;;;;;;;3456:152;3626:5;;;;-1:-1:-1;3262:391:37;-1:-1:-1;;;3262:391:37:o;536:66::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2039:285::-;-1:-1:-1;;;;;2223:19:37;;;2195:7;2223:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:38;;;;2271:23;;;:15;:23;;;;;:33;;;;;;;;:46;;;;2195:7;;;2039:285::o;4227:200::-;-1:-1:-1;;;;;4364:28:37;;;;;;;;:20;:28;;;;;;;;:46;;;;;;;:56;;-1:-1:-1;;4364:56:37;;;;;;;;;;4227:200::o;1483:266::-;-1:-1:-1;;;;;1614:19:37;;1570:7;1614:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;1673:23;;;:15;:23;;;;;:33;;;;;;;;;1483:266;;;;;:::o;3659:110::-;-1:-1:-1;;;;;3743:19:37;;;3717:7;3743:19;;;:11;:19;;;;;;;;3659:110::o;4815:112::-;-1:-1:-1;;;;;4891:19:37;;;;;;;:11;:19;;;;;:29;;-1:-1:-1;;;;;;4891:29:37;;;;;;;;4815:112::o;1755:221::-;-1:-1:-1;;;;;1847:19:37;;1812:7;1847:19;;;:11;:19;;;;;;1881:10;1877:70;;-1:-1:-1;;;;;;1915:21:37;;:13;:21;;;;;;;;;;;1877:70;1964:5;1755:221;-1:-1:-1;;1755:221:37:o;482:48::-;;;;;;;;;;;;;;:::o;4433:170::-;-1:-1:-1;;;;;4550:28:37;;;;4527:4;4550:28;;;:20;:28;;;;;;;;:46;;;;;;;;;;;4433:170::o;5221:110::-;-1:-1:-1;;;;;5296:19:37;;;;;;;:11;:19;;;;;:28;5221:110::o;4609:200::-;-1:-1:-1;;;;;4746:28:37;;;;;;;;:20;:28;;;;;;;;:46;;;;;;;:56;;-1:-1:-1;;4746:56:37;;;;;;;;;;4609:200::o;5077:138::-;-1:-1:-1;;;;;5163:28:37;;;;;;;:19;:28;;;;;:45;5077:138::o;2381:436::-;-1:-1:-1;;;;;2560:19:37;;;;;;;:11;:19;;;;;;;;:37;;;;;;;;:46;;;;2616:19;;;:11;:19;;;;;:37;;;;;;;;:52;;;;;-1:-1:-1;;2616:52:37;;;;;;;;2678:28;;;:20;:28;;;;;:46;;;;;;;;:61;;;;;;;;2749:28;;;:20;:28;;;;;:46;;;;;;;;;:61;;;;;;;;2381:436::o;662:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3914:133::-;-1:-1:-1;;;;;4012:28:37;3986:7;4012:28;;;:19;:28;;;;;;;3914:133::o;1322:114::-;-1:-1:-1;;;;;1399:21:37;;;:13;:21;;;;;;;;;;:30;1322:114::o;3775:133::-;-1:-1:-1;;;;;3873:28:37;3847:7;3873:28;;;:19;:28;;;;;;;3775:133::o;4053:168::-;-1:-1:-1;;;;;4168:28:37;;;;4145:4;4168:28;;;:20;:28;;;;;;;;:46;;;;;;;;;;;4053:168::o;3063:193::-;-1:-1:-1;;;;;3197:19:37;;;;;;;;:11;:19;;;;;;;;:37;;;;;;;:52;;-1:-1:-1;;3197:52:37;;;;;;;;;;3063:193::o;2873:184::-;-1:-1:-1;;;;;3004:19:37;;;;;;;:11;:19;;;;;;;;:37;;;;;;;:46;2873:184::o;4933:138::-;-1:-1:-1;;;;;5019:28:37;;;;;;;:19;:28;;;;;:45;4933:138::o"
+ },
+ "methodIdentifiers": {
+ "getChainlinkRoundData(address,uint80)": "1b85462d",
+ "getExpiryPrice(address,uint256)": "01957f81",
+ "getPrice(address)": "41976e09",
+ "getPricer(address)": "2ecd8857",
+ "getPricerDisputePeriod(address)": "9c7fe9d6",
+ "getPricerLockingPeriod(address)": "b7e1d145",
+ "isDisputePeriodOver(address,uint256)": "5fdc7149",
+ "isFinalized(address,uint256)": "9a4c9dfb",
+ "isLockingPeriodOver(address,uint256)": "d2f3b4e8",
+ "realTimePrice(address)": "55a5bc7c",
+ "setAssetPricer(address,address)": "3fd3ec8f",
+ "setChainlinkRoundData(address,uint80,uint256,uint256)": "098a03d1",
+ "setDisputePeriod(address,uint256)": "8b3cddaf",
+ "setExpiryPrice(address,uint256,uint256)": "ee531409",
+ "setExpiryPriceFinalizedAllPeiodOver(address,uint256,uint256,bool)": "9933cc45",
+ "setIsDisputePeriodOver(address,uint256,bool)": "854a5bdf",
+ "setIsFinalized(address,uint256,bool)": "d9e800cd",
+ "setIsLockingPeriodOver(address,uint256,bool)": "1379b23a",
+ "setLockingPeriod(address,uint256)": "f19ae734",
+ "setRealTimePrice(address,uint256)": "b0620632",
+ "setStablePrice(address,uint256)": "601407eb",
+ "storedPrice(address,uint256)": "0701c021"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getChainlinkRoundData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"getExpiryPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getPricer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"getPricerDisputePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"getPricerLockingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"isDisputePeriodOver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"isFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"isLockingPeriodOver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"realTimePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"}],\"name\":\"setAssetPricer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"setChainlinkRoundData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_disputePeriod\",\"type\":\"uint256\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setExpiryPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isFinalized\",\"type\":\"bool\"}],\"name\":\"setExpiryPriceFinalizedAllPeiodOver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"}],\"name\":\"setIsDisputePeriodOver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isFinalized\",\"type\":\"bool\"}],\"name\":\"setIsFinalized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"}],\"name\":\"setIsLockingPeriodOver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pricer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lockingPeriod\",\"type\":\"uint256\"}],\"name\":\"setLockingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setRealTimePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setStablePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"storedPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The MockOracle contract let us easily manipulate the oracle state in testings.\",\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"SPDX-License-Identifier: UNLICENSED\"}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockOracle.sol\":\"MockOracle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/OpynPricerInterface.sol\":{\"keccak256\":\"0xa937e5fa413ff096600cd4bb62795cda1aa6916a3ad4b1e50ab11aaf5cdd07c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://194bd27f9bbbac1a58c920bda262886f9cdc315985ad152c584f9715261d8317\",\"dweb:/ipfs/QmQGXWP6dNSBxhqrW93mAsS3E2ahBSNgnG5mBais6rgdaK\"]},\"contracts/mocks/MockOracle.sol\":{\"keccak256\":\"0x1a9a79167dee612c5e434e15a19edd5f9c037709cbd4c0dfaff2ada919dc50df\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://02844d1a1c2dda7fd410d33764001c3fa2e4b17fe55abb4fd2544adc965b4984\",\"dweb:/ipfs/QmeV5MLnoPETiMrTgqaGdxfDnLQRDbe248x1BXGpRJQSwJ\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockOtoken.sol": {
+ "MockOtoken": {
+ "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": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "collateralAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "controller",
+ "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": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "expiryTimestamp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getChainId",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOtokenDetails",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "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": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "init",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "inited",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isPut",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mintOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "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": "amount",
+ "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": [],
+ "name": "strikeAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "strikePrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlyingAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "6080604052610105805461ff001916905534801561001c57600080fd5b50611c2c8061002c6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f9578063c52987cf11610097578063f3c274a611610071578063f3c274a61461054b578063f5887cdd14610553578063f630df341461055b578063f77c4791146105af576101c4565b8063c52987cf146104c4578063d505accf146104cc578063dd62ed3e1461051d576101c4565b8063a9059cbb116100d3578063a9059cbb1461043e578063aabaecd61461046a578063ade6e2aa14610472578063af0968fc1461047a576101c4565b80637ecebe00146103e457806395d89b411461040a578063a457c2d714610412576101c4565b80633644e5151161016657806351b0a4101161014057806351b0a4101461035c57806356d878f71461038a57806370a08231146103b65780637158da7c146103dc576101c4565b80633644e51514610320578063395093511461032857806343c885ba14610354576101c4565b806318160ddd116101a257806318160ddd146102aa57806323b872dd146102c4578063313ce567146102fa5780633408e47014610318576101c4565b806306fdde03146101c9578063095ea7b31461024657806317d69bc814610286575b600080fd5b6101d16105b7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b03813516906020013561064e565b604080519115158252519081900360200190f35b61028e61066b565b604080516001600160a01b039092168252519081900360200190f35b6102b261067b565b60408051918252519081900360200190f35b610272600480360360608110156102da57600080fd5b506001600160a01b03813581169160208101359091169060400135610681565b61030261070e565b6040805160ff9092168252519081900360200190f35b6102b2610717565b6102b261071b565b6102726004803603604081101561033e57600080fd5b506001600160a01b03813516906020013561072a565b61027261077e565b6103886004803603604081101561037257600080fd5b506001600160a01b03813516906020013561078d565b005b610388600480360360408110156103a057600080fd5b506001600160a01b03813516906020013561079b565b6102b2600480360360208110156103cc57600080fd5b50356001600160a01b03166107a5565b61028e6107c0565b6102b2600480360360208110156103fa57600080fd5b50356001600160a01b03166107d0565b6101d16107f7565b6102726004803603604081101561042857600080fd5b506001600160a01b038135169060200135610858565b6102726004803603604081101561045457600080fd5b506001600160a01b0381351690602001356108c6565b61028e6108da565b6102b26108ea565b6104826108f1565b604080516001600160a01b039788168152958716602087015293909516848401526060840191909152608083015291151560a082015290519081900360c00190f35b6102b2610929565b610388600480360360e08110156104e257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610930565b6102b26004803603604081101561053357600080fd5b506001600160a01b0381358116916020013516610ac8565b610272610af3565b61028e610afd565b610388600480360360e081101561057157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001351515610b0c565b61028e610d0a565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106435780601f1061061857610100808354040283529160200191610643565b820191906000526020600020905b81548152906001019060200180831161062657829003601f168201915b505050505090505b90565b600061066261065b610d19565b8484610d1d565b50600192915050565b610101546001600160a01b031681565b60675490565b600061068e848484610e09565b6107048461069a610d19565b6106ff85604051806060016040528060288152602001611b12602891396001600160a01b038a166000908152606660205260408120906106d8610d19565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610f7216565b610d1d565b5060019392505050565b606a5460ff1690565b4690565b6000610725611009565b905090565b6000610662610737610d19565b846106ff8560666000610748610d19565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61103c16565b61010554610100900460ff1681565b610797828261109d565b5050565b610797828261119b565b6001600160a01b031660009081526065602052604090205490565b610100546001600160a01b031681565b6001600160a01b038116600090815260cb602052604081206107f1906112a3565b92915050565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106435780601f1061061857610100808354040283529160200191610643565b6000610662610865610d19565b846106ff85604051806060016040528060258152602001611bd2602591396066600061088f610d19565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610f7216565b60006106626108d3610d19565b8484610e09565b610102546001600160a01b031681565b6101045481565b6101025461010054610101546101035461010454610105546001600160a01b039586169594851694939093169260ff16909192939495565b6101035481565b83421115610985576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc548888886109ba60cb60008e6001600160a01b03166001600160a01b031681526020019081526020016000206112a3565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e0909101909152805191012090506000610a18826112a7565b90506000610a28828787876112f3565b9050896001600160a01b0316816001600160a01b031614610a90576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb60205260409020610ab19061146d565b610abc8a8a8a610d1d565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101055460ff1681565b60fe546001600160a01b031681565b600054610100900460ff1680610b255750610b25611476565b80610b33575060005460ff16155b610b6e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015610b99576000805460ff1961ff0019909116610100171660011790555b610105805461ff00191661010017905560408051633018205f60e01b815290516001600160a01b038a1691633018205f916004808301926020929190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6020811015610c1357600080fd5b505160ff80546001600160a01b03199081166001600160a01b0393841617909155610100805482168a8416179055610101805482168984161790556101028054909116918716919091179055610103849055610104839055610105805460ff1916831515179055604080518082018252601c81527f455448555344432f313539373531313935352f323030502f55534443000000006020808301919091528251808401909352600983526806f45544855534443560bc1b9083015290610cd9828261147c565b610ce282611555565b610cec600861162b565b50508015610d00576000805461ff00191690555b5050505050505050565b60ff546001600160a01b031681565b3390565b6001600160a01b038316610d625760405162461bcd60e51b8152600401808060200182810382526024815260200180611bae6024913960400191505060405180910390fd5b6001600160a01b038216610da75760405162461bcd60e51b81526004018080602001828103825260228152602001806119e26022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610e4e5760405162461bcd60e51b8152600401808060200182810382526025815260200180611b896025913960400191505060405180910390fd5b6001600160a01b038216610e935760405162461bcd60e51b815260040180806020018281038252602381526020018061199d6023913960400191505060405180910390fd5b610e9e838383611550565b610ee181604051806060016040528060268152602001611a04602691396001600160a01b038616600090815260656020526040902054919063ffffffff610f7216565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610f16908263ffffffff61103c16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156110015760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fc6578181015183820152602001610fae565b50505050905090810190601f168015610ff35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006107256040518080611ac0605291396052019050604051809103902061102f611641565b611037611647565b61164d565b600082820183811015611096576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166110f8576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61110460008383611550565b606754611117908263ffffffff61103c16565b6067556001600160a01b038216600090815260656020526040902054611143908263ffffffff61103c16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166111e05760405162461bcd60e51b8152600401808060200182810382526021815260200180611b686021913960400191505060405180910390fd5b6111ec82600083611550565b61122f816040518060600160405280602281526020016119c0602291396001600160a01b038516600090815260656020526040902054919063ffffffff610f7216565b6001600160a01b03831660009081526065602052604090205560675461125b908263ffffffff6116a316565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b60006112b1611009565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156113545760405162461bcd60e51b8152600401808060200182810382526022815260200180611a2a6022913960400191505060405180910390fd5b8360ff16601b148061136957508360ff16601c145b6113a45760405162461bcd60e51b8152600401808060200182810382526022815260200180611a9e6022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa1580156113fc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611464576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b303b1590565b600054610100900460ff16806114955750611495611476565b806114a3575060005460ff16155b6114de5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015611509576000805460ff1961ff0019909116610100171660011790555b825161151c906068906020860190611904565b508151611530906069906020850190611904565b50606a805460ff191660121790558015611550576000805461ff00191690555b505050565b600054610100900460ff168061156e575061156e611476565b8061157c575060005460ff16155b6115b75760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff161580156115e2576000805460ff1961ff0019909116610100171660011790555b6115ea6116e5565b61160d82604051806040016040528060018152602001603160f81b815250611787565b61161682611847565b8015610797576000805461ff00191690555050565b606a805460ff191660ff92909216919091179055565b60975490565b60985490565b600083838361165a610717565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b600061109683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f72565b600054610100900460ff16806116fe57506116fe611476565b8061170c575060005460ff16155b6117475760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015611772576000805460ff1961ff0019909116610100171660011790555b8015611784576000805461ff00191690555b50565b600054610100900460ff16806117a057506117a0611476565b806117ae575060005460ff16155b6117e95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015611814576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015611550576000805461ff0019169055505050565b600054610100900460ff16806118605750611860611476565b8061186e575060005460ff16155b6118a95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff161580156118d4576000805460ff1961ff0019909116610100171660011790555b604051806052611a4c823960405190819003605201902060cc55508015610797576000805461ff00191690555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061194557805160ff1916838001178555611972565b82800160010185558215611972579182015b82811115611972578251825591602001919060010190611957565b5061197e929150611982565b5090565b61064b91905b8082111561197e576000815560010161198856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75655065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e652945434453413a20696e76616c6964207369676e6174757265202776272076616c7565454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ece5295a462d6594fc96d91a01125d56009bc7ba8c6a9e487e4bbf18a7fcc1ad64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x105 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C2C DUP1 PUSH2 0x2C 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 0x1C4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xC52987CF GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xF3C274A6 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xF3C274A6 EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xF630DF34 EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0x5AF JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0xC52987CF EQ PUSH2 0x4C4 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x51D JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0xAABAECD6 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0xADE6E2AA EQ PUSH2 0x472 JUMPI DUP1 PUSH4 0xAF0968FC EQ PUSH2 0x47A JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3E4 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x412 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x51B0A410 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x51B0A410 EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x56D878F7 EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0x7158DA7C EQ PUSH2 0x3DC JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x43C885BA EQ PUSH2 0x354 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x318 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x17D69BC8 EQ PUSH2 0x286 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D1 PUSH2 0x5B7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x238 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x64E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x28E PUSH2 0x66B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2B2 PUSH2 0x67B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x681 JUMP JUMPDEST PUSH2 0x302 PUSH2 0x70E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2B2 PUSH2 0x717 JUMP JUMPDEST PUSH2 0x2B2 PUSH2 0x71B JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x72A JUMP JUMPDEST PUSH2 0x272 PUSH2 0x77E JUMP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x78D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x79B JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7A5 JUMP JUMPDEST PUSH2 0x28E PUSH2 0x7C0 JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x1D1 PUSH2 0x7F7 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x858 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x454 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x8C6 JUMP JUMPDEST PUSH2 0x28E PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x2B2 PUSH2 0x8EA JUMP JUMPDEST PUSH2 0x482 PUSH2 0x8F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 SWAP1 SWAP6 AND DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP4 ADD MSTORE SWAP2 ISZERO ISZERO PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xC0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2B2 PUSH2 0x929 JUMP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x930 JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x533 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xAC8 JUMP JUMPDEST PUSH2 0x272 PUSH2 0xAF3 JUMP JUMPDEST PUSH2 0x28E PUSH2 0xAFD JUMP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xB0C JUMP JUMPDEST PUSH2 0x28E PUSH2 0xD0A JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x643 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x618 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x643 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 0x626 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x65B PUSH2 0xD19 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xD1D JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x68E DUP5 DUP5 DUP5 PUSH2 0xE09 JUMP JUMPDEST PUSH2 0x704 DUP5 PUSH2 0x69A PUSH2 0xD19 JUMP JUMPDEST PUSH2 0x6FF DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B12 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x6D8 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH2 0xD1D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x725 PUSH2 0x1009 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x737 PUSH2 0xD19 JUMP JUMPDEST DUP5 PUSH2 0x6FF DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x748 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x797 DUP3 DUP3 PUSH2 0x109D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x797 DUP3 DUP3 PUSH2 0x119B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x7F1 SWAP1 PUSH2 0x12A3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x643 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x618 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x643 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x865 PUSH2 0xD19 JUMP JUMPDEST DUP5 PUSH2 0x6FF DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1BD2 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x88F PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x8D3 PUSH2 0xD19 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xE09 JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x104 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH2 0x100 SLOAD PUSH2 0x101 SLOAD PUSH2 0x103 SLOAD PUSH2 0x104 SLOAD PUSH2 0x105 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP6 SWAP5 DUP6 AND SWAP5 SWAP4 SWAP1 SWAP4 AND SWAP3 PUSH1 0xFF AND SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 JUMP JUMPDEST PUSH2 0x103 SLOAD DUP2 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x985 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x9BA PUSH1 0xCB PUSH1 0x0 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 PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xA18 DUP3 PUSH2 0x12A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA28 DUP3 DUP8 DUP8 DUP8 PUSH2 0x12F3 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xA90 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xAB1 SWAP1 PUSH2 0x146D JUMP JUMPDEST PUSH2 0xABC DUP11 DUP11 DUP11 PUSH2 0xD1D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 PUSH2 0x105 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xB25 JUMPI POP PUSH2 0xB25 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xB6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x105 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3018205F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x3018205F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH2 0x100 DUP1 SLOAD DUP3 AND DUP11 DUP5 AND OR SWAP1 SSTORE PUSH2 0x101 DUP1 SLOAD DUP3 AND DUP10 DUP5 AND OR SWAP1 SSTORE PUSH2 0x102 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP8 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x103 DUP5 SWAP1 SSTORE PUSH2 0x104 DUP4 SWAP1 SSTORE PUSH2 0x105 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH32 0x455448555344432F313539373531313935352F323030502F5553444300000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x9 DUP4 MSTORE PUSH9 0x6F455448555344435 PUSH1 0xBC SHL SWAP1 DUP4 ADD MSTORE SWAP1 PUSH2 0xCD9 DUP3 DUP3 PUSH2 0x147C JUMP JUMPDEST PUSH2 0xCE2 DUP3 PUSH2 0x1555 JUMP JUMPDEST PUSH2 0xCEC PUSH1 0x8 PUSH2 0x162B JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0xD00 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xD62 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1BAE PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x19E2 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B89 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x199D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE9E DUP4 DUP4 DUP4 PUSH2 0x1550 JUMP JUMPDEST PUSH2 0xEE1 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A04 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xF16 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x1001 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFC6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFAE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xFF3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x725 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x1AC0 PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0x102F PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x1037 PUSH2 0x1647 JUMP JUMPDEST PUSH2 0x164D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1096 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x10F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1104 PUSH1 0x0 DUP4 DUP4 PUSH2 0x1550 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x1117 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1143 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x11E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B68 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11EC DUP3 PUSH1 0x0 DUP4 PUSH2 0x1550 JUMP JUMPDEST PUSH2 0x122F DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19C0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0x125B SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x16A3 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12B1 PUSH2 0x1009 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x1354 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A2A PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0x1369 JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x13A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13FC 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 0x1464 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1495 JUMPI POP PUSH2 0x1495 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x14A3 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x14DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1509 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH2 0x151C SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1530 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1550 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x156E JUMPI POP PUSH2 0x156E PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x157C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x15B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x15E2 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x15EA PUSH2 0x16E5 JUMP JUMPDEST PUSH2 0x160D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH2 0x1787 JUMP JUMPDEST PUSH2 0x1616 DUP3 PUSH2 0x1847 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x165A PUSH2 0x717 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1096 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xF72 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x16FE JUMPI POP PUSH2 0x16FE PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x170C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1747 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1772 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x1784 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x17A0 JUMPI POP PUSH2 0x17A0 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x17AE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x17E9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1814 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH2 0x1550 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1860 JUMPI POP PUSH2 0x1860 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x186E JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x18A9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x18D4 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH2 0x1A4C DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1945 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1972 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1972 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1972 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1957 JUMP JUMPDEST POP PUSH2 0x197E SWAP3 SWAP2 POP PUSH2 0x1982 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x64B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x197E JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1988 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 POP PUSH6 0x726D69742861 PUSH5 0x6472657373 KECCAK256 PUSH16 0x776E65722C6164647265737320737065 PUSH15 0x6465722C75696E743235362076616C PUSH22 0x652C75696E74323536206E6F6E63652C75696E743235 CALLDATASIZE KECCAK256 PUSH5 0x6561646C69 PUSH15 0x652945434453413A20696E76616C69 PUSH5 0x207369676E PUSH2 0x7475 PUSH19 0x65202776272076616C7565454950373132446F PUSH14 0x61696E28737472696E67206E616D PUSH6 0x2C737472696E PUSH8 0x2076657273696F6E 0x2C PUSH22 0x696E7432353620636861696E49642C61646472657373 KECCAK256 PUSH23 0x6572696679696E67436F6E74726163742945524332303A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E6365436F6E74726163742069 PUSH15 0x7374616E63652068617320616C7265 PUSH2 0x6479 KECCAK256 PUSH3 0x65656E KECCAK256 PUSH10 0x6E697469616C697A6564 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220ECE5 0x29 GAS CHAINID 0x2D PUSH6 0x94FC96D91A01 SLT 0x5D JUMP STOP SWAP12 0xC7 0xBA DUP13 PUSH11 0x9E487E4BBF18A7FCC1AD64 PUSH20 0x6F6C634300060A00330000000000000000000000 ",
+ "sourceMap": "368:2030:38:-:0;;;681:26;;;-1:-1:-1;;681:26:38;;;368:2030;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f9578063c52987cf11610097578063f3c274a611610071578063f3c274a61461054b578063f5887cdd14610553578063f630df341461055b578063f77c4791146105af576101c4565b8063c52987cf146104c4578063d505accf146104cc578063dd62ed3e1461051d576101c4565b8063a9059cbb116100d3578063a9059cbb1461043e578063aabaecd61461046a578063ade6e2aa14610472578063af0968fc1461047a576101c4565b80637ecebe00146103e457806395d89b411461040a578063a457c2d714610412576101c4565b80633644e5151161016657806351b0a4101161014057806351b0a4101461035c57806356d878f71461038a57806370a08231146103b65780637158da7c146103dc576101c4565b80633644e51514610320578063395093511461032857806343c885ba14610354576101c4565b806318160ddd116101a257806318160ddd146102aa57806323b872dd146102c4578063313ce567146102fa5780633408e47014610318576101c4565b806306fdde03146101c9578063095ea7b31461024657806317d69bc814610286575b600080fd5b6101d16105b7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b03813516906020013561064e565b604080519115158252519081900360200190f35b61028e61066b565b604080516001600160a01b039092168252519081900360200190f35b6102b261067b565b60408051918252519081900360200190f35b610272600480360360608110156102da57600080fd5b506001600160a01b03813581169160208101359091169060400135610681565b61030261070e565b6040805160ff9092168252519081900360200190f35b6102b2610717565b6102b261071b565b6102726004803603604081101561033e57600080fd5b506001600160a01b03813516906020013561072a565b61027261077e565b6103886004803603604081101561037257600080fd5b506001600160a01b03813516906020013561078d565b005b610388600480360360408110156103a057600080fd5b506001600160a01b03813516906020013561079b565b6102b2600480360360208110156103cc57600080fd5b50356001600160a01b03166107a5565b61028e6107c0565b6102b2600480360360208110156103fa57600080fd5b50356001600160a01b03166107d0565b6101d16107f7565b6102726004803603604081101561042857600080fd5b506001600160a01b038135169060200135610858565b6102726004803603604081101561045457600080fd5b506001600160a01b0381351690602001356108c6565b61028e6108da565b6102b26108ea565b6104826108f1565b604080516001600160a01b039788168152958716602087015293909516848401526060840191909152608083015291151560a082015290519081900360c00190f35b6102b2610929565b610388600480360360e08110156104e257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610930565b6102b26004803603604081101561053357600080fd5b506001600160a01b0381358116916020013516610ac8565b610272610af3565b61028e610afd565b610388600480360360e081101561057157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001351515610b0c565b61028e610d0a565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106435780601f1061061857610100808354040283529160200191610643565b820191906000526020600020905b81548152906001019060200180831161062657829003601f168201915b505050505090505b90565b600061066261065b610d19565b8484610d1d565b50600192915050565b610101546001600160a01b031681565b60675490565b600061068e848484610e09565b6107048461069a610d19565b6106ff85604051806060016040528060288152602001611b12602891396001600160a01b038a166000908152606660205260408120906106d8610d19565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610f7216565b610d1d565b5060019392505050565b606a5460ff1690565b4690565b6000610725611009565b905090565b6000610662610737610d19565b846106ff8560666000610748610d19565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61103c16565b61010554610100900460ff1681565b610797828261109d565b5050565b610797828261119b565b6001600160a01b031660009081526065602052604090205490565b610100546001600160a01b031681565b6001600160a01b038116600090815260cb602052604081206107f1906112a3565b92915050565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106435780601f1061061857610100808354040283529160200191610643565b6000610662610865610d19565b846106ff85604051806060016040528060258152602001611bd2602591396066600061088f610d19565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610f7216565b60006106626108d3610d19565b8484610e09565b610102546001600160a01b031681565b6101045481565b6101025461010054610101546101035461010454610105546001600160a01b039586169594851694939093169260ff16909192939495565b6101035481565b83421115610985576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc548888886109ba60cb60008e6001600160a01b03166001600160a01b031681526020019081526020016000206112a3565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e0909101909152805191012090506000610a18826112a7565b90506000610a28828787876112f3565b9050896001600160a01b0316816001600160a01b031614610a90576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb60205260409020610ab19061146d565b610abc8a8a8a610d1d565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101055460ff1681565b60fe546001600160a01b031681565b600054610100900460ff1680610b255750610b25611476565b80610b33575060005460ff16155b610b6e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015610b99576000805460ff1961ff0019909116610100171660011790555b610105805461ff00191661010017905560408051633018205f60e01b815290516001600160a01b038a1691633018205f916004808301926020929190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6020811015610c1357600080fd5b505160ff80546001600160a01b03199081166001600160a01b0393841617909155610100805482168a8416179055610101805482168984161790556101028054909116918716919091179055610103849055610104839055610105805460ff1916831515179055604080518082018252601c81527f455448555344432f313539373531313935352f323030502f55534443000000006020808301919091528251808401909352600983526806f45544855534443560bc1b9083015290610cd9828261147c565b610ce282611555565b610cec600861162b565b50508015610d00576000805461ff00191690555b5050505050505050565b60ff546001600160a01b031681565b3390565b6001600160a01b038316610d625760405162461bcd60e51b8152600401808060200182810382526024815260200180611bae6024913960400191505060405180910390fd5b6001600160a01b038216610da75760405162461bcd60e51b81526004018080602001828103825260228152602001806119e26022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610e4e5760405162461bcd60e51b8152600401808060200182810382526025815260200180611b896025913960400191505060405180910390fd5b6001600160a01b038216610e935760405162461bcd60e51b815260040180806020018281038252602381526020018061199d6023913960400191505060405180910390fd5b610e9e838383611550565b610ee181604051806060016040528060268152602001611a04602691396001600160a01b038616600090815260656020526040902054919063ffffffff610f7216565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610f16908263ffffffff61103c16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156110015760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fc6578181015183820152602001610fae565b50505050905090810190601f168015610ff35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006107256040518080611ac0605291396052019050604051809103902061102f611641565b611037611647565b61164d565b600082820183811015611096576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166110f8576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61110460008383611550565b606754611117908263ffffffff61103c16565b6067556001600160a01b038216600090815260656020526040902054611143908263ffffffff61103c16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166111e05760405162461bcd60e51b8152600401808060200182810382526021815260200180611b686021913960400191505060405180910390fd5b6111ec82600083611550565b61122f816040518060600160405280602281526020016119c0602291396001600160a01b038516600090815260656020526040902054919063ffffffff610f7216565b6001600160a01b03831660009081526065602052604090205560675461125b908263ffffffff6116a316565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b60006112b1611009565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156113545760405162461bcd60e51b8152600401808060200182810382526022815260200180611a2a6022913960400191505060405180910390fd5b8360ff16601b148061136957508360ff16601c145b6113a45760405162461bcd60e51b8152600401808060200182810382526022815260200180611a9e6022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa1580156113fc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611464576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b303b1590565b600054610100900460ff16806114955750611495611476565b806114a3575060005460ff16155b6114de5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015611509576000805460ff1961ff0019909116610100171660011790555b825161151c906068906020860190611904565b508151611530906069906020850190611904565b50606a805460ff191660121790558015611550576000805461ff00191690555b505050565b600054610100900460ff168061156e575061156e611476565b8061157c575060005460ff16155b6115b75760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff161580156115e2576000805460ff1961ff0019909116610100171660011790555b6115ea6116e5565b61160d82604051806040016040528060018152602001603160f81b815250611787565b61161682611847565b8015610797576000805461ff00191690555050565b606a805460ff191660ff92909216919091179055565b60975490565b60985490565b600083838361165a610717565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b600061109683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f72565b600054610100900460ff16806116fe57506116fe611476565b8061170c575060005460ff16155b6117475760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015611772576000805460ff1961ff0019909116610100171660011790555b8015611784576000805461ff00191690555b50565b600054610100900460ff16806117a057506117a0611476565b806117ae575060005460ff16155b6117e95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff16158015611814576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015611550576000805461ff0019169055505050565b600054610100900460ff16806118605750611860611476565b8061186e575060005460ff16155b6118a95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b3a602e913960400191505060405180910390fd5b600054610100900460ff161580156118d4576000805460ff1961ff0019909116610100171660011790555b604051806052611a4c823960405190819003605201902060cc55508015610797576000805461ff00191690555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061194557805160ff1916838001178555611972565b82800160010185558215611972579182015b82811115611972578251825591602001919060010190611957565b5061197e929150611982565b5090565b61064b91905b8082111561197e576000815560010161198856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75655065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e652945434453413a20696e76616c6964207369676e6174757265202776272076616c7565454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ece5295a462d6594fc96d91a01125d56009bc7ba8c6a9e487e4bbf18a7fcc1ad64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1C4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xC52987CF GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xF3C274A6 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xF3C274A6 EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xF630DF34 EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0x5AF JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0xC52987CF EQ PUSH2 0x4C4 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x51D JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0xAABAECD6 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0xADE6E2AA EQ PUSH2 0x472 JUMPI DUP1 PUSH4 0xAF0968FC EQ PUSH2 0x47A JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3E4 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x412 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x51B0A410 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x51B0A410 EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x56D878F7 EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0x7158DA7C EQ PUSH2 0x3DC JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x43C885BA EQ PUSH2 0x354 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x318 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x17D69BC8 EQ PUSH2 0x286 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D1 PUSH2 0x5B7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x238 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x64E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x28E PUSH2 0x66B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2B2 PUSH2 0x67B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x681 JUMP JUMPDEST PUSH2 0x302 PUSH2 0x70E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2B2 PUSH2 0x717 JUMP JUMPDEST PUSH2 0x2B2 PUSH2 0x71B JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x72A JUMP JUMPDEST PUSH2 0x272 PUSH2 0x77E JUMP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x78D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x79B JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7A5 JUMP JUMPDEST PUSH2 0x28E PUSH2 0x7C0 JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x1D1 PUSH2 0x7F7 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x858 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x454 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x8C6 JUMP JUMPDEST PUSH2 0x28E PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x2B2 PUSH2 0x8EA JUMP JUMPDEST PUSH2 0x482 PUSH2 0x8F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 SWAP1 SWAP6 AND DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP4 ADD MSTORE SWAP2 ISZERO ISZERO PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xC0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2B2 PUSH2 0x929 JUMP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x930 JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x533 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xAC8 JUMP JUMPDEST PUSH2 0x272 PUSH2 0xAF3 JUMP JUMPDEST PUSH2 0x28E PUSH2 0xAFD JUMP JUMPDEST PUSH2 0x388 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xB0C JUMP JUMPDEST PUSH2 0x28E PUSH2 0xD0A JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x643 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x618 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x643 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 0x626 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x65B PUSH2 0xD19 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xD1D JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x68E DUP5 DUP5 DUP5 PUSH2 0xE09 JUMP JUMPDEST PUSH2 0x704 DUP5 PUSH2 0x69A PUSH2 0xD19 JUMP JUMPDEST PUSH2 0x6FF DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B12 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x6D8 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH2 0xD1D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x725 PUSH2 0x1009 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x737 PUSH2 0xD19 JUMP JUMPDEST DUP5 PUSH2 0x6FF DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x748 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x797 DUP3 DUP3 PUSH2 0x109D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x797 DUP3 DUP3 PUSH2 0x119B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x7F1 SWAP1 PUSH2 0x12A3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x643 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x618 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x643 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x865 PUSH2 0xD19 JUMP JUMPDEST DUP5 PUSH2 0x6FF DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1BD2 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x88F PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 PUSH2 0x8D3 PUSH2 0xD19 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xE09 JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x104 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH2 0x100 SLOAD PUSH2 0x101 SLOAD PUSH2 0x103 SLOAD PUSH2 0x104 SLOAD PUSH2 0x105 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP6 SWAP5 DUP6 AND SWAP5 SWAP4 SWAP1 SWAP4 AND SWAP3 PUSH1 0xFF AND SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 JUMP JUMPDEST PUSH2 0x103 SLOAD DUP2 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x985 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x9BA PUSH1 0xCB PUSH1 0x0 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 PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xA18 DUP3 PUSH2 0x12A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA28 DUP3 DUP8 DUP8 DUP8 PUSH2 0x12F3 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xA90 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xAB1 SWAP1 PUSH2 0x146D JUMP JUMPDEST PUSH2 0xABC DUP11 DUP11 DUP11 PUSH2 0xD1D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 PUSH2 0x105 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xB25 JUMPI POP PUSH2 0xB25 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xB6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x105 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3018205F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x3018205F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH2 0x100 DUP1 SLOAD DUP3 AND DUP11 DUP5 AND OR SWAP1 SSTORE PUSH2 0x101 DUP1 SLOAD DUP3 AND DUP10 DUP5 AND OR SWAP1 SSTORE PUSH2 0x102 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP8 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x103 DUP5 SWAP1 SSTORE PUSH2 0x104 DUP4 SWAP1 SSTORE PUSH2 0x105 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH32 0x455448555344432F313539373531313935352F323030502F5553444300000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x9 DUP4 MSTORE PUSH9 0x6F455448555344435 PUSH1 0xBC SHL SWAP1 DUP4 ADD MSTORE SWAP1 PUSH2 0xCD9 DUP3 DUP3 PUSH2 0x147C JUMP JUMPDEST PUSH2 0xCE2 DUP3 PUSH2 0x1555 JUMP JUMPDEST PUSH2 0xCEC PUSH1 0x8 PUSH2 0x162B JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0xD00 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xD62 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1BAE PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x19E2 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B89 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x199D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE9E DUP4 DUP4 DUP4 PUSH2 0x1550 JUMP JUMPDEST PUSH2 0xEE1 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A04 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xF16 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x1001 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFC6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFAE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xFF3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x725 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x1AC0 PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0x102F PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x1037 PUSH2 0x1647 JUMP JUMPDEST PUSH2 0x164D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1096 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x10F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1104 PUSH1 0x0 DUP4 DUP4 PUSH2 0x1550 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x1117 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1143 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x103C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x11E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B68 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11EC DUP3 PUSH1 0x0 DUP4 PUSH2 0x1550 JUMP JUMPDEST PUSH2 0x122F DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19C0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF72 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0x125B SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x16A3 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12B1 PUSH2 0x1009 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x1354 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A2A PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0x1369 JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x13A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13FC 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 0x1464 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1495 JUMPI POP PUSH2 0x1495 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x14A3 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x14DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1509 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH2 0x151C SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1530 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1550 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x156E JUMPI POP PUSH2 0x156E PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x157C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x15B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x15E2 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x15EA PUSH2 0x16E5 JUMP JUMPDEST PUSH2 0x160D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH2 0x1787 JUMP JUMPDEST PUSH2 0x1616 DUP3 PUSH2 0x1847 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x165A PUSH2 0x717 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1096 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xF72 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x16FE JUMPI POP PUSH2 0x16FE PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x170C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1747 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1772 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x1784 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x17A0 JUMPI POP PUSH2 0x17A0 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x17AE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x17E9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1814 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH2 0x1550 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1860 JUMPI POP PUSH2 0x1860 PUSH2 0x1476 JUMP JUMPDEST DUP1 PUSH2 0x186E JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x18A9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B3A PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x18D4 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH2 0x1A4C DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1945 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1972 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1972 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1972 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1957 JUMP JUMPDEST POP PUSH2 0x197E SWAP3 SWAP2 POP PUSH2 0x1982 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x64B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x197E JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1988 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 POP PUSH6 0x726D69742861 PUSH5 0x6472657373 KECCAK256 PUSH16 0x776E65722C6164647265737320737065 PUSH15 0x6465722C75696E743235362076616C PUSH22 0x652C75696E74323536206E6F6E63652C75696E743235 CALLDATASIZE KECCAK256 PUSH5 0x6561646C69 PUSH15 0x652945434453413A20696E76616C69 PUSH5 0x207369676E PUSH2 0x7475 PUSH19 0x65202776272076616C7565454950373132446F PUSH14 0x61696E28737472696E67206E616D PUSH6 0x2C737472696E PUSH8 0x2076657273696F6E 0x2C PUSH22 0x696E7432353620636861696E49642C61646472657373 KECCAK256 PUSH23 0x6572696679696E67436F6E74726163742945524332303A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E6365436F6E74726163742069 PUSH15 0x7374616E63652068617320616C7265 PUSH2 0x6479 KECCAK256 PUSH3 0x65656E KECCAK256 PUSH10 0x6E697469616C697A6564 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220ECE5 0x29 GAS CHAINID 0x2D PUSH6 0x94FC96D91A01 SLT 0x5D JUMP STOP SWAP12 0xC7 0xBA DUP13 PUSH11 0x9E487E4BBF18A7FCC1AD64 PUSH20 0x6F6C634300060A00330000000000000000000000 ",
+ "sourceMap": "368:2030:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;519:26:38;;;:::i;:::-;;;;-1:-1:-1;;;;;519:26:38;;;;;;;;;;;;;;3582:98:54;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2076:320:38;;;:::i;2983:113:65:-;;;:::i;5996:215:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;681:26:38:-;;;:::i;1868:95::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1868:95:38;;;;;;;;:::i;:::-;;1969:101;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1969:101:38;;;;;;;;:::i;3738:117:54:-;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;483:30:38:-;;;:::i;2741:118:65:-;;;;;;;;;;;;;;;;-1:-1:-1;2741:118:65;-1:-1:-1;;;;;2741:118:65;;:::i;2733:85:54:-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;551:30:38:-;;;:::i;620:::-;;;:::i;1542:320::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1542:320:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;588:26;;;:::i;1920:760:65:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1920:760:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4288:149:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;657:17:38:-;;;:::i;420:26::-;;;:::i;714:822::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;714:822:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;452:25::-;;;:::i;2539:81:54:-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;519:26:38:-;;;-1:-1:-1;;;;;519:26:38;;:::o;3582:98:54:-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;2076:320:38:-;2371:9;;2346:44::o;2983:113:65:-;3043:7;3069:20;:18;:20::i;:::-;3062:27;;2983:113;:::o;5996:215:54:-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;681:26:38:-;;;;;;;;;:::o;1868:95::-;1937:19;1943:3;1948:7;1937:5;:19::i;:::-;1868:95;;:::o;1969:101::-;2041:22;2047:7;2056:6;2041:5;:22::i;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;483:30:38:-;;;-1:-1:-1;;;;;483:30:38;;:::o;2741:118:65:-;-1:-1:-1;;;;;2828:14:65;;2802:7;2828:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;2821:31;2741:118;-1:-1:-1;;2741:118:65:o;2733:85:54:-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;551:30:38:-;;;-1:-1:-1;;;;;551:30:38;;:::o;620:::-;;;;:::o;1542:320::-;1772:15;;;1789;1806:11;;1819;;1832:15;;1849:5;;-1:-1:-1;;;;;1772:15:38;;;;1789;;;;1806:11;;;;;1849:5;;1542:320;;;;;;:::o;588:26::-;;;;:::o;1920:760:65:-;2210:8;2191:15;:27;;2183:69;;;;;-1:-1:-1;;;2183:69:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:18;2318:16;;2336:5;2343:7;2352:6;2360:24;:7;:14;2368:5;-1:-1:-1;;;;;2360:14:65;-1:-1:-1;;;;;2360:14:65;;;;;;;;;;;;:22;:24::i;:::-;2307:88;;;;;;;;;;;-1:-1:-1;;;;;2307:88:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2284:121;;;;;;-1:-1:-1;;2431:28:65;2284:121;2431:16;:28::i;:::-;2416:43;;2470:14;2487:39;2512:4;2518:1;2521;2524;2487:24;:39::i;:::-;2470:56;;2554:5;-1:-1:-1;;;;;2544:15:65;:6;-1:-1:-1;;;;;2544:15:65;;2536:58;;;;;-1:-1:-1;;;2536:58:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2605:14:65;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;2641:32;2650:5;2657:7;2666:6;2641:8;:32::i;:::-;1920:760;;;;;;;;;;:::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;657:17:38:-;;;;;;:::o;420:26::-;;;-1:-1:-1;;;;;420:26:38;;:::o;714:822::-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;978:6:38::1;:13:::0;;-1:-1:-1;;978:13:38::1;;;::::0;;1014:50:::1;::::0;;-1:-1:-1;;;1014:50:38;;;;-1:-1:-1;;;;;1014:48:38;::::1;::::0;::::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:48;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;1014:50:38;1001:10:::1;:63:::0;;-1:-1:-1;;;;;;1001:63:38;;::::1;-1:-1:-1::0;;;;;1001:63:38;;::::1;;::::0;;;::::1;1074:34:::0;;;::::1;::::0;;::::1;;::::0;;1118:11:::1;:26:::0;;;::::1;::::0;;::::1;;::::0;;1154:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;1198:11:::1;:26:::0;;;1234:15:::1;:34:::0;;;1278:5:::1;:14:::0;;-1:-1:-1;;1278:14:38::1;::::0;::::1;;;::::0;;1302:56:::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;1014:50;1302:56:::0;;::::1;::::0;;;;1368:39;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1368:39:38;;::::1;::::0;1302:56;1417:46:::1;1302:56:::0;1368:39;1417:22:::1;:46::i;:::-;1473:29;1492:9;1473:18;:29::i;:::-;1512:17;1527:1;1512:14;:17::i;:::-;1410:1:57;;1426:14:::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;714:822:38;;;;;;;;:::o;452:25::-;;;-1:-1:-1;;;;;452:25:38;;:::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;2713:160:64:-;2766:7;2792:74;1476:95;;;;;;;;;;;;;;;;;;;2826:17;:15;:17::i;:::-;2845:20;:18;:20::i;:::-;2792:21;:74::i;938:176:67:-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;9005:410::-;-1:-1:-1;;;;;9088:21:54;;9080:67;;;;-1:-1:-1;;;9080:67:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9158:49;9179:7;9196:1;9200:6;9158:20;:49::i;:::-;9239:68;9262:6;9239:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9239:18:54;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;9218:18:54;;;;;;:9;:18;;;;;:89;9332:12;;:24;;9349:6;9332:24;:16;:24;:::i;:::-;9317:12;:39;9371:37;;;;;;;;9397:1;;-1:-1:-1;;;;;9371:37:54;;;;;;;;;;;;9005:410;;:::o;1184:112:68:-;1275:14;;1184:112::o;3745:175:64:-;3814:7;3879:20;:18;:20::i;:::-;3901:10;3850:62;;;;;;-1:-1:-1;;;3850:62:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3840:73;;;;;;3833:80;;3745:175;;;:::o;2015:1486:63:-;2138:7;3066:66;3052:80;;;3031:161;;;;-1:-1:-1;;;3031:161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3210:1;:7;;3215:2;3210:7;:18;;;;3221:1;:7;;3226:2;3221:7;3210:18;3202:65;;;;-1:-1:-1;;;3202:65:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3379:24;;;3362:14;3379:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3362:14;;3379:24;;;;;;;-1:-1:-1;;3379:24:63;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3379:24:63;;-1:-1:-1;;3379:24:63;;;-1:-1:-1;;;;;;;3421:20:63;;3413:57;;;;;-1:-1:-1;;;3413:57:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;3488:6;2015:1486;-1:-1:-1;;;;;2015:1486:63:o;1302:178:68:-;1454:19;;1472:1;1454:19;;;1302:178::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;:::o;2296:178:54:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;1421:200:65:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1500:26:65::1;:24;:26::i;:::-;1536:34;1560:4;1536:34;;;;;;;;;;;;;-1:-1:-1::0;;;1536:34:65::1;;::::0;:23:::1;:34::i;:::-;1580;1609:4;1580:28;:34::i;:::-;1426:14:57::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1421:200:65;;:::o;10531:88:54:-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;4482:103:64:-;4566:12;;4482:103;:::o;4824:109::-;4911:15;;4824:109;:::o;2879:241::-;3011:7;3058:8;3068:4;3074:7;3083:13;:11;:13::i;:::-;3047:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3106:4;3047:65;;;;;;;;;;;;;;;;;;;;;;;;3037:76;;;;;;2879:241;-1:-1:-1;;;;2879:241:64:o;1385:134:67:-;1443:7;1469:43;1473:1;1476;1469:43;;;;;;;;;;;;;;;;;:3;:43::i;799:59:55:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1426:14;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;799:59:55;:::o;2335:292:64:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2463:22:64;;::::1;::::0;;::::1;::::0;;;;2519:25;;;;::::1;::::0;;;;2554:12:::1;:25:::0;;;;2589:15:::1;:31:::0;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;2335:292:64;;;:::o;1627:232:65:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1735:117:65::1;::::0;;::::1;;::::0;::::1;;::::0;;;;;::::1;::::0;;;1716:16:::1;:136:::0;-1:-1:-1;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1627:232:65;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ },
+ "methodIdentifiers": {
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "addressBook()": "f5887cdd",
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "burnOtoken(address,uint256)": "56d878f7",
+ "collateralAsset()": "aabaecd6",
+ "controller()": "f77c4791",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "expiryTimestamp()": "ade6e2aa",
+ "getChainId()": "3408e470",
+ "getOtokenDetails()": "af0968fc",
+ "increaseAllowance(address,uint256)": "39509351",
+ "init(address,address,address,address,uint256,uint256,bool)": "f630df34",
+ "inited()": "43c885ba",
+ "isPut()": "f3c274a6",
+ "mintOtoken(address,uint256)": "51b0a410",
+ "name()": "06fdde03",
+ "nonces(address)": "7ecebe00",
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
+ "strikeAsset()": "17d69bc8",
+ "strikePrice()": "c52987cf",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd",
+ "underlyingAsset()": "7158da7c"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controller\",\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expiryTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOtokenDetails\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inited\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPut\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"amount\",\"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\":[],\"name\":\"strikeAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strikePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Otoken inherits ERC20PermitUpgradeable because we need to use the init instead of constructor.\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{},\"notice\":\"SPDX-License-Identifier: UNLICENSED\"}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockOtoken.sol\":\"MockOtoken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/mocks/MockOtoken.sol\":{\"keccak256\":\"0x2cf9a56dcbeb7dcd7570062bda9eaaa0170c4ba688dc304f4e032103f5dd47d0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://91a75af6f86b2a54eec5c4a48e56123c04c6c85928b30d286d23a45762eef78d\",\"dweb:/ipfs/QmVHuRbP2Hx3tfpix36hBforfG4iZJvcUwb116fuHEimET\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0x089264e9f61815e40a3acf85cb1077e81be8aab6728bd423cf52714e1fbf05cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6e77372ba9c9604248fb33b0e23f1d6969ad60aeaa0e8f6aa94570802a73cc7\",\"dweb:/ipfs/QmTtgkYETk9ZNXRsHZJscsEJUXPsckNfZDkfVXjzCHrLE5\"]},\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":{\"keccak256\":\"0x272ded2b13c715a655b575e51a04aa0d1d8205603bed6c8825e99b78b94b40bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e88cc43e187de68a698561c5fc6bbe50a2847c3fe3a15571413b5f5f9779400a\",\"dweb:/ipfs/QmYRcBveKTjqrrPpbfgpZwcCQay2mN2Pww5pvCUpniS54F\"]},\"contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xb3a655c9ab3da27ebe99ef47b4b95f699fa02b99c8911aa1f32c906e48e429fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adbdc052be7e3fe0350a8e634f4cd9114386ec25411c3b8425fad5e4501f7cae\",\"dweb:/ipfs/QmbbWNivd3woPq1rDgJYxiL7mVBT9auABvkrechyJ1JjDt\"]},\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]},\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0xf959d721bc9136a6e59e82953c1c5024996dfd00a68a17d37f7fc42651d855b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://25bdcbfdac49598b552c67be6b89dc87a46ac177330da3b0c4854ea31019da1e\",\"dweb:/ipfs/QmaWctiuA3r1iejQ2JBCbkip4NEUq9zQ4CHXZuFYRsyCRP\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockPermitERC20.sol": {
+ "MockPermitERC20": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "_symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8",
+ "name": "_decimals",
+ "type": "uint8"
+ }
+ ],
+ "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": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "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": [
+ {
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "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": "amount",
+ "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": [],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040523480156200001157600080fd5b506040516200186738038062001867833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052602001519150620001b9905083836001600160e01b03620001ea16565b620001cd836001600160e01b03620002d816565b620001e1816001600160e01b03620003de16565b505050620006f0565b600054610100900460ff16806200020f57506200020f6001600160e01b03620003f416565b806200021e575060005460ff16155b6200025b5760405162461bcd60e51b815260040180806020018281038252602e81526020018062001839602e913960400191505060405180910390fd5b600054610100900460ff1615801562000287576000805460ff1961ff0019909116610100171660011790555b82516200029c9060689060208601906200064e565b508151620002b29060699060208501906200064e565b50606a805460ff191660121790558015620002d3576000805461ff00191690555b505050565b600054610100900460ff1680620002fd5750620002fd6001600160e01b03620003f416565b806200030c575060005460ff16155b620003495760405162461bcd60e51b815260040180806020018281038252602e81526020018062001839602e913960400191505060405180910390fd5b600054610100900460ff1615801562000375576000805460ff1961ff0019909116610100171660011790555b620003886001600160e01b03620003fb16565b620003b382604051806040016040528060018152602001603160f81b815250620004ae60201b60201c565b620003c7826001600160e01b036200057f16565b8015620003da576000805461ff00191690555b5050565b606a805460ff191660ff92909216919091179055565b303b155b90565b600054610100900460ff1680620004205750620004206001600160e01b03620003f416565b806200042f575060005460ff16155b6200046c5760405162461bcd60e51b815260040180806020018281038252602e81526020018062001839602e913960400191505060405180910390fd5b600054610100900460ff1615801562000498576000805460ff1961ff0019909116610100171660011790555b8015620004ab576000805461ff00191690555b50565b600054610100900460ff1680620004d35750620004d36001600160e01b03620003f416565b80620004e2575060005460ff16155b6200051f5760405162461bcd60e51b815260040180806020018281038252602e81526020018062001839602e913960400191505060405180910390fd5b600054610100900460ff161580156200054b576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015620002d3576000805461ff0019169055505050565b600054610100900460ff1680620005a45750620005a46001600160e01b03620003f416565b80620005b3575060005460ff16155b620005f05760405162461bcd60e51b815260040180806020018281038252602e81526020018062001839602e913960400191505060405180910390fd5b600054610100900460ff161580156200061c576000805460ff1961ff0019909116610100171660011790555b604051806052620017e7823960405190819003605201902060cc55508015620003da576000805461ff00191690555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200069157805160ff1916838001178555620006c1565b82800160010185558215620006c1579182015b82811115620006c1578251825591602001919060010190620006a4565b50620006cf929150620006d3565b5090565b620003f891905b80821115620006cf5760008155600101620006da565b6110e780620007006000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f1911610097578063a457c2d711610066578063a457c2d7146102db578063a9059cbb14610307578063d505accf14610333578063dd62ed3e14610384576100f5565b806340c10f191461025957806370a08231146102875780637ecebe00146102ad57806395d89b41146102d3576100f5565b806323b872dd116100d357806323b872dd146101d1578063313ce567146102075780633644e51514610225578063395093511461022d576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101b7575b600080fd5b6101026103b2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a36004803603604081101561018d57600080fd5b506001600160a01b038135169060200135610448565b604080519115158252519081900360200190f35b6101bf610465565b60408051918252519081900360200190f35b6101a3600480360360608110156101e757600080fd5b506001600160a01b0381358116916020810135909116906040013561046b565b61020f6104f8565b6040805160ff9092168252519081900360200190f35b6101bf610501565b6101a36004803603604081101561024357600080fd5b506001600160a01b038135169060200135610510565b6102856004803603604081101561026f57600080fd5b506001600160a01b038135169060200135610564565b005b6101bf6004803603602081101561029d57600080fd5b50356001600160a01b0316610572565b6101bf600480360360208110156102c357600080fd5b50356001600160a01b031661058d565b6101026105b4565b6101a3600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610615565b6101a36004803603604081101561031d57600080fd5b506001600160a01b038135169060200135610683565b610285600480360360e081101561034957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610697565b6101bf6004803603604081101561039a57600080fd5b506001600160a01b038135811691602001351661082f565b60688054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561043e5780601f106104135761010080835404028352916020019161043e565b820191906000526020600020905b81548152906001019060200180831161042157829003601f168201915b5050505050905090565b600061045c61045561085a565b848461085e565b50600192915050565b60675490565b600061047884848461094a565b6104ee8461048461085a565b6104e98560405180606001604052806028815260200161101c602891396001600160a01b038a166000908152606660205260408120906104c261085a565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610ab316565b61085e565b5060019392505050565b606a5460ff1690565b600061050b610b4a565b905090565b600061045c61051d61085a565b846104e9856066600061052e61085a565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610b7d16565b61056e8282610bde565b5050565b6001600160a01b031660009081526065602052604090205490565b6001600160a01b038116600090815260cb602052604081206105ae90610cdc565b92915050565b60698054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561043e5780601f106104135761010080835404028352916020019161043e565b600061045c61062261085a565b846104e98560405180606001604052806025815260200161108d602591396066600061064c61085a565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610ab316565b600061045c61069061085a565b848461094a565b834211156106ec576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc5488888861072160cb60008e6001600160a01b03166001600160a01b03168152602001908152602001600020610cdc565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e090910190915280519101209050600061077f82610ce0565b9050600061078f82878787610d2c565b9050896001600160a01b0316816001600160a01b0316146107f7576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb6020526040902061081890610ea6565b6108238a8a8a61085e565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166108a35760405162461bcd60e51b81526004018080602001828103825260248152602001806110696024913960400191505060405180910390fd5b6001600160a01b0382166108e85760405162461bcd60e51b8152600401808060200182810382526022815260200180610f3e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661098f5760405162461bcd60e51b81526004018080602001828103825260258152602001806110446025913960400191505060405180910390fd5b6001600160a01b0382166109d45760405162461bcd60e51b8152600401808060200182810382526023815260200180610f1b6023913960400191505060405180910390fd5b6109df838383610eaf565b610a2281604051806060016040528060268152602001610f60602691396001600160a01b038616600090815260656020526040902054919063ffffffff610ab316565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610a57908263ffffffff610b7d16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610b425760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578181015183820152602001610aef565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061050b6040518080610fca6052913960520190506040518091039020610b70610eb4565b610b78610eba565b610ec0565b600082820183811015610bd7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610c39576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610c4560008383610eaf565b606754610c58908263ffffffff610b7d16565b6067556001600160a01b038216600090815260656020526040902054610c84908263ffffffff610b7d16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b5490565b6000610cea610b4a565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610d8d5760405162461bcd60e51b8152600401808060200182810382526022815260200180610f866022913960400191505060405180910390fd5b8360ff16601b1480610da257508360ff16601c145b610ddd5760405162461bcd60e51b8152600401808060200182810382526022815260200180610fa86022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa158015610e35573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e9d576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b505050565b60975490565b60985490565b6000838383610ecd610f16565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b469056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122038329b2de2ff804db38fb7a7b585bc74d24911e2fbdfe47aab1e96db9fbdeff064736f6c634300060a00335065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1867 CODESIZE SUB DUP1 PUSH3 0x1867 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD MLOAD SWAP2 POP PUSH3 0x1B9 SWAP1 POP DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x1EA AND JUMP JUMPDEST PUSH3 0x1CD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2D8 AND JUMP JUMPDEST PUSH3 0x1E1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3DE AND JUMP JUMPDEST POP POP POP PUSH3 0x6F0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x20F JUMPI POP PUSH3 0x20F PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3F4 AND JUMP JUMPDEST DUP1 PUSH3 0x21E JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x25B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0x1839 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x287 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH3 0x29C SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x64E JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x2B2 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x64E JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH3 0x2D3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x2FD JUMPI POP PUSH3 0x2FD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3F4 AND JUMP JUMPDEST DUP1 PUSH3 0x30C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x349 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0x1839 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x375 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH3 0x388 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3FB AND JUMP JUMPDEST PUSH3 0x3B3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH3 0x4AE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x3C7 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x57F AND JUMP JUMPDEST DUP1 ISZERO PUSH3 0x3DA JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x420 JUMPI POP PUSH3 0x420 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3F4 AND JUMP JUMPDEST DUP1 PUSH3 0x42F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x46C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0x1839 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x498 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH3 0x4AB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x4D3 JUMPI POP PUSH3 0x4D3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3F4 AND JUMP JUMPDEST DUP1 PUSH3 0x4E2 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x51F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0x1839 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x54B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH3 0x2D3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x5A4 JUMPI POP PUSH3 0x5A4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x3F4 AND JUMP JUMPDEST DUP1 PUSH3 0x5B3 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x5F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0x1839 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x61C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH3 0x17E7 DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH3 0x3DA JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x691 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x6C1 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x6C1 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x6C1 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x6A4 JUMP JUMPDEST POP PUSH3 0x6CF SWAP3 SWAP2 POP PUSH3 0x6D3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x3F8 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x6CF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x6DA JUMP JUMPDEST PUSH2 0x10E7 DUP1 PUSH3 0x700 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 0x40C10F19 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x384 JUMPI PUSH2 0xF5 JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2D3 JUMPI PUSH2 0xF5 JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22D JUMPI PUSH2 0xF5 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x13C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x124 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x169 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1BF PUSH2 0x465 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x46B JUMP JUMPDEST PUSH2 0x20F PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1BF PUSH2 0x501 JUMP JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x510 JUMP JUMPDEST PUSH2 0x285 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x564 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x572 JUMP JUMPDEST PUSH2 0x1BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x58D JUMP JUMPDEST PUSH2 0x102 PUSH2 0x5B4 JUMP JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x615 JUMP JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x285 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x349 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x697 JUMP JUMPDEST PUSH2 0x1BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x82F JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x43E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x413 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x43E 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 0x421 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x455 PUSH2 0x85A JUMP JUMPDEST DUP5 DUP5 PUSH2 0x85E JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x478 DUP5 DUP5 DUP5 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x4EE DUP5 PUSH2 0x484 PUSH2 0x85A JUMP JUMPDEST PUSH2 0x4E9 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x101C PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4C2 PUSH2 0x85A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xAB3 AND JUMP JUMPDEST PUSH2 0x85E JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x50B PUSH2 0xB4A JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x51D PUSH2 0x85A JUMP JUMPDEST DUP5 PUSH2 0x4E9 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x52E PUSH2 0x85A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH2 0x56E DUP3 DUP3 PUSH2 0xBDE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x5AE SWAP1 PUSH2 0xCDC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x43E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x413 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x622 PUSH2 0x85A JUMP JUMPDEST DUP5 PUSH2 0x4E9 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x108D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x64C PUSH2 0x85A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xAB3 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x690 PUSH2 0x85A JUMP JUMPDEST DUP5 DUP5 PUSH2 0x94A JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x721 PUSH1 0xCB PUSH1 0x0 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 PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x77F DUP3 PUSH2 0xCE0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x78F DUP3 DUP8 DUP8 DUP8 PUSH2 0xD2C JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x7F7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x818 SWAP1 PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x823 DUP11 DUP11 DUP11 PUSH2 0x85E JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x8A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x8E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF3E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x98F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1044 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF1B PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9DF DUP4 DUP4 DUP4 PUSH2 0xEAF JUMP JUMPDEST PUSH2 0xA22 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF60 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xAB3 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA57 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xB42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB07 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAEF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB34 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x50B PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0xFCA PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0xB70 PUSH2 0xEB4 JUMP JUMPDEST PUSH2 0xB78 PUSH2 0xEBA JUMP JUMPDEST PUSH2 0xEC0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC39 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC45 PUSH1 0x0 DUP4 DUP4 PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0xC58 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC84 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCEA PUSH2 0xB4A JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0xD8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF86 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0xDA2 JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFA8 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE35 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 0xE9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0xECD PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 GASLIMIT NUMBER DIFFICULTY MSTORE8 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202776272076616C7565 GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212203832 SWAP12 0x2D 0xE2 SELFDESTRUCT DUP1 0x4D 0xB3 DUP16 0xB7 0xA7 0xB5 DUP6 0xBC PUSH21 0xD24911E2FBDFE47AAB1E96DB9FBDEFF064736F6C63 NUMBER STOP MOD EXP STOP CALLER POP PUSH6 0x726D69742861 PUSH5 0x6472657373 KECCAK256 PUSH16 0x776E65722C6164647265737320737065 PUSH15 0x6465722C75696E743235362076616C PUSH22 0x652C75696E74323536206E6F6E63652C75696E743235 CALLDATASIZE KECCAK256 PUSH5 0x6561646C69 PUSH15 0x6529436F6E747261637420696E7374 PUSH2 0x6E63 PUSH6 0x206861732061 PUSH13 0x7265616479206265656E20696E PUSH10 0x7469616C697A65640000 ",
+ "sourceMap": "175:393:39:-:0;;;232:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;232:235:39;;;;;;;;;;-1:-1:-1;232:235:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;232:235:39;;;;;;;;;;-1:-1:-1;232:235:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;232:235:39;;;;;;-1:-1:-1;352:38:39;;-1:-1:-1;375:5:39;382:7;-1:-1:-1;;;;;352:22:39;:38;:::i;:::-;400:25;419:5;-1:-1:-1;;;;;400:18:39;:25;:::i;:::-;435;450:9;-1:-1:-1;;;;;435:14:39;:25;:::i;:::-;232:235;;;175:393;;2296:178:54;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;1421:200:65:-;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1500:26:65::1;-1:-1:-1::0;;;;;1500:24:65::1;:26:::0;:::i:1;:::-;1536:34;1560:4;1536:34;;;;;;;;;;;;;-1:-1:-1::0;;;1536:34:65::1;;::::0;:23:::1;;;:34;;:::i;:::-;1580;1609:4:::0;-1:-1:-1;;;;;1580:28:65::1;:34:::0;:::i:1;:::-;1426:14:57::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;1421:200:65;;:::o;10531:88:54:-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;;:::o;799:59:55:-;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1426:14;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;799:59:55;:::o;2335:292:64:-;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2463:22:64;;::::1;::::0;;::::1;::::0;;;;2519:25;;;;::::1;::::0;;;;2554:12:::1;:25:::0;;;;2589:15:::1;:31:::0;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;2335:292:64;;;:::o;1627:232:65:-;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1735:117:65::1;::::0;;::::1;;::::0;::::1;;::::0;;;;;::::1;::::0;;;1716:16:::1;:136:::0;-1:-1:-1;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1627:232:65;;:::o;175:393:39:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;175:393:39;;;-1:-1:-1;175:393:39;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f1911610097578063a457c2d711610066578063a457c2d7146102db578063a9059cbb14610307578063d505accf14610333578063dd62ed3e14610384576100f5565b806340c10f191461025957806370a08231146102875780637ecebe00146102ad57806395d89b41146102d3576100f5565b806323b872dd116100d357806323b872dd146101d1578063313ce567146102075780633644e51514610225578063395093511461022d576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101b7575b600080fd5b6101026103b2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a36004803603604081101561018d57600080fd5b506001600160a01b038135169060200135610448565b604080519115158252519081900360200190f35b6101bf610465565b60408051918252519081900360200190f35b6101a3600480360360608110156101e757600080fd5b506001600160a01b0381358116916020810135909116906040013561046b565b61020f6104f8565b6040805160ff9092168252519081900360200190f35b6101bf610501565b6101a36004803603604081101561024357600080fd5b506001600160a01b038135169060200135610510565b6102856004803603604081101561026f57600080fd5b506001600160a01b038135169060200135610564565b005b6101bf6004803603602081101561029d57600080fd5b50356001600160a01b0316610572565b6101bf600480360360208110156102c357600080fd5b50356001600160a01b031661058d565b6101026105b4565b6101a3600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610615565b6101a36004803603604081101561031d57600080fd5b506001600160a01b038135169060200135610683565b610285600480360360e081101561034957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610697565b6101bf6004803603604081101561039a57600080fd5b506001600160a01b038135811691602001351661082f565b60688054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561043e5780601f106104135761010080835404028352916020019161043e565b820191906000526020600020905b81548152906001019060200180831161042157829003601f168201915b5050505050905090565b600061045c61045561085a565b848461085e565b50600192915050565b60675490565b600061047884848461094a565b6104ee8461048461085a565b6104e98560405180606001604052806028815260200161101c602891396001600160a01b038a166000908152606660205260408120906104c261085a565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610ab316565b61085e565b5060019392505050565b606a5460ff1690565b600061050b610b4a565b905090565b600061045c61051d61085a565b846104e9856066600061052e61085a565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610b7d16565b61056e8282610bde565b5050565b6001600160a01b031660009081526065602052604090205490565b6001600160a01b038116600090815260cb602052604081206105ae90610cdc565b92915050565b60698054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561043e5780601f106104135761010080835404028352916020019161043e565b600061045c61062261085a565b846104e98560405180606001604052806025815260200161108d602591396066600061064c61085a565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610ab316565b600061045c61069061085a565b848461094a565b834211156106ec576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc5488888861072160cb60008e6001600160a01b03166001600160a01b03168152602001908152602001600020610cdc565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e090910190915280519101209050600061077f82610ce0565b9050600061078f82878787610d2c565b9050896001600160a01b0316816001600160a01b0316146107f7576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb6020526040902061081890610ea6565b6108238a8a8a61085e565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166108a35760405162461bcd60e51b81526004018080602001828103825260248152602001806110696024913960400191505060405180910390fd5b6001600160a01b0382166108e85760405162461bcd60e51b8152600401808060200182810382526022815260200180610f3e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661098f5760405162461bcd60e51b81526004018080602001828103825260258152602001806110446025913960400191505060405180910390fd5b6001600160a01b0382166109d45760405162461bcd60e51b8152600401808060200182810382526023815260200180610f1b6023913960400191505060405180910390fd5b6109df838383610eaf565b610a2281604051806060016040528060268152602001610f60602691396001600160a01b038616600090815260656020526040902054919063ffffffff610ab316565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610a57908263ffffffff610b7d16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610b425760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578181015183820152602001610aef565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061050b6040518080610fca6052913960520190506040518091039020610b70610eb4565b610b78610eba565b610ec0565b600082820183811015610bd7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610c39576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610c4560008383610eaf565b606754610c58908263ffffffff610b7d16565b6067556001600160a01b038216600090815260656020526040902054610c84908263ffffffff610b7d16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b5490565b6000610cea610b4a565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610d8d5760405162461bcd60e51b8152600401808060200182810382526022815260200180610f866022913960400191505060405180910390fd5b8360ff16601b1480610da257508360ff16601c145b610ddd5760405162461bcd60e51b8152600401808060200182810382526022815260200180610fa86022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa158015610e35573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e9d576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b505050565b60975490565b60985490565b6000838383610ecd610f16565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b469056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122038329b2de2ff804db38fb7a7b585bc74d24911e2fbdfe47aab1e96db9fbdeff064736f6c634300060a0033",
+ "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 0x40C10F19 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x384 JUMPI PUSH2 0xF5 JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2D3 JUMPI PUSH2 0xF5 JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22D JUMPI PUSH2 0xF5 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x13C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x124 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x169 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1BF PUSH2 0x465 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x46B JUMP JUMPDEST PUSH2 0x20F PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1BF PUSH2 0x501 JUMP JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x510 JUMP JUMPDEST PUSH2 0x285 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x564 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x572 JUMP JUMPDEST PUSH2 0x1BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x58D JUMP JUMPDEST PUSH2 0x102 PUSH2 0x5B4 JUMP JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x615 JUMP JUMPDEST PUSH2 0x1A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x285 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x349 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x697 JUMP JUMPDEST PUSH2 0x1BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x82F JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x43E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x413 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x43E 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 0x421 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x455 PUSH2 0x85A JUMP JUMPDEST DUP5 DUP5 PUSH2 0x85E JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x478 DUP5 DUP5 DUP5 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x4EE DUP5 PUSH2 0x484 PUSH2 0x85A JUMP JUMPDEST PUSH2 0x4E9 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x101C PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4C2 PUSH2 0x85A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xAB3 AND JUMP JUMPDEST PUSH2 0x85E JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x50B PUSH2 0xB4A JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x51D PUSH2 0x85A JUMP JUMPDEST DUP5 PUSH2 0x4E9 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x52E PUSH2 0x85A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH2 0x56E DUP3 DUP3 PUSH2 0xBDE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x5AE SWAP1 PUSH2 0xCDC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x43E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x413 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x622 PUSH2 0x85A JUMP JUMPDEST DUP5 PUSH2 0x4E9 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x108D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x64C PUSH2 0x85A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xAB3 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45C PUSH2 0x690 PUSH2 0x85A JUMP JUMPDEST DUP5 DUP5 PUSH2 0x94A JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x721 PUSH1 0xCB PUSH1 0x0 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 PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x77F DUP3 PUSH2 0xCE0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x78F DUP3 DUP8 DUP8 DUP8 PUSH2 0xD2C JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x7F7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x818 SWAP1 PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x823 DUP11 DUP11 DUP11 PUSH2 0x85E JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x8A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x8E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF3E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x98F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1044 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF1B PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9DF DUP4 DUP4 DUP4 PUSH2 0xEAF JUMP JUMPDEST PUSH2 0xA22 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF60 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xAB3 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA57 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xB42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB07 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAEF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB34 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x50B PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0xFCA PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0xB70 PUSH2 0xEB4 JUMP JUMPDEST PUSH2 0xB78 PUSH2 0xEBA JUMP JUMPDEST PUSH2 0xEC0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC39 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC45 PUSH1 0x0 DUP4 DUP4 PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0xC58 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC84 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB7D AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCEA PUSH2 0xB4A JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0xD8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF86 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0xDA2 JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFA8 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE35 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 0xE9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0xECD PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 GASLIMIT NUMBER DIFFICULTY MSTORE8 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202776272076616C7565 GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212203832 SWAP12 0x2D 0xE2 SELFDESTRUCT DUP1 0x4D 0xB3 DUP16 0xB7 0xA7 0xB5 DUP6 0xBC PUSH21 0xD24911E2FBDFE47AAB1E96DB9FBDEFF064736F6C63 NUMBER STOP MOD EXP STOP CALLER ",
+ "sourceMap": "175:393:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3582:98;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2983:113:65;;;:::i;5996:215:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;473:93:39:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;473:93:39;;;;;;;;:::i;:::-;;3738:117:54;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2741:118:65:-;;;;;;;;;;;;;;;;-1:-1:-1;2741:118:65;-1:-1:-1;;;;;2741:118:65;;:::i;2733:85:54:-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;1920:760:65:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1920:760:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4288:149:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;2539:81::-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;3582:98::-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;2983:113:65:-;3043:7;3069:20;:18;:20::i;:::-;3062:27;;2983:113;:::o;5996:215:54:-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;473:93:39:-;537:22;543:7;552:6;537:5;:22::i;:::-;473:93;;:::o;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2741:118:65:-;-1:-1:-1;;;;;2828:14:65;;2802:7;2828:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;2821:31;2741:118;-1:-1:-1;;2741:118:65:o;2733:85:54:-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;1920:760:65:-;2210:8;2191:15;:27;;2183:69;;;;;-1:-1:-1;;;2183:69:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:18;2318:16;;2336:5;2343:7;2352:6;2360:24;:7;:14;2368:5;-1:-1:-1;;;;;2360:14:65;-1:-1:-1;;;;;2360:14:65;;;;;;;;;;;;:22;:24::i;:::-;2307:88;;;;;;;;;;;-1:-1:-1;;;;;2307:88:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2284:121;;;;;;-1:-1:-1;;2431:28:65;2284:121;2431:16;:28::i;:::-;2416:43;;2470:14;2487:39;2512:4;2518:1;2521;2524;2487:24;:39::i;:::-;2470:56;;2554:5;-1:-1:-1;;;;;2544:15:65;:6;-1:-1:-1;;;;;2544:15:65;;2536:58;;;;;-1:-1:-1;;;2536:58:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2605:14:65;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;2641:32;2650:5;2657:7;2666:6;2641:8;:32::i;:::-;1920:760;;;;;;;;;;:::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;2713:160:64:-;2766:7;2792:74;1476:95;;;;;;;;;;;;;;;;;;;2826:17;:15;:17::i;:::-;2845:20;:18;:20::i;:::-;2792:21;:74::i;938:176:67:-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;1184:112:68:-;1275:14;;1184:112::o;3745:175:64:-;3814:7;3879:20;:18;:20::i;:::-;3901:10;3850:62;;;;;;-1:-1:-1;;;3850:62:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3840:73;;;;;;3833:80;;3745:175;;;:::o;2015:1486:63:-;2138:7;3066:66;3052:80;;;3031:161;;;;-1:-1:-1;;;3031:161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3210:1;:7;;3215:2;3210:7;:18;;;;3221:1;:7;;3226:2;3221:7;3210:18;3202:65;;;;-1:-1:-1;;;3202:65:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3379:24;;;3362:14;3379:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3362:14;;3379:24;;;;;;;-1:-1:-1;;3379:24:63;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3379:24:63;;-1:-1:-1;;3379:24:63;;;-1:-1:-1;;;;;;;3421:20:63;;3413:57;;;;;-1:-1:-1;;;3413:57:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;3488:6;2015:1486;-1:-1:-1;;;;;2015:1486:63:o;1302:178:68:-;1454:19;;1472:1;1454:19;;;1302:178::o;11206:121:54:-;;;;:::o;4482:103:64:-;4566:12;;4482:103;:::o;4824:109::-;4911:15;;4824:109;:::o;2879:241::-;3011:7;3058:8;3068:4;3074:7;3083:13;:11;:13::i;:::-;3047:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3106:4;3047:65;;;;;;;;;;;;;;;;;;;;;;;;3037:76;;;;;;2879:241;-1:-1:-1;;;;2879:241:64:o;3926:320::-;4221:9;;4196:44::o"
+ },
+ "methodIdentifiers": {
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "increaseAllowance(address,uint256)": "39509351",
+ "mint(address,uint256)": "40c10f19",
+ "name()": "06fdde03",
+ "nonces(address)": "7ecebe00",
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"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\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":[{\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"amount\",\"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\":[],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockPermitERC20.sol\":\"MockPermitERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/mocks/MockPermitERC20.sol\":{\"keccak256\":\"0x00222b0c2a443290c345cf77549e1eaffecf0fc99d038601a2b4a3d83cae18d3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://1d28b3ee12ad060dfacdd105d9629551e8f079914f4949aa2cf1ec6a2e0f812f\",\"dweb:/ipfs/QmWr4GXdq7fm8EzSQ6BZj31iaS1uzctENb5QYnzSfWWdWf\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0x089264e9f61815e40a3acf85cb1077e81be8aab6728bd423cf52714e1fbf05cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6e77372ba9c9604248fb33b0e23f1d6969ad60aeaa0e8f6aa94570802a73cc7\",\"dweb:/ipfs/QmTtgkYETk9ZNXRsHZJscsEJUXPsckNfZDkfVXjzCHrLE5\"]},\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":{\"keccak256\":\"0x272ded2b13c715a655b575e51a04aa0d1d8205603bed6c8825e99b78b94b40bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e88cc43e187de68a698561c5fc6bbe50a2847c3fe3a15571413b5f5f9779400a\",\"dweb:/ipfs/QmYRcBveKTjqrrPpbfgpZwcCQay2mN2Pww5pvCUpniS54F\"]},\"contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xb3a655c9ab3da27ebe99ef47b4b95f699fa02b99c8911aa1f32c906e48e429fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adbdc052be7e3fe0350a8e634f4cd9114386ec25411c3b8425fad5e4501f7cae\",\"dweb:/ipfs/QmbbWNivd3woPq1rDgJYxiL7mVBT9auABvkrechyJ1JjDt\"]},\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]},\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0xf959d721bc9136a6e59e82953c1c5024996dfd00a68a17d37f7fc42651d855b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://25bdcbfdac49598b552c67be6b89dc87a46ac177330da3b0c4854ea31019da1e\",\"dweb:/ipfs/QmaWctiuA3r1iejQ2JBCbkip4NEUq9zQ4CHXZuFYRsyCRP\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockPricer.sol": {
+ "MockPricer": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "asset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getHistoricalPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPriceInOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_price",
+ "type": "uint256"
+ }
+ ],
+ "name": "setPrice",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b5060405161028b38038061028b8339818101604052604081101561003357600080fd5b508051602090910151600280546001600160a01b039384166001600160a01b031991821617909155600080549390921692169190911790556102118061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806338d52e0f146100675780635c5ebfaf1461008b5780637dc0d1d0146100b057806391b7f5ed146100b857806398d5fdca146100d5578063eec377c0146100ef575b600080fd5b61006f610131565b604080516001600160a01b039092168252519081900360200190f35b6100ae600480360360408110156100a157600080fd5b5080359060200135610140565b005b61006f6101b8565b6100ae600480360360208110156100ce57600080fd5b50356101c7565b6100dd6101cc565b60408051918252519081900360200190f35b6101186004803603602081101561010557600080fd5b503569ffffffffffffffffffff166101d2565b6040805192835260208301919091528051918290030190f35b6002546001600160a01b031681565b600080546002546040805163ee53140960e01b81526001600160a01b03928316600482015260248101879052604481018690529051919092169263ee531409926064808201939182900301818387803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031681565b600155565b60015490565b6001544291509156fea26469706673582212201d8f87cbfdc8b057bbfdb9ff1f6735ee06f9cce6527713892bbf4eaedf4d302b64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x28B CODESIZE SUB DUP1 PUSH2 0x28B DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x211 DUP1 PUSH2 0x7A 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 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x38D52E0F EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x5C5EBFAF EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0x91B7F5ED EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0xEF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x131 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x140 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6F PUSH2 0x1B8 JUMP JUMPDEST PUSH2 0xAE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C7 JUMP JUMPDEST PUSH2 0xDD PUSH2 0x1CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x118 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD TIMESTAMP SWAP2 POP SWAP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR DUP16 DUP8 0xCB REVERT 0xC8 0xB0 JUMPI 0xBB REVERT 0xB9 SELFDESTRUCT 0x1F PUSH8 0x35EE06F9CCE65277 SGT DUP10 0x2B 0xBF 0x4E 0xAE 0xDF 0x4D ADDRESS 0x2B PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "132:700:40:-:0;;;249:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;249:126:40;;;;;;;311:5;:14;;-1:-1:-1;;;;;311:14:40;;;-1:-1:-1;;;;;;311:14:40;;;;;;;:5;335:33;;;;;;;;;;;;;;132:700;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c806338d52e0f146100675780635c5ebfaf1461008b5780637dc0d1d0146100b057806391b7f5ed146100b857806398d5fdca146100d5578063eec377c0146100ef575b600080fd5b61006f610131565b604080516001600160a01b039092168252519081900360200190f35b6100ae600480360360408110156100a157600080fd5b5080359060200135610140565b005b61006f6101b8565b6100ae600480360360208110156100ce57600080fd5b50356101c7565b6100dd6101cc565b60408051918252519081900360200190f35b6101186004803603602081101561010557600080fd5b503569ffffffffffffffffffff166101d2565b6040805192835260208301919091528051918290030190f35b6002546001600160a01b031681565b600080546002546040805163ee53140960e01b81526001600160a01b03928316600482015260248101879052604481018690529051919092169263ee531409926064808201939182900301818387803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031681565b600155565b60015490565b6001544291509156fea26469706673582212201d8f87cbfdc8b057bbfdb9ff1f6735ee06f9cce6527713892bbf4eaedf4d302b64736f6c634300060a0033",
+ "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 0x38D52E0F EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x5C5EBFAF EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0x91B7F5ED EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0xEF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x131 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x140 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6F PUSH2 0x1B8 JUMP JUMPDEST PUSH2 0xAE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C7 JUMP JUMPDEST PUSH2 0xDD PUSH2 0x1CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x118 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD TIMESTAMP SWAP2 POP SWAP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR DUP16 DUP8 0xCB REVERT 0xC8 0xB0 JUMPI 0xBB REVERT 0xB9 SELFDESTRUCT 0x1F PUSH8 0x35EE06F9CCE65277 SGT DUP10 0x2B 0xBF 0x4E 0xAE 0xDF 0x4D ADDRESS 0x2B PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "132:700:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:20;;;:::i;:::-;;;;-1:-1:-1;;;;;222:20:40;;;;;;;;;;;;;;548:154;;;;;;;;;;;;;;;;-1:-1:-1;548:154:40;;;;;;;:::i;:::-;;158:29;;;:::i;381:74::-;;;;;;;;;;;;;;;;-1:-1:-1;381:74:40;;:::i;461:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;708:122;;;;;;;;;;;;;;;;-1:-1:-1;708:122:40;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;222:20;;;-1:-1:-1;;;;;222:20:40;;:::o;548:154::-;641:6;;;663:5;;641:54;;;-1:-1:-1;;;641:54:40;;-1:-1:-1;;;;;663:5:40;;;641:54;;;;;;;;;;;;;;;;;;:6;;;;;:21;;:54;;;;;;;;;;;:6;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;548:154;;:::o;158:29::-;;;-1:-1:-1;;;;;158:29:40;;:::o;381:74::-;434:5;:14;381:74::o;461:81::-;530:5;;461:81;:::o;708:122::-;812:5;;819:3;708:122;;;:::o"
+ },
+ "methodIdentifiers": {
+ "asset()": "38d52e0f",
+ "getHistoricalPrice(uint80)": "eec377c0",
+ "getPrice()": "98d5fdca",
+ "oracle()": "7dc0d1d0",
+ "setExpiryPriceInOracle(uint256,uint256)": "5c5ebfaf",
+ "setPrice(uint256)": "91b7f5ed"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getHistoricalPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setExpiryPriceInOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockPricer.sol\":\"MockPricer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/mocks/MockPricer.sol\":{\"keccak256\":\"0x1b9d6d2780aa848f3760508dfcf498947a8ae7549dac239f52d09623e0e0f847\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a12c0e2a80cf0f73a03c7a3a15e207c14aa849a05e022feb707622ee1ecac2ff\",\"dweb:/ipfs/Qmd3wvWrRn6EjDRCLfUzaUMXTereTDdSJTtE1prX9nzRLv\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockWSTETHToken.sol": {
+ "MockWSTETHToken": {
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_stEthPerToken",
+ "type": "uint256"
+ }
+ ],
+ "name": "setStEthPerToken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "stEthPerToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040523480156200001157600080fd5b5060405162000f7638038062000f76833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505050620001b18282620001ce60201b60201c565b620001c660126001600160e01b03620002bc16565b50506200037b565b600054610100900460ff1680620001f35750620001f36001600160e01b03620002d216565b8062000202575060005460ff16155b6200023f5760405162461bcd60e51b815260040180806020018281038252602e81526020018062000f48602e913960400191505060405180910390fd5b600054610100900460ff161580156200026b576000805460ff1961ff0019909116610100171660011790555b825162000280906068906020860190620002d9565b50815162000296906069906020850190620002d9565b50606a805460ff191660121790558015620002b7576000805461ff00191690555b505050565b606a805460ff191660ff92909216919091179055565b303b155b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200031c57805160ff19168380011785556200034c565b828001600101855582156200034c579182015b828111156200034c5782518255916020019190600101906200032f565b506200035a9291506200035e565b5090565b620002d691905b808211156200035a576000815560010162000365565b610bbd806200038b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806340c10f191161008c578063a457c2d711610066578063a457c2d7146102aa578063a9059cbb146102d6578063b423a76114610302578063dd62ed3e1461031f576100ea565b806340c10f191461024e57806370a082311461027c57806395d89b41146102a2576100ea565b806318160ddd116100c857806318160ddd146101c657806323b872dd146101ce578063313ce567146102045780633950935114610222576100ea565b8063035faf82146100ef57806306fdde0314610109578063095ea7b314610186575b600080fd5b6100f761034d565b60408051918252519081900360200190f35b610111610353565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014b578181015183820152602001610133565b50505050905090810190601f1680156101785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b26004803603604081101561019c57600080fd5b506001600160a01b0381351690602001356103e9565b604080519115158252519081900360200190f35b6100f7610406565b6101b2600480360360608110156101e457600080fd5b506001600160a01b0381358116916020810135909116906040013561040c565b61020c610499565b6040805160ff9092168252519081900360200190f35b6101b26004803603604081101561023857600080fd5b506001600160a01b0381351690602001356104a2565b61027a6004803603604081101561026457600080fd5b506001600160a01b0381351690602001356104f6565b005b6100f76004803603602081101561029257600080fd5b50356001600160a01b0316610504565b61011161051f565b6101b2600480360360408110156102c057600080fd5b506001600160a01b038135169060200135610580565b6101b2600480360360408110156102ec57600080fd5b506001600160a01b0381351690602001356105ee565b61027a6004803603602081101561031857600080fd5b5035610602565b6100f76004803603604081101561033557600080fd5b506001600160a01b0381358116916020013516610607565b60975481565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103df5780601f106103b4576101008083540402835291602001916103df565b820191906000526020600020905b8154815290600101906020018083116103c257829003601f168201915b5050505050905090565b60006103fd6103f6610632565b8484610636565b50600192915050565b60675490565b6000610419848484610722565b61048f84610425610632565b61048a85604051806060016040528060288152602001610af2602891396001600160a01b038a16600090815260666020526040812090610463610632565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61088b16565b610636565b5060019392505050565b606a5460ff1690565b60006103fd6104af610632565b8461048a85606660006104c0610632565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61092216565b6105008282610983565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103df5780601f106103b4576101008083540402835291602001916103df565b60006103fd61058d610632565b8461048a85604051806060016040528060258152602001610b6360259139606660006105b7610632565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61088b16565b60006103fd6105fb610632565b8484610722565b609755565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b03831661067b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610b3f6024913960400191505060405180910390fd5b6001600160a01b0382166106c05760405162461bcd60e51b8152600401808060200182810382526022815260200180610aaa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107675760405162461bcd60e51b8152600401808060200182810382526025815260200180610b1a6025913960400191505060405180910390fd5b6001600160a01b0382166107ac5760405162461bcd60e51b8152600401808060200182810382526023815260200180610a876023913960400191505060405180910390fd5b6107b7838383610a81565b6107fa81604051806060016040528060268152602001610acc602691396001600160a01b038616600090815260656020526040902054919063ffffffff61088b16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461082f908263ffffffff61092216565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561097c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166109de576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109ea60008383610a81565b6067546109fd908263ffffffff61092216565b6067556001600160a01b038216600090815260656020526040902054610a29908263ffffffff61092216565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220256b6184c291365a6ed1cc45b6acf20613ba4fd16748a2e81a448995ab5b2ca364736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF76 CODESIZE SUB DUP1 PUSH3 0xF76 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP PUSH3 0x1B1 DUP3 DUP3 PUSH3 0x1CE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1C6 PUSH1 0x12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2BC AND JUMP JUMPDEST POP POP PUSH3 0x37B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x1F3 JUMPI POP PUSH3 0x1F3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2D2 AND JUMP JUMPDEST DUP1 PUSH3 0x202 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x23F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0xF48 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x26B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH3 0x280 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x296 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH3 0x2B7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x31C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x34C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x34C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x34C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x32F JUMP JUMPDEST POP PUSH3 0x35A SWAP3 SWAP2 POP PUSH3 0x35E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x2D6 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x35A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x365 JUMP JUMPDEST PUSH2 0xBBD DUP1 PUSH3 0x38B 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 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2D6 JUMPI DUP1 PUSH4 0xB423A761 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x31F JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2A2 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x204 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x222 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x35FAF82 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x186 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH2 0x353 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x133 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x178 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF7 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40C JUMP JUMPDEST PUSH2 0x20C PUSH2 0x499 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4F6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x504 JUMP JUMPDEST PUSH2 0x111 PUSH2 0x51F JUMP JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x580 JUMP JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5EE JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x602 JUMP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DF 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 0x3C2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x3F6 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x419 DUP5 DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH2 0x48F DUP5 PUSH2 0x425 PUSH2 0x632 JUMP JUMPDEST PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAF2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x463 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x4AF PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x4C0 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH2 0x500 DUP3 DUP3 PUSH2 0x983 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x58D PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB63 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x5B7 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x5FB PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB3F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAAA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB1A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA87 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B7 DUP4 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH2 0x7FA DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xACC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x82F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x97C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9EA PUSH1 0x0 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x9FD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA29 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220256B PUSH2 0x84C2 SWAP2 CALLDATASIZE GAS PUSH15 0xD1CC45B6ACF20613BA4FD16748A2E8 BYTE DIFFICULTY DUP10 SWAP6 0xAB JUMPDEST 0x2C LOG3 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER NUMBER PUSH16 0x6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564000000000000000000 ",
+ "sourceMap": "150:445:41:-:0;;;236:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;236:146:41;;;;;;;;;;-1:-1:-1;236:146:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;236:146:41;;;;;;;;;;-1:-1:-1;236:146:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;309:38;332:5;339:7;309:22;;;:38;;:::i;:::-;357:18;372:2;-1:-1:-1;;;;;357:14:41;:18;:::i;:::-;236:146;;150:445;;2296:178:54;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;10531:88::-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;;:::o;150:445:41:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150:445:41;;;-1:-1:-1;150:445:41;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c806340c10f191161008c578063a457c2d711610066578063a457c2d7146102aa578063a9059cbb146102d6578063b423a76114610302578063dd62ed3e1461031f576100ea565b806340c10f191461024e57806370a082311461027c57806395d89b41146102a2576100ea565b806318160ddd116100c857806318160ddd146101c657806323b872dd146101ce578063313ce567146102045780633950935114610222576100ea565b8063035faf82146100ef57806306fdde0314610109578063095ea7b314610186575b600080fd5b6100f761034d565b60408051918252519081900360200190f35b610111610353565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014b578181015183820152602001610133565b50505050905090810190601f1680156101785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b26004803603604081101561019c57600080fd5b506001600160a01b0381351690602001356103e9565b604080519115158252519081900360200190f35b6100f7610406565b6101b2600480360360608110156101e457600080fd5b506001600160a01b0381358116916020810135909116906040013561040c565b61020c610499565b6040805160ff9092168252519081900360200190f35b6101b26004803603604081101561023857600080fd5b506001600160a01b0381351690602001356104a2565b61027a6004803603604081101561026457600080fd5b506001600160a01b0381351690602001356104f6565b005b6100f76004803603602081101561029257600080fd5b50356001600160a01b0316610504565b61011161051f565b6101b2600480360360408110156102c057600080fd5b506001600160a01b038135169060200135610580565b6101b2600480360360408110156102ec57600080fd5b506001600160a01b0381351690602001356105ee565b61027a6004803603602081101561031857600080fd5b5035610602565b6100f76004803603604081101561033557600080fd5b506001600160a01b0381358116916020013516610607565b60975481565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103df5780601f106103b4576101008083540402835291602001916103df565b820191906000526020600020905b8154815290600101906020018083116103c257829003601f168201915b5050505050905090565b60006103fd6103f6610632565b8484610636565b50600192915050565b60675490565b6000610419848484610722565b61048f84610425610632565b61048a85604051806060016040528060288152602001610af2602891396001600160a01b038a16600090815260666020526040812090610463610632565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61088b16565b610636565b5060019392505050565b606a5460ff1690565b60006103fd6104af610632565b8461048a85606660006104c0610632565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61092216565b6105008282610983565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103df5780601f106103b4576101008083540402835291602001916103df565b60006103fd61058d610632565b8461048a85604051806060016040528060258152602001610b6360259139606660006105b7610632565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61088b16565b60006103fd6105fb610632565b8484610722565b609755565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b03831661067b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610b3f6024913960400191505060405180910390fd5b6001600160a01b0382166106c05760405162461bcd60e51b8152600401808060200182810382526022815260200180610aaa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107675760405162461bcd60e51b8152600401808060200182810382526025815260200180610b1a6025913960400191505060405180910390fd5b6001600160a01b0382166107ac5760405162461bcd60e51b8152600401808060200182810382526023815260200180610a876023913960400191505060405180910390fd5b6107b7838383610a81565b6107fa81604051806060016040528060268152602001610acc602691396001600160a01b038616600090815260656020526040902054919063ffffffff61088b16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461082f908263ffffffff61092216565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561097c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166109de576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109ea60008383610a81565b6067546109fd908263ffffffff61092216565b6067556001600160a01b038216600090815260656020526040902054610a29908263ffffffff61092216565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220256b6184c291365a6ed1cc45b6acf20613ba4fd16748a2e81a448995ab5b2ca364736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2D6 JUMPI DUP1 PUSH4 0xB423A761 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x31F JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2A2 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x204 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x222 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x35FAF82 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x186 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH2 0x353 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x133 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x178 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF7 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40C JUMP JUMPDEST PUSH2 0x20C PUSH2 0x499 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4F6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x504 JUMP JUMPDEST PUSH2 0x111 PUSH2 0x51F JUMP JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x580 JUMP JUMPDEST PUSH2 0x1B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5EE JUMP JUMPDEST PUSH2 0x27A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x602 JUMP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DF 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 0x3C2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x3F6 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x419 DUP5 DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH2 0x48F DUP5 PUSH2 0x425 PUSH2 0x632 JUMP JUMPDEST PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAF2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x463 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x4AF PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x4C0 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH2 0x500 DUP3 DUP3 PUSH2 0x983 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x58D PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x48A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB63 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x5B7 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD PUSH2 0x5FB PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB3F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAAA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB1A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA87 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B7 DUP4 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH2 0x7FA DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xACC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x82F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x97C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9EA PUSH1 0x0 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x9FD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA29 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220256B PUSH2 0x84C2 SWAP2 CALLDATASIZE GAS PUSH15 0xD1CC45B6ACF20613BA4FD16748A2E8 BYTE DIFFICULTY DUP10 SWAP6 0xAB JUMPDEST 0x2C LOG3 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "150:445:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;201:28;;;:::i;:::-;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3582:98;;;:::i;5208:393::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5996:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;388:93:41:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;388:93:41;;;;;;;;:::i;:::-;;3738:117:54;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2733:85::-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;487:106:41:-;;;;;;;;;;;;;;;;-1:-1:-1;487:106:41;;:::i;4288:149:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;201:28:41:-;;;;:::o;2539:81:54:-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;3582:98::-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;5996:215::-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;388:93:41:-;452:22;458:7;467:6;452:5;:22::i;:::-;388:93;;:::o;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2733:85::-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;487:106:41:-;556:13;:30;487:106::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;938:176::-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;11206:121::-;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "increaseAllowance(address,uint256)": "39509351",
+ "mint(address,uint256)": "40c10f19",
+ "name()": "06fdde03",
+ "setStEthPerToken(uint256)": "b423a761",
+ "stEthPerToken()": "035faf82",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stEthPerToken\",\"type\":\"uint256\"}],\"name\":\"setStEthPerToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stEthPerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockWSTETHToken.sol\":\"MockWSTETHToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/mocks/MockWSTETHToken.sol\":{\"keccak256\":\"0x678c4fa2949dfbbaa4fd9a88c0fc8f17fa96d21cef180ac4aead3c7406b502fe\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://67a3eadbdf8129c4c4691672cfcbcb1c01458bb9bdd4951302b239ca03472a33\",\"dweb:/ipfs/Qmaa98ygLoCdgvnLjm4wQx2L4pgnWkgvEWjHxuxKNE589h\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/mocks/MockYToken.sol": {
+ "MockYToken": {
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "pricePerShare",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_pricePerShare",
+ "type": "uint256"
+ }
+ ],
+ "name": "setPricePerShare",
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040523480156200001157600080fd5b5060405162000f7638038062000f76833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505050620001b18282620001ce60201b60201c565b620001c660086001600160e01b03620002bc16565b50506200037b565b600054610100900460ff1680620001f35750620001f36001600160e01b03620002d216565b8062000202575060005460ff16155b6200023f5760405162461bcd60e51b815260040180806020018281038252602e81526020018062000f48602e913960400191505060405180910390fd5b600054610100900460ff161580156200026b576000805460ff1961ff0019909116610100171660011790555b825162000280906068906020860190620002d9565b50815162000296906069906020850190620002d9565b50606a805460ff191660121790558015620002b7576000805461ff00191690555b505050565b606a805460ff191660ff92909216919091179055565b303b155b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200031c57805160ff19168380011785556200034c565b828001600101855582156200034c579182015b828111156200034c5782518255916020019190600101906200032f565b506200035a9291506200035e565b5090565b620002d691905b808211156200035a576000815560010162000365565b610bbd806200038b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806340c10f191161008c57806399530b061161006657806399530b06146102bf578063a457c2d7146102c7578063a9059cbb146102f3578063dd62ed3e1461031f576100ea565b806340c10f191461026557806370a082311461029157806395d89b41146102b7576100ea565b806318160ddd116100c857806318160ddd146101cb57806323b872dd146101e5578063313ce5671461021b5780633950935114610239576100ea565b806306fdde03146100ef578063095ea7b31461016c578063118c9a07146101ac575b600080fd5b6100f761034d565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101986004803603604081101561018257600080fd5b506001600160a01b0381351690602001356103e3565b604080519115158252519081900360200190f35b6101c9600480360360208110156101c257600080fd5b5035610400565b005b6101d3610405565b60408051918252519081900360200190f35b610198600480360360608110156101fb57600080fd5b506001600160a01b0381358116916020810135909116906040013561040b565b610223610498565b6040805160ff9092168252519081900360200190f35b6101986004803603604081101561024f57600080fd5b506001600160a01b0381351690602001356104a1565b6101c96004803603604081101561027b57600080fd5b506001600160a01b0381351690602001356104f5565b6101d3600480360360208110156102a757600080fd5b50356001600160a01b0316610503565b6100f761051e565b6101d361057f565b610198600480360360408110156102dd57600080fd5b506001600160a01b038135169060200135610585565b6101986004803603604081101561030957600080fd5b506001600160a01b0381351690602001356105f3565b6101d36004803603604081101561033557600080fd5b506001600160a01b0381358116916020013516610607565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b820191906000526020600020905b8154815290600101906020018083116103bc57829003601f168201915b5050505050905090565b60006103f76103f0610632565b8484610636565b50600192915050565b609755565b60675490565b6000610418848484610722565b61048e84610424610632565b61048985604051806060016040528060288152602001610af2602891396001600160a01b038a16600090815260666020526040812090610462610632565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61088b16565b610636565b5060019392505050565b606a5460ff1690565b60006103f76104ae610632565b8461048985606660006104bf610632565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61092216565b6104ff8282610983565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b60975481565b60006103f7610592610632565b8461048985604051806060016040528060258152602001610b6360259139606660006105bc610632565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61088b16565b60006103f7610600610632565b8484610722565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b03831661067b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610b3f6024913960400191505060405180910390fd5b6001600160a01b0382166106c05760405162461bcd60e51b8152600401808060200182810382526022815260200180610aaa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107675760405162461bcd60e51b8152600401808060200182810382526025815260200180610b1a6025913960400191505060405180910390fd5b6001600160a01b0382166107ac5760405162461bcd60e51b8152600401808060200182810382526023815260200180610a876023913960400191505060405180910390fd5b6107b7838383610a81565b6107fa81604051806060016040528060268152602001610acc602691396001600160a01b038616600090815260656020526040902054919063ffffffff61088b16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461082f908263ffffffff61092216565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561097c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166109de576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109ea60008383610a81565b6067546109fd908263ffffffff61092216565b6067556001600160a01b038216600090815260656020526040902054610a29908263ffffffff61092216565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122051a6661f1de854f04b33bae8dad089ac222603a8793c1f17bb6ab4b61174a04d64736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF76 CODESIZE SUB DUP1 PUSH3 0xF76 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP PUSH3 0x1B1 DUP3 DUP3 PUSH3 0x1CE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1C6 PUSH1 0x8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2BC AND JUMP JUMPDEST POP POP PUSH3 0x37B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH3 0x1F3 JUMPI POP PUSH3 0x1F3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2D2 AND JUMP JUMPDEST DUP1 PUSH3 0x202 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH3 0x23F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH3 0xF48 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x26B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH3 0x280 SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x296 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH3 0x2B7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x31C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x34C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x34C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x34C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x32F JUMP JUMPDEST POP PUSH3 0x35A SWAP3 SWAP2 POP PUSH3 0x35E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x2D6 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x35A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x365 JUMP JUMPDEST PUSH2 0xBBD DUP1 PUSH3 0x38B 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 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x99530B06 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x99530B06 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x31F JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B7 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x239 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x118C9A07 EQ PUSH2 0x1AC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x400 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D3 PUSH2 0x405 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40B JUMP JUMPDEST PUSH2 0x223 PUSH2 0x498 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x24F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A1 JUMP JUMPDEST PUSH2 0x1C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4F5 JUMP JUMPDEST PUSH2 0x1D3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x503 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x51E JUMP JUMPDEST PUSH2 0x1D3 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x585 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5F3 JUMP JUMPDEST PUSH2 0x1D3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 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 0x3BC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x3F0 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x418 DUP5 DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH2 0x48E DUP5 PUSH2 0x424 PUSH2 0x632 JUMP JUMPDEST PUSH2 0x489 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAF2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x462 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x4AE PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x489 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x4BF PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH2 0x4FF DUP3 DUP3 PUSH2 0x983 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x592 PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x489 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB63 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x5BC PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x600 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB3F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAAA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB1A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA87 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B7 DUP4 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH2 0x7FA DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xACC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x82F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x97C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9EA PUSH1 0x0 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x9FD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA29 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x735822122051A6 PUSH7 0x1F1DE854F04B33 0xBA 0xE8 0xDA 0xD0 DUP10 0xAC 0x22 0x26 SUB 0xA8 PUSH26 0x3C1F17BB6AB4B61174A04D64736F6C634300060A0033436F6E74 PUSH19 0x61637420696E7374616E63652068617320616C PUSH19 0x65616479206265656E20696E697469616C697A PUSH6 0x640000000000 ",
+ "sourceMap": "150:439:42:-:0;;;231:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;231:145:42;;;;;;;;;;-1:-1:-1;231:145:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;231:145:42;;;;;;;;;;-1:-1:-1;231:145:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;304:38;327:5;334:7;304:22;;;:38;;:::i;:::-;352:17;367:1;-1:-1:-1;;;;;352:14:42;:17;:::i;:::-;231:145;;150:439;;2296:178:54;1150:12:57;;;;;;;;:31;;-1:-1:-1;1166:15:57;-1:-1:-1;;;;;1166:13:57;:15;:::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;10531:88::-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;;:::o;150:439:42:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150:439:42;;;-1:-1:-1;150:439:42;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c806340c10f191161008c57806399530b061161006657806399530b06146102bf578063a457c2d7146102c7578063a9059cbb146102f3578063dd62ed3e1461031f576100ea565b806340c10f191461026557806370a082311461029157806395d89b41146102b7576100ea565b806318160ddd116100c857806318160ddd146101cb57806323b872dd146101e5578063313ce5671461021b5780633950935114610239576100ea565b806306fdde03146100ef578063095ea7b31461016c578063118c9a07146101ac575b600080fd5b6100f761034d565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101986004803603604081101561018257600080fd5b506001600160a01b0381351690602001356103e3565b604080519115158252519081900360200190f35b6101c9600480360360208110156101c257600080fd5b5035610400565b005b6101d3610405565b60408051918252519081900360200190f35b610198600480360360608110156101fb57600080fd5b506001600160a01b0381358116916020810135909116906040013561040b565b610223610498565b6040805160ff9092168252519081900360200190f35b6101986004803603604081101561024f57600080fd5b506001600160a01b0381351690602001356104a1565b6101c96004803603604081101561027b57600080fd5b506001600160a01b0381351690602001356104f5565b6101d3600480360360208110156102a757600080fd5b50356001600160a01b0316610503565b6100f761051e565b6101d361057f565b610198600480360360408110156102dd57600080fd5b506001600160a01b038135169060200135610585565b6101986004803603604081101561030957600080fd5b506001600160a01b0381351690602001356105f3565b6101d36004803603604081101561033557600080fd5b506001600160a01b0381358116916020013516610607565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b820191906000526020600020905b8154815290600101906020018083116103bc57829003601f168201915b5050505050905090565b60006103f76103f0610632565b8484610636565b50600192915050565b609755565b60675490565b6000610418848484610722565b61048e84610424610632565b61048985604051806060016040528060288152602001610af2602891396001600160a01b038a16600090815260666020526040812090610462610632565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61088b16565b610636565b5060019392505050565b606a5460ff1690565b60006103f76104ae610632565b8461048985606660006104bf610632565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61092216565b6104ff8282610983565b5050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103d95780601f106103ae576101008083540402835291602001916103d9565b60975481565b60006103f7610592610632565b8461048985604051806060016040528060258152602001610b6360259139606660006105bc610632565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61088b16565b60006103f7610600610632565b8484610722565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b03831661067b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610b3f6024913960400191505060405180910390fd5b6001600160a01b0382166106c05760405162461bcd60e51b8152600401808060200182810382526022815260200180610aaa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107675760405162461bcd60e51b8152600401808060200182810382526025815260200180610b1a6025913960400191505060405180910390fd5b6001600160a01b0382166107ac5760405162461bcd60e51b8152600401808060200182810382526023815260200180610a876023913960400191505060405180910390fd5b6107b7838383610a81565b6107fa81604051806060016040528060268152602001610acc602691396001600160a01b038616600090815260656020526040902054919063ffffffff61088b16565b6001600160a01b03808516600090815260656020526040808220939093559084168152205461082f908263ffffffff61092216565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561097c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166109de576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109ea60008383610a81565b6067546109fd908263ffffffff61092216565b6067556001600160a01b038216600090815260656020526040902054610a29908263ffffffff61092216565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122051a6661f1de854f04b33bae8dad089ac222603a8793c1f17bb6ab4b61174a04d64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x99530B06 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x99530B06 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x31F JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B7 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x239 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x118C9A07 EQ PUSH2 0x1AC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x400 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D3 PUSH2 0x405 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40B JUMP JUMPDEST PUSH2 0x223 PUSH2 0x498 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x24F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A1 JUMP JUMPDEST PUSH2 0x1C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4F5 JUMP JUMPDEST PUSH2 0x1D3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x503 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x51E JUMP JUMPDEST PUSH2 0x1D3 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x585 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5F3 JUMP JUMPDEST PUSH2 0x1D3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 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 0x3BC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x3F0 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x97 SSTORE JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x418 DUP5 DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH2 0x48E DUP5 PUSH2 0x424 PUSH2 0x632 JUMP JUMPDEST PUSH2 0x489 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAF2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x462 PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH2 0x636 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x4AE PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x489 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x4BF PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH2 0x4FF DUP3 DUP3 PUSH2 0x983 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D9 JUMP JUMPDEST PUSH1 0x97 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x592 PUSH2 0x632 JUMP JUMPDEST DUP5 PUSH2 0x489 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB63 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x5BC PUSH2 0x632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7 PUSH2 0x600 PUSH2 0x632 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB3F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAAA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB1A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA87 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B7 DUP4 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH2 0x7FA DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xACC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x82F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x97C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9EA PUSH1 0x0 DUP4 DUP4 PUSH2 0xA81 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x9FD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA29 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x735822122051A6 PUSH7 0x1F1DE854F04B33 0xBA 0xE8 0xDA 0xD0 DUP10 0xAC 0x22 0x26 SUB 0xA8 PUSH26 0x3C1F17BB6AB4B61174A04D64736F6C634300060A003300000000 ",
+ "sourceMap": "150:439:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;481:106:42;;;;;;;;;;;;;;;;-1:-1:-1;481:106:42;;:::i;:::-;;3582:98:54;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5996:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;382:93:42:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;382:93:42;;;;;;;;:::i;3738:117:54:-;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2733:85::-;;;:::i;196:28:42:-;;;:::i;6698:312:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;4288:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;2539:81::-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;481:106:42:-;550:13;:30;481:106::o;3582:98:54:-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;5996:215::-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;382:93:42:-;446:22;452:7;461:6;446:5;:22::i;:::-;382:93;;:::o;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2733:85::-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;196:28:42;;;;:::o;6698:312:54:-;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;4288:149::-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;938:176::-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;11206:121::-;;;;:::o"
+ },
+ "methodIdentifiers": {
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "increaseAllowance(address,uint256)": "39509351",
+ "mint(address,uint256)": "40c10f19",
+ "name()": "06fdde03",
+ "pricePerShare()": "99530b06",
+ "setPricePerShare(uint256)": "118c9a07",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pricePerShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pricePerShare\",\"type\":\"uint256\"}],\"name\":\"setPricePerShare\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockYToken.sol\":\"MockYToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/mocks/MockYToken.sol\":{\"keccak256\":\"0x8ac626efc01be02440f71037418ee08b2978c78c404da3629d288fc1acb314f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://676d8b31cd8dea0426d5c26263f38d7b7b8f08123e2a9ab76526f55bb475eb70\",\"dweb:/ipfs/QmXxpM9SGXdRQCgSeJb5gLesDcjwrcgaiaPRswvUko1ubw\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/BokkyPooBahsDateTimeLibrary.sol": {
+ "BokkyPooBahsDateTimeLibrary": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202e0ca1a6c6195094b0da7b304702c84a4fe8f02fadd63ddb9604f69da1b55aca64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0x2E 0xC LOG1 0xA6 0xC6 NOT POP SWAP5 0xB0 0xDA PUSH28 0x304702C84A4FE8F02FADD63DDB9604F69DA1B55ACA64736F6C634300 MOD EXP STOP CALLER ",
+ "sourceMap": "979:1889:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202e0ca1a6c6195094b0da7b304702c84a4fe8f02fadd63ddb9604f69da1b55aca64736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2E 0xC LOG1 0xA6 0xC6 NOT POP SWAP5 0xB0 0xDA PUSH28 0x304702C84A4FE8F02FADD63DDB9604F69DA1B55ACA64736F6C634300 MOD EXP STOP CALLER ",
+ "sourceMap": "979:1889:43:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/BokkyPooBahsDateTimeLibrary.sol\":\"BokkyPooBahsDateTimeLibrary\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x793c89a6091818287e000f216409bd58fe905ea0dd2f77ae74ed2122a5b365c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2745489c94a244aa74824c3119bdc5c3a216999f7314a0c8b796797031f64558\",\"dweb:/ipfs/QmPcKgVAYE1ZCyUUvsSTd3FTyVg7hWSaRrxXLfRoHavHfr\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/Spawn.sol": {
+ "Spawn": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "logicContract",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initializationCalldata",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "constructor"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040526040516101f03803806101f08339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506000826001600160a01b0316826040518082805190602001908083835b602083106101195780518252601f1990920191602091820191016100fa565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610179576040519150601f19603f3d011682016040523d82523d6000602084013e61017e565b606091505b5050905080610191573d6000803e3d6000fd5b6040805169363d3d373d3d3d363d7360b01b6020808301919091526001600160601b0319606087901b16602a8301526e5af43d82803e903d91602b57fd5bf360881b603e8301528251602d81840381018252604d9093019093528201f3fe",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1F0 CODESIZE SUB DUP1 PUSH2 0x1F0 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x91 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x119 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xFA JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x179 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 0x17E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x191 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0x363D3D373D3D3D363D73 PUSH1 0xB0 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP8 SWAP1 SHL AND PUSH1 0x2A DUP4 ADD MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL PUSH1 0x3E DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x2D DUP2 DUP5 SUB DUP2 ADD DUP3 MSTORE PUSH1 0x4D SWAP1 SWAP4 ADD SWAP1 SWAP4 MSTORE DUP3 ADD RETURN INVALID ",
+ "sourceMap": "528:927:44:-:0;;;549:904;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;549:904:44;;;;;;;;;;-1:-1:-1;549:904:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;549:904:44;;;;735:50;;722:7;;-1:-1:-1;;;;;;735:26:44;;;-1:-1:-1;762:22:44;;-1:-1:-1;549:904:44;;735:50;;;;;549:904;735:50;;;;;;;;;;;-1:-1:-1;;735:50:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;721:64;;;800:2;795:228;;938:16;935:1;;917:38;982:16;935:1;972:27;899:114;1110:153;;;-1:-1:-1;;;1110:153:44;;;;;;;;-1:-1:-1;;;1110:153:44;;;;;;;;-1:-1:-1;;;1110:153:44;;;;;;;;;;;;;;;;;;;;;1377:22;;1370:34"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052600080fdfea2646970667358221220a0ab57c2979ca10b1771f3a99d2351c5025f82245117e4236f36708704b9bf9364736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG0 0xAB JUMPI 0xC2 SWAP8 SWAP13 LOG1 SIGNEXTEND OR PUSH18 0xF3A99D2351C5025F82245117E4236F367087 DIV 0xB9 0xBF SWAP4 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "528:927:44:-:0;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"logicContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializationCalldata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"}],\"devdoc\":{\"author\":\"0age\",\"methods\":{},\"title\":\"Spawn\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides creation code that is used by Spawner in order to initialize and deploy eip-1167 minimal proxies for a given logic contract. SPDX-License-Identifier: MIT\"}},\"settings\":{\"compilationTarget\":{\"contracts/packages/Spawn.sol\":\"Spawn\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/Spawn.sol\":{\"keccak256\":\"0xb7be1b391d5766babb41a9e63badbb0a707cc0340f7de4edf4e643e7f43ac47d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8ea5370167eeaf3a178f7448f7086a12fb8292c6adf6c480dd9bcdb92a6b8b2\",\"dweb:/ipfs/QmStmjSwX6khwJjC6hXcrAUnQ3TTZ3qSiyQbGXNSDs1FYG\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/Address.sol": {
+ "Address": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f435c17f18749ae3f134a1db5688474c971d5451c28b8f9d9e1bb12c013541864736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 SWAP16 NUMBER 0x5C OR CALL DUP8 0x49 0xAE EXTCODEHASH SGT 0x4A SAR 0xB5 PUSH9 0x8474C971D5451C28B8 0xF9 0xD9 0xE1 0xBB SLT 0xC0 SGT SLOAD XOR PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "159:5908:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f435c17f18749ae3f134a1db5688474c971d5451c28b8f9d9e1bb12c013541864736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP16 NUMBER 0x5C OR CALL DUP8 0x49 0xAE EXTCODEHASH SGT 0x4A SAR 0xB5 PUSH9 0x8474C971D5451C28B8 0xF9 0xD9 0xE1 0xBB SLT 0xC0 SGT SLOAD XOR PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "159:5908:45:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/Context.sol": {
+ "Context": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/Create2.sol": {
+ "Create2": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c9287cbc1521863b7f9a67cbedc0762d7cb5730476aa3c8b5b3d60c1085caf0364736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xC9 0x28 PUSH29 0xBC1521863B7F9A67CBEDC0762D7CB5730476AA3C8B5B3D60C1085CAF03 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "482:2050:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c9287cbc1521863b7f9a67cbedc0762d7cb5730476aa3c8b5b3d60c1085caf0364736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC9 0x28 PUSH29 0xBC1521863B7F9A67CBEDC0762D7CB5730476AA3C8B5B3D60C1085CAF03 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "482:2050:47:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper to make usage of the `CREATE2` EVM opcode easier and safer. `CREATE2` can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more information.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/Create2.sol\":\"Create2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/Create2.sol\":{\"keccak256\":\"0x4b1cd6d6448f378562b37b447c6489a4fd962937fa2f98fee7279a69f7139721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b93ceb00e6d794f517bab613b802e6d5d84ad9df02b81b95312e2012d0196167\",\"dweb:/ipfs/Qma2sAQpnkAQeAiPgCuZipHX5iAnPNUchHi2rHFfvVwBXv\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/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"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "transferOwnership(address)": "f2fde38b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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.\",\"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.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/ReentrancyGuard.sol": {
+ "ReentrancyGuard": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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].\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/ReentrancyGuard.sol\":{\"keccak256\":\"0x4a1442a7dc4bea3bba4c387998959e83d2e688470fb237fd1d4477fbb1cd69ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5408e90a419c640d5500894027bbd2909862ca30e50e08ebc18773b5ec1aa618\",\"dweb:/ipfs/QmT4zgbryLPWf5nC48nV39BY4dY7gKm5EMZchNVypLDg6z\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/SafeERC20.sol": {
+ "SafeERC20": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122005a9474f5b2edabe3fdeb85fd70083219c0846e66817468e11228ddce15a7eec64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 SDIV 0xA9 SELFBALANCE 0x4F JUMPDEST 0x2E 0xDA 0xBE EXTCODEHASH 0xDE 0xB8 0x5F 0xD7 STOP DUP4 0x21 SWAP13 ADDMOD CHAINID 0xE6 PUSH9 0x17468E11228DDCE15A PUSH31 0xEC64736F6C634300060A003300000000000000000000000000000000000000 ",
+ "sourceMap": "675:3377:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122005a9474f5b2edabe3fdeb85fd70083219c0846e66817468e11228ddce15a7eec64736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SDIV 0xA9 SELFBALANCE 0x4F JUMPDEST 0x2E 0xDA 0xBE EXTCODEHASH 0xDE 0xB8 0x5F 0xD7 STOP DUP4 0x21 SWAP13 ADDMOD CHAINID 0xE6 PUSH9 0x17468E11228DDCE15A PUSH31 0xEC64736F6C634300060A003300000000000000000000000000000000000000 ",
+ "sourceMap": "675:3377:50:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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 ERC20Interface;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"methods\":{},\"title\":\"SafeERC20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/SafeMath.sol": {
+ "SafeMath": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208364bfe0fb45577f81654cc22e0f23583b43be35ca31ca3badce273354a14fc264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 DUP4 PUSH5 0xBFE0FB4557 PUSH32 0x81654CC22E0F23583B43BE35CA31CA3BADCE273354A14FC264736F6C63430006 EXP STOP CALLER ",
+ "sourceMap": "677:4678:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208364bfe0fb45577f81654cc22e0f23583b43be35ca31ca3badce273354a14fc264736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 PUSH5 0xBFE0FB4557 PUSH32 0x81654CC22E0F23583B43BE35CA31CA3BADCE273354A14FC264736F6C63430006 EXP STOP CALLER ",
+ "sourceMap": "677:4678:51:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when 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.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/SignedSafeMath.sol": {
+ "SignedSafeMath": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220098e8f9753f3ba3dce91d0f82bf28885c33d987a8befe4e86135ee669b91da0064736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 MULMOD DUP15 DUP16 SWAP8 MSTORE8 RETURN 0xBA RETURNDATASIZE 0xCE SWAP2 0xD0 0xF8 0x2B CALLCODE DUP9 DUP6 0xC3 RETURNDATASIZE SWAP9 PUSH27 0x8BEFE4E86135EE669B91DA0064736F6C634300060A003300000000 ",
+ "sourceMap": "218:2495:52:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220098e8f9753f3ba3dce91d0f82bf28885c33d987a8befe4e86135ee669b91da0064736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD DUP15 DUP16 SWAP8 MSTORE8 RETURN 0xBA RETURNDATASIZE 0xCE SWAP2 0xD0 0xF8 0x2B CALLCODE DUP9 DUP6 0xC3 RETURNDATASIZE SWAP9 PUSH27 0x8BEFE4E86135EE669B91DA0064736F6C634300060A003300000000 ",
+ "sourceMap": "218:2495:52:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Signed math operations with safety checks that revert on error.\",\"methods\":{},\"title\":\"SignedSafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/SignedSafeMath.sol\":\"SignedSafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/SignedSafeMath.sol\":{\"keccak256\":\"0x5c37725e4c762112901151ff9fbd6678f2edd936666f987d0904865b528647e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://072c740989fea30fe46f9410377697fafadc8b79a0c297a0ebfbd38f5a40f305\",\"dweb:/ipfs/QmSb7ggwKV5LU9QDHHZ6tUDUEhCyiFEoD12ZS4FFFnqjkF\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/Strings.sol": {
+ "Strings": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206d8d634e000a1c0d2c8f580dcd4603540b643e2eaed7041e737b661e2b32da5564736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 PUSH14 0x8D634E000A1C0D2C8F580DCD4603 SLOAD SIGNEXTEND PUSH5 0x3E2EAED704 0x1E PUSH20 0x7B661E2B32DA5564736F6C634300060A00330000 ",
+ "sourceMap": "149:838:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206d8d634e000a1c0d2c8f580dcd4603540b643e2eaed7041e737b661e2b32da5564736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x8D634E000A1C0D2C8F580DCD4603 SLOAD SIGNEXTEND PUSH5 0x3E2EAED704 0x1E PUSH20 0x7B661E2B32DA5564736F6C634300060A00330000 ",
+ "sourceMap": "149:838:53:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/Strings.sol\":\"Strings\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/Strings.sol\":{\"keccak256\":\"0x6aafb5c8d36a99cde85066ec8d5531006e1e0d5e2916a2e236f16d61c5e20a12\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85f1e98a4c53edca7c4d24edb10b82697b612cfcf825da5297c5a90957ce66de\",\"dweb:/ipfs/QmbKgfs9NrD4A3aRXATkeYiX93Esurt5yUfSU74Pa71a4Q\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/ERC20Upgradeable.sol": {
+ "ERC20Upgradeable": {
+ "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": [
+ {
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610a12806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60675490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610947602891396001600160a01b038a166000908152606660205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107de16565b610589565b5060019392505050565b606a5460ff1690565b6000610363610415610585565b846103f08560666000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087516565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b8602591396066600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107de16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109946024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108ff6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096f6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108dc6023913960400191505060405180910390fd5b61070a8383836108d6565b61074d81604051806060016040528060268152602001610921602691396001600160a01b038616600090815260656020526040902054919063ffffffff6107de16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610782908263ffffffff61087516565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561083257818101518382015260200161081a565b50505050905090810190601f16801561085f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cf576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f876efea289666423d519a3d1f89333ac9c386df758aa397535bc1a528337b1564736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA12 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 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x408 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x45C JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x477 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x55A JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 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 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x3F5 DUP5 PUSH2 0x38B PUSH2 0x585 JUMP JUMPDEST PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x947 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DE AND JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x415 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x426 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x875 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4E5 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B8 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x50F PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DE AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x553 PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x994 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x613 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8FF PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x96F PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DC PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x70A DUP4 DUP4 DUP4 PUSH2 0x8D6 JUMP JUMPDEST PUSH2 0x74D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x921 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DE AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x875 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x86D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x832 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x81A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x85F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220F876 0xEF 0xEA 0x28 SWAP7 PUSH7 0x423D519A3D1F89 CALLER GASPRICE 0xC9 0xC3 DUP7 0xDF PUSH22 0x8AA397535BC1A528337B1564736F6C634300060A0033 ",
+ "sourceMap": "1419:9942:54:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60675490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610947602891396001600160a01b038a166000908152606660205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107de16565b610589565b5060019392505050565b606a5460ff1690565b6000610363610415610585565b846103f08560666000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087516565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b8602591396066600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107de16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109946024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108ff6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096f6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108dc6023913960400191505060405180910390fd5b61070a8383836108d6565b61074d81604051806060016040528060268152602001610921602691396001600160a01b038616600090815260656020526040902054919063ffffffff6107de16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610782908263ffffffff61087516565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561083257818101518382015260200161081a565b50505050905090810190601f16801561085f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cf576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f876efea289666423d519a3d1f89333ac9c386df758aa397535bc1a528337b1564736f6c634300060a0033",
+ "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 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x408 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x45C JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x477 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x55A JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 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 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x3F5 DUP5 PUSH2 0x38B PUSH2 0x585 JUMP JUMPDEST PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x947 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DE AND JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x415 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x426 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x875 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4E5 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B8 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x50F PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DE AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x553 PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x994 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x613 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8FF PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x96F PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DC PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x70A DUP4 DUP4 DUP4 PUSH2 0x8D6 JUMP JUMPDEST PUSH2 0x74D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x921 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DE AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x875 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x86D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x832 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x81A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x85F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220F876 0xEF 0xEA 0x28 SWAP7 PUSH7 0x423D519A3D1F89 CALLER GASPRICE 0xC9 0xC3 DUP7 0xDF PUSH22 0x8AA397535BC1A528337B1564736F6C634300060A0033 ",
+ "sourceMap": "1419:9942:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3582:98;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5996:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;3738:117::-;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;2733:85::-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;4288:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;2539:81::-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;3582:98::-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;5996:215::-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;3738:117::-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;2733:85::-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;4288:149::-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;938:176::-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;11206:121:54:-;;;;:::o"
+ },
+ "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.6.10+commit.00c0fcaf\"},\"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\":[{\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of 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}.\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":\"ERC20Upgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol": {
+ "ContextUpgradeable": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/IERC20Upgradeable.sol": {
+ "IERC20Upgradeable": {
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "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.6.10+commit.00c0fcaf\"},\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"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.\",\"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 `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` 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.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":\"IERC20Upgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/Initializable.sol": {
+ "Initializable": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220548fb75843e9d257d5b7db205bf1d1e672798ed1d431699c462ca591ea2feeea64736f6c634300060a0033",
+ "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 SLOAD DUP16 0xB7 PC NUMBER 0xE9 0xD2 JUMPI 0xD5 0xB7 0xDB KECCAK256 JUMPDEST CALL 0xD1 0xE6 PUSH19 0x798ED1D431699C462CA591EA2FEEEA64736F6C PUSH4 0x4300060A STOP CALLER ",
+ "sourceMap": "756:1494:57:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052600080fdfea2646970667358221220548fb75843e9d257d5b7db205bf1d1e672798ed1d431699c462ca591ea2feeea64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP16 0xB7 PC NUMBER 0xE9 0xD2 JUMPI 0xD5 0xB7 0xDB KECCAK256 JUMPDEST CALL 0xD1 0xE6 PUSH19 0x798ED1D431699C462CA591EA2FEEEA64736F6C PUSH4 0x4300060A STOP CALLER ",
+ "sourceMap": "756:1494:57:-:0;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper contract to support initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier. WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.\",\"methods\":{},\"stateVariables\":{\"initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"title\":\"Initializable\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol": {
+ "OwnableUpgradeSafe": {
+ "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"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506102c8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b14610074575b600080fd5b61004e61009a565b005b61005861014e565b604080516001600160a01b039092168252519081900360200190f35b61004e6004803603602081101561008a57600080fd5b50356001600160a01b031661015d565b6100a2610268565b6065546001600160a01b03908116911614610104576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b6065546001600160a01b031690565b610165610268565b6065546001600160a01b039081169116146101c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661020c5760405162461bcd60e51b815260040180806020018281038252602681526020018061026d6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220ae5f000ad62efa7fbb0551a16c152414834958888dc457793335d6646c8fc3be64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 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 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x74 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x58 PUSH2 0x14E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15D JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x268 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x104 JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x268 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1C7 JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x26D PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x65 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 CALLER SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F2061646472657373A2646970667358221220AE5F000AD62E STATICCALL PUSH32 0xBB0551A16C152414834958888DC457793335D6646C8FC3BE64736F6C63430006 EXP STOP CALLER ",
+ "sourceMap": "668:1869:58:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b14610074575b600080fd5b61004e61009a565b005b61005861014e565b604080516001600160a01b039092168252519081900360200190f35b61004e6004803603602081101561008a57600080fd5b50356001600160a01b031661015d565b6100a2610268565b6065546001600160a01b03908116911614610104576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b6065546001600160a01b031690565b610165610268565b6065546001600160a01b039081169116146101c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661020c5760405162461bcd60e51b815260040180806020018281038252602681526020018061026d6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220ae5f000ad62efa7fbb0551a16c152414834958888dc457793335d6646c8fc3be64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x74 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x58 PUSH2 0x14E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15D JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x268 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x104 JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x268 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1C7 JUMPI PUSH1 0x40 DUP1 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 SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x26D PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x65 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 CALLER SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F2061646472657373A2646970667358221220AE5F000AD62E STATICCALL PUSH32 0xBB0551A16C152414834958888DC457793335D6646C8FC3BE64736F6C63430006 EXP STOP CALLER ",
+ "sourceMap": "668:1869:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1969:145;;;:::i;:::-;;1346:77;;;:::i;:::-;;;;-1:-1:-1;;;;;1346:77:58;;;;;;;;;;;;;;2263:240;;;;;;;;;;;;;;;;-1:-1:-1;2263:240:58;-1:-1:-1;;;;;2263:240:58;;:::i;1969:145::-;1560:12;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2059:6:::1;::::0;2038:40:::1;::::0;2075:1:::1;::::0;-1:-1:-1;;;;;2059:6:58::1;::::0;2038:40:::1;::::0;2075:1;;2038:40:::1;2088:6;:19:::0;;-1:-1:-1;;;;;;2088:19:58::1;::::0;;1969:145::o;1346:77::-;1410:6;;-1:-1:-1;;;;;1410:6:58;1346:77;:::o;2263:240::-;1560:12;:10;:12::i;:::-;1550:6;;-1:-1:-1;;;;;1550:6:58;;;:22;;;1542:67;;;;;-1:-1:-1;;;1542:67:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2351:22:58;::::1;2343:73;;;;-1:-1:-1::0;;;2343:73:58::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2452:6;::::0;2431:38:::1;::::0;-1:-1:-1;;;;;2431:38:58;;::::1;::::0;2452:6:::1;::::0;2431:38:::1;::::0;2452:6:::1;::::0;2431:38:::1;2479:6;:17:::0;;-1:-1:-1;;;;;;2479:17:58::1;-1:-1:-1::0;;;;;2479:17:58;;;::::1;::::0;;;::::1;::::0;;2263:240::o;864:104:55:-;951:10;864:104;:::o"
+ },
+ "methodIdentifiers": {
+ "owner()": "8da5cb5b",
+ "renounceOwnership()": "715018a6",
+ "transferOwnership(address)": "f2fde38b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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.\",\"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.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol\":\"OwnableUpgradeSafe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol\":{\"keccak256\":\"0x2a7a3283ace985c58643ad7045551778f50174a0665ea2383eccb04254d0c5ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://baf62f2ce6e2285dfeb8833dbb7e48462780accde795637faf39294db97baf87\",\"dweb:/ipfs/QmYbZCPR7gqVZ7QqkimQ85XyQLbS9AELmbAWWB1igRcJF5\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol": {
+ "OwnedUpgradeabilityProxy": {
+ "abi": [
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "ProxyOwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "inputs": [],
+ "name": "implementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "impl",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "proxyOwner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferProxyOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_implementation",
+ "type": "address"
+ }
+ ],
+ "name": "upgradeTo",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_implementation",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "upgradeToAndCall",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610023336001600160e01b0361002816565b61005d565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6104958061006c6000396000f3fe60806040526004361061004a5760003560e01c8063025313a21461008e5780633659cfe6146100bf5780634f1ef286146100f45780635c60da1b14610174578063f1739cae14610189575b60006100546101bc565b90506001600160a01b03811661006957600080fd5b60405136600082376000803683855af43d806000843e81801561008a578184f35b8184fd5b34801561009a57600080fd5b506100a36101df565b604080516001600160a01b039092168252519081900360200190f35b3480156100cb57600080fd5b506100f2600480360360208110156100e257600080fd5b50356001600160a01b0316610215565b005b6100f26004803603604081101561010a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013557600080fd5b82018360208201111561014757600080fd5b8035906020019184600183028401116401000000008311171561016957600080fd5b509092509050610246565b34801561018057600080fd5b506100a36101bc565b34801561019557600080fd5b506100f2600480360360208110156101ac57600080fd5b50356001600160a01b03166102ed565b600080604051808061043d60239139604051908190036023019020549392505050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a0190205490565b61021d6101df565b6001600160a01b0316336001600160a01b03161461023a57600080fd5b61024381610379565b50565b61024e6101df565b6001600160a01b0316336001600160a01b03161461026b57600080fd5b61027483610215565b6000306001600160a01b0316348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102d4576040519150601f19603f3d011682016040523d82523d6000602084013e6102d9565b606091505b50509050806102e757600080fd5b50505050565b6102f56101df565b6001600160a01b0316336001600160a01b03161461031257600080fd5b6001600160a01b03811661032557600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961034e6101df565b604080516001600160a01b03928316815291841660208301528051918290030190a1610243816103e5565b60006103836101bc565b9050816001600160a01b0316816001600160a01b031614156103a457600080fd5b6103ad8261041a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6000604051808061043d6023913960405190819003602301902092909255505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6ea2646970667358221220f2afd0d88ce5ca2e4e38002b51bde27c9952caa825a64af50a818c922bbe776864736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x28 AND JUMP JUMPDEST PUSH2 0x5D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x495 DUP1 PUSH2 0x6C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x25313A2 EQ PUSH2 0x8E JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xF1739CAE EQ PUSH2 0x189 JUMPI JUMPDEST PUSH1 0x0 PUSH2 0x54 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLDATASIZE PUSH1 0x0 DUP3 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL RETURNDATASIZE DUP1 PUSH1 0x0 DUP5 RETURNDATACOPY DUP2 DUP1 ISZERO PUSH2 0x8A JUMPI DUP2 DUP5 RETURN JUMPDEST DUP2 DUP5 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x246 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x21D PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x23A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243 DUP2 PUSH2 0x379 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x274 DUP4 PUSH2 0x215 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLVALUE DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2D4 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 0x2D9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2F5 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x5A3E66EFAA1E445EBD894728A69D6959842EA1E97BD79B892797106E270EFCD9 PUSH2 0x34E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 PUSH2 0x243 DUP2 PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x383 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AD DUP3 PUSH2 0x41A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE POP POP JUMP INVALID PUSH16 0x72672E7A657070656C696E6F732E7072 PUSH16 0x78792E696D706C656D656E746174696F PUSH15 0xA2646970667358221220F2AFD0D88C 0xE5 0xCA 0x2E 0x4E CODESIZE STOP 0x2B MLOAD 0xBD 0xE2 PUSH29 0x9952CAA825A64AF50A818C922BBE776864736F6C634300060A00330000 ",
+ "sourceMap": "294:2902:59:-:0;;;907:72;;;;;;;;;-1:-1:-1;938:34:59;961:10;938:22;:34::i;:::-;294:2902;;1565:193;754:39;;;;;;;;;;;;;;;;1710:32;1696:56::o;294:2902::-;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "60806040526004361061004a5760003560e01c8063025313a21461008e5780633659cfe6146100bf5780634f1ef286146100f45780635c60da1b14610174578063f1739cae14610189575b60006100546101bc565b90506001600160a01b03811661006957600080fd5b60405136600082376000803683855af43d806000843e81801561008a578184f35b8184fd5b34801561009a57600080fd5b506100a36101df565b604080516001600160a01b039092168252519081900360200190f35b3480156100cb57600080fd5b506100f2600480360360208110156100e257600080fd5b50356001600160a01b0316610215565b005b6100f26004803603604081101561010a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013557600080fd5b82018360208201111561014757600080fd5b8035906020019184600183028401116401000000008311171561016957600080fd5b509092509050610246565b34801561018057600080fd5b506100a36101bc565b34801561019557600080fd5b506100f2600480360360208110156101ac57600080fd5b50356001600160a01b03166102ed565b600080604051808061043d60239139604051908190036023019020549392505050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a0190205490565b61021d6101df565b6001600160a01b0316336001600160a01b03161461023a57600080fd5b61024381610379565b50565b61024e6101df565b6001600160a01b0316336001600160a01b03161461026b57600080fd5b61027483610215565b6000306001600160a01b0316348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102d4576040519150601f19603f3d011682016040523d82523d6000602084013e6102d9565b606091505b50509050806102e757600080fd5b50505050565b6102f56101df565b6001600160a01b0316336001600160a01b03161461031257600080fd5b6001600160a01b03811661032557600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961034e6101df565b604080516001600160a01b03928316815291841660208301528051918290030190a1610243816103e5565b60006103836101bc565b9050816001600160a01b0316816001600160a01b031614156103a457600080fd5b6103ad8261041a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b604080517f6f72672e7a657070656c696e6f732e70726f78792e6f776e65720000000000008152905190819003601a01902055565b6000604051808061043d6023913960405190819003602301902092909255505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6ea2646970667358221220f2afd0d88ce5ca2e4e38002b51bde27c9952caa825a64af50a818c922bbe776864736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x25313A2 EQ PUSH2 0x8E JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xF1739CAE EQ PUSH2 0x189 JUMPI JUMPDEST PUSH1 0x0 PUSH2 0x54 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLDATASIZE PUSH1 0x0 DUP3 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL RETURNDATASIZE DUP1 PUSH1 0x0 DUP5 RETURNDATACOPY DUP2 DUP1 ISZERO PUSH2 0x8A JUMPI DUP2 DUP5 RETURN JUMPDEST DUP2 DUP5 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x246 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3 PUSH2 0x1BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x21D PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x23A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243 DUP2 PUSH2 0x379 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x274 DUP4 PUSH2 0x215 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLVALUE DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2D4 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 0x2D9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2F5 PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x5A3E66EFAA1E445EBD894728A69D6959842EA1E97BD79B892797106E270EFCD9 PUSH2 0x34E PUSH2 0x1DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 PUSH2 0x243 DUP2 PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x383 PUSH2 0x1BC JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AD DUP3 PUSH2 0x41A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F72672E7A657070656C696E6F732E70726F78792E6F776E6572000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x1A ADD SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x43D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE POP POP JUMP INVALID PUSH16 0x72672E7A657070656C696E6F732E7072 PUSH16 0x78792E696D706C656D656E746174696F PUSH15 0xA2646970667358221220F2AFD0D88C 0xE5 0xCA 0x2E 0x4E CODESIZE STOP 0x2B MLOAD 0xBD 0xE2 PUSH29 0x9952CAA825A64AF50A818C922BBE776864736F6C634300060A00330000 ",
+ "sourceMap": "294:2902:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;715:13:60;731:16;:14;:16::i;:::-;715:32;-1:-1:-1;;;;;;765:19:60;;757:28;;;;;;836:4;830:11;875:14;872:1;867:3;854:36;968:1;965;949:14;944:3;937:5;930;917:53;995:16;1047:4;1044:1;1039:3;1024:28;1073:6;1092:56;;;;1199:4;1194:3;1187:17;1092:56;1129:4;1124:3;1117:17;1267:178:59;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1267:178:59;;;;;;;;;;;;;;2354:110;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2354:110:59;-1:-1:-1;;;;;2354:110:59;;:::i;:::-;;2950:244;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2950:244:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:244:59;;-1:-1:-1;2950:244:59;-1:-1:-1;2950:244:59;:::i;882:193:62:-;;;;;;;;;;;;;:::i;1930:230:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1930:230:59;-1:-1:-1;;;;;1930:230:59;;:::i;882:193:62:-;938:12;962:16;693:48;;;;;;;;;;;;;;;;;;1044:15;;1022:47;-1:-1:-1;;;1022:47:62:o;1267:178:59:-;754:39;;;;;;;;;;;;;;;;1414:15;;1391:48::o;2354:110::-;1125:12;:10;:12::i;:::-;-1:-1:-1;;;;;1111:26:59;:10;:26;1103:35;;;;;;2430:27:::1;2441:15;2430:10;:27::i;:::-;2354:110:::0;:::o;2950:244::-;1125:12;:10;:12::i;:::-;-1:-1:-1;;;;;1111:26:59;:10;:26;1103:35;;;;;;3063:26:::1;3073:15;3063:9;:26::i;:::-;3118:43;::::0;3100:12:::1;::::0;3126:4:::1;::::0;3144:9:::1;::::0;3155:5;;;;3118:43;3155:5;;;;3118:43;::::1;;::::0;;::::1;::::0;-1:-1:-1;3118:43:59::1;::::0;-1:-1:-1;3118:43:59;;-1:-1:-1;;3118:43:59;;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3099:62;;;3179:7;3171:16;;;::::0;::::1;;1148:1;2950:244:::0;;;:::o;1930:230::-;1125:12;:10;:12::i;:::-;-1:-1:-1;;;;;1111:26:59;:10;:26;1103:35;;;;;;-1:-1:-1;;;;;2021:23:59;::::1;2013:32;;;::::0;::::1;;2060:50;2086:12;:10;:12::i;:::-;2060:50;::::0;;-1:-1:-1;;;;;2060:50:59;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;2120:33;2143:9;2120:22;:33::i;1607:274:62:-:0;1674:29;1706:16;:14;:16::i;:::-;1674:48;-1:-1:-1;;;;;;1740:43:62;;;;;;;;1732:52;;;;;;1794:37;1812:18;1794:17;:37::i;:::-;1846:28;;-1:-1:-1;;;;;1846:28:62;;;;;;;;1607:274;;:::o;1565:193:59:-;754:39;;;;;;;;;;;;;;;;1710:32;1696:56::o;1243:200:62:-;1317:16;693:48;;;;;;;;;;;;;;;;;;1391:36;;;;-1:-1:-1;;1377:60:62:o"
+ },
+ "methodIdentifiers": {
+ "implementation()": "5c60da1b",
+ "proxyOwner()": "025313a2",
+ "transferProxyOwnership(address)": "f1739cae",
+ "upgradeTo(address)": "3659cfe6",
+ "upgradeToAndCall(address,bytes)": "4f1ef286"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"ProxyOwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferProxyOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract combines an upgradeability proxy with basic authorization control functionalities\",\"methods\":{\"constructor\":{\"details\":\"the constructor sets the original owner of the contract to the sender account.\"},\"implementation()\":{\"details\":\"Tells the address of the current implementation\",\"returns\":{\"impl\":\"address of the current implementation\"}},\"proxyOwner()\":{\"details\":\"Tells the address of the owner\",\"returns\":{\"owner\":\"the address of the owner\"}},\"transferProxyOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"_newOwner\":\"The address to transfer ownership to.\"}},\"upgradeTo(address)\":{\"details\":\"Allows the proxy owner to upgrade the current version of the proxy.\",\"params\":{\"_implementation\":\"representing the address of the new implementation to be set.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Allows the proxy owner to upgrade the current version of the proxy and call the new implementation to initialize whatever is needed through a low level call.\",\"params\":{\"_data\":\"represents the msg.data to bet sent in the low level call. This parameter may include the function signature of the implementation to be called with the needed payload\",\"_implementation\":\"representing the address of the new implementation to be set.\"}}},\"stateVariables\":{\"proxyOwnerPosition\":{\"details\":\"Storage position of the owner of the contract\"}},\"title\":\"OwnedUpgradeabilityProxy\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol\":\"OwnedUpgradeabilityProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol\":{\"keccak256\":\"0x1f32caffdf76f9ddf1848d394e63dfafb7d5327df56b645e08666b07f3797a44\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://31289a72ebeb94c37960c5a5fe680ae2eeffa2a2bf3a968d7ec448cdd2d21865\",\"dweb:/ipfs/QmTYcfxKTdNMbKeveJV8Xv7RhR4bHxjUZWsTTRGmJcug49\"]},\"contracts/packages/oz/upgradeability/Proxy.sol\":{\"keccak256\":\"0x90f189968a3dece9fea91aec114ba65748fcb3baec2da20bf6e70a4fda78f416\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://df9dc9929a264be0da59941145895fd152aad7eb7766ba4adf74105b7bf1e080\",\"dweb:/ipfs/QmQQZDkW77NwK3waeh95aZzD1uM1DNgXJaVtxRx8hW4eL6\"]},\"contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol\":{\"keccak256\":\"0x762536e1e1f155354c34d4a227195c0cfdc77742e371aaa5b061e79a7b863401\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://48d898dc4c054f5d1da814f7ef0d538f7bc58a02ff338b48773819e61f9bf7fa\",\"dweb:/ipfs/QmRnKjmVtsVvVk5W6GEh3J2VkDoUpBPyUxWCuKPNw4rcPd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/Proxy.sol": {
+ "Proxy": {
+ "abi": [
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "inputs": [],
+ "name": "implementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "implementation()": "5c60da1b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Gives the possibility to delegate any call to a foreign implementation.\",\"methods\":{\"implementation()\":{\"details\":\"Tells the address of the implementation where every call will be delegated.\",\"returns\":{\"_0\":\"address of the implementation to which it will be delegated\"}}},\"title\":\"Proxy\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Proxy.sol\":{\"keccak256\":\"0x90f189968a3dece9fea91aec114ba65748fcb3baec2da20bf6e70a4fda78f416\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://df9dc9929a264be0da59941145895fd152aad7eb7766ba4adf74105b7bf1e080\",\"dweb:/ipfs/QmQQZDkW77NwK3waeh95aZzD1uM1DNgXJaVtxRx8hW4eL6\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol": {
+ "ReentrancyGuardUpgradeSafe": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212209da2464457163312831d278848ae07f1a15d2a3fa46f3459262fa24a43dd5b7b64736f6c634300060a0033",
+ "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 SWAP14 LOG2 CHAINID DIFFICULTY JUMPI AND CALLER SLT DUP4 SAR 0x27 DUP9 0x48 0xAE SMOD CALL LOG1 0x5D 0x2A EXTCODEHASH LOG4 PUSH16 0x3459262FA24A43DD5B7B64736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "885:1557:61:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "6080604052600080fdfea26469706673582212209da2464457163312831d278848ae07f1a15d2a3fa46f3459262fa24a43dd5b7b64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 LOG2 CHAINID DIFFICULTY JUMPI AND CALLER SLT DUP4 SAR 0x27 DUP9 0x48 0xAE SMOD CALL LOG1 0x5D 0x2A EXTCODEHASH LOG4 PUSH16 0x3459262FA24A43DD5B7B64736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "885:1557:61:-:0;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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].\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol\":\"ReentrancyGuardUpgradeSafe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol\":{\"keccak256\":\"0x57cae6e6b294632e501446cbdf7a21ad8945869b249b49c699d84af63baaacbc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e736cd8a17692b7f7a4036bb7a8682ac040821eb7e3eeb1140eb40631e6f97d6\",\"dweb:/ipfs/QmdogWK1hx6KpGcq9iCieVGjGX4Bo7mFTokKfNq27Mh8Xd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol": {
+ "UpgradeabilityProxy": {
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "inputs": [],
+ "name": "implementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "impl",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610106806100206000396000f3fe608060405260043610601c5760003560e01c80635c60da1b14605c575b60006024608a565b90506001600160a01b038116603857600080fd5b60405136600082376000803683855af43d806000843e8180156058578184f35b8184fd5b348015606757600080fd5b50606e608a565b604080516001600160a01b039092168252519081900360200190f35b60008060405180806100ae6023913960405190819003602301902054939250505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6ea2646970667358221220c5ca8590c14a8edb92d1833767091be52fbfb8076b68852b7925c99da2b9849864736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x106 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x1C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B EQ PUSH1 0x5C JUMPI JUMPDEST PUSH1 0x0 PUSH1 0x24 PUSH1 0x8A JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLDATASIZE PUSH1 0x0 DUP3 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL RETURNDATASIZE DUP1 PUSH1 0x0 DUP5 RETURNDATACOPY DUP2 DUP1 ISZERO PUSH1 0x58 JUMPI DUP2 DUP5 RETURN JUMPDEST DUP2 DUP5 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6E PUSH1 0x8A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0xAE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SLOAD SWAP4 SWAP3 POP POP POP JUMP INVALID PUSH16 0x72672E7A657070656C696E6F732E7072 PUSH16 0x78792E696D706C656D656E746174696F PUSH15 0xA2646970667358221220C5CA8590C1 0x4A DUP15 0xDB SWAP3 0xD1 DUP4 CALLDATACOPY PUSH8 0x91BE52FBFB8076B PUSH9 0x852B7925C99DA2B984 SWAP9 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "287:1596:62:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405260043610601c5760003560e01c80635c60da1b14605c575b60006024608a565b90506001600160a01b038116603857600080fd5b60405136600082376000803683855af43d806000843e8180156058578184f35b8184fd5b348015606757600080fd5b50606e608a565b604080516001600160a01b039092168252519081900360200190f35b60008060405180806100ae6023913960405190819003602301902054939250505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6ea2646970667358221220c5ca8590c14a8edb92d1833767091be52fbfb8076b68852b7925c99da2b9849864736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x1C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B EQ PUSH1 0x5C JUMPI JUMPDEST PUSH1 0x0 PUSH1 0x24 PUSH1 0x8A JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLDATASIZE PUSH1 0x0 DUP3 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL RETURNDATASIZE DUP1 PUSH1 0x0 DUP5 RETURNDATACOPY DUP2 DUP1 ISZERO PUSH1 0x58 JUMPI DUP2 DUP5 RETURN JUMPDEST DUP2 DUP5 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6E PUSH1 0x8A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0xAE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x23 ADD SWAP1 KECCAK256 SLOAD SWAP4 SWAP3 POP POP POP JUMP INVALID PUSH16 0x72672E7A657070656C696E6F732E7072 PUSH16 0x78792E696D706C656D656E746174696F PUSH15 0xA2646970667358221220C5CA8590C1 0x4A DUP15 0xDB SWAP3 0xD1 DUP4 CALLDATACOPY PUSH8 0x91BE52FBFB8076B PUSH9 0x852B7925C99DA2B984 SWAP9 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "287:1596:62:-:0;;;;;;;;;;;;;;;;;;715:13:60;731:16;:14;:16::i;:::-;715:32;-1:-1:-1;;;;;;765:19:60;;757:28;;;;;;836:4;830:11;875:14;872:1;867:3;854:36;968:1;965;949:14;944:3;937:5;930;917:53;995:16;1047:4;1044:1;1039:3;1024:28;1073:6;1092:56;;;;1199:4;1194:3;1187:17;1092:56;1129:4;1124:3;1117:17;882:193:62;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;882:193:62;;;;;;;;;;;;;;;938:12;962:16;693:48;;;;;;;;;;;;;;;;;;1044:15;;1022:47;-1:-1:-1;;;1022:47:62:o"
+ },
+ "methodIdentifiers": {
+ "implementation()": "5c60da1b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract represents a proxy where the implementation address to which it will delegate can be upgraded\",\"methods\":{\"implementation()\":{\"details\":\"Tells the address of the current implementation\",\"returns\":{\"impl\":\"address of the current implementation\"}}},\"stateVariables\":{\"implementationPosition\":{\"details\":\"Storage position of the address of the current implementation\"}},\"title\":\"UpgradeabilityProxy\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol\":\"UpgradeabilityProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Proxy.sol\":{\"keccak256\":\"0x90f189968a3dece9fea91aec114ba65748fcb3baec2da20bf6e70a4fda78f416\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://df9dc9929a264be0da59941145895fd152aad7eb7766ba4adf74105b7bf1e080\",\"dweb:/ipfs/QmQQZDkW77NwK3waeh95aZzD1uM1DNgXJaVtxRx8hW4eL6\"]},\"contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol\":{\"keccak256\":\"0x762536e1e1f155354c34d4a227195c0cfdc77742e371aaa5b061e79a7b863401\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://48d898dc4c054f5d1da814f7ef0d538f7bc58a02ff338b48773819e61f9bf7fa\",\"dweb:/ipfs/QmRnKjmVtsVvVk5W6GEh3J2VkDoUpBPyUxWCuKPNw4rcPd\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol": {
+ "ECDSAUpgradeable": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c85183a28a81b9780f49019b85603c72a05daa91a3d8a1903439e9f19eabf0364736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 SWAP13 DUP6 XOR GASPRICE 0x28 0xA8 SHL SWAP8 DUP1 DELEGATECALL SWAP1 NOT 0xB8 JUMP SUB 0xC7 0x2A SDIV 0xDA 0xA9 BYTE RETURNDATASIZE DUP11 NOT SUB NUMBER SWAP15 SWAP16 NOT 0xEA 0xBF SUB PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "316:3716:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c85183a28a81b9780f49019b85603c72a05daa91a3d8a1903439e9f19eabf0364736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 DUP6 XOR GASPRICE 0x28 0xA8 SHL SWAP8 DUP1 DELEGATECALL SWAP1 NOT 0xB8 JUMP SUB 0xC7 0x2A SDIV 0xDA 0xA9 BYTE RETURNDATASIZE DUP11 NOT SUB NUMBER SWAP15 SWAP16 NOT 0xEA 0xBF SUB PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "316:3716:63:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":\"ECDSAUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0x089264e9f61815e40a3acf85cb1077e81be8aab6728bd423cf52714e1fbf05cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6e77372ba9c9604248fb33b0e23f1d6969ad60aeaa0e8f6aa94570802a73cc7\",\"dweb:/ipfs/QmTtgkYETk9ZNXRsHZJscsEJUXPsckNfZDkfVXjzCHrLE5\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol": {
+ "EIP712Upgradeable": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in their contracts using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":\"EIP712Upgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":{\"keccak256\":\"0x272ded2b13c715a655b575e51a04aa0d1d8205603bed6c8825e99b78b94b40bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e88cc43e187de68a698561c5fc6bbe50a2847c3fe3a15571413b5f5f9779400a\",\"dweb:/ipfs/QmYRcBveKTjqrrPpbfgpZwcCQay2mN2Pww5pvCUpniS54F\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol": {
+ "ERC20PermitUpgradeable": {
+ "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": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "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": [
+ {
+ "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": [
+ {
+ "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": "amount",
+ "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": [],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "increaseAllowance(address,uint256)": "39509351",
+ "name()": "06fdde03",
+ "nonces(address)": "7ecebe00",
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":[{\"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\":[{\"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\":\"amount\",\"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\":[],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"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 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.\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\":\"ERC20PermitUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0x089264e9f61815e40a3acf85cb1077e81be8aab6728bd423cf52714e1fbf05cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6e77372ba9c9604248fb33b0e23f1d6969ad60aeaa0e8f6aa94570802a73cc7\",\"dweb:/ipfs/QmTtgkYETk9ZNXRsHZJscsEJUXPsckNfZDkfVXjzCHrLE5\"]},\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":{\"keccak256\":\"0x272ded2b13c715a655b575e51a04aa0d1d8205603bed6c8825e99b78b94b40bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e88cc43e187de68a698561c5fc6bbe50a2847c3fe3a15571413b5f5f9779400a\",\"dweb:/ipfs/QmYRcBveKTjqrrPpbfgpZwcCQay2mN2Pww5pvCUpniS54F\"]},\"contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xb3a655c9ab3da27ebe99ef47b4b95f699fa02b99c8911aa1f32c906e48e429fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adbdc052be7e3fe0350a8e634f4cd9114386ec25411c3b8425fad5e4501f7cae\",\"dweb:/ipfs/QmbbWNivd3woPq1rDgJYxiL7mVBT9auABvkrechyJ1JjDt\"]},\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]},\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0xf959d721bc9136a6e59e82953c1c5024996dfd00a68a17d37f7fc42651d855b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://25bdcbfdac49598b552c67be6b89dc87a46ac177330da3b0c4854ea31019da1e\",\"dweb:/ipfs/QmaWctiuA3r1iejQ2JBCbkip4NEUq9zQ4CHXZuFYRsyCRP\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol": {
+ "IERC20PermitUpgradeable": {
+ "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": "amount",
+ "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"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "",
+ "opcodes": "",
+ "sourceMap": ""
+ },
+ "methodIdentifiers": {
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "nonces(address)": "7ecebe00",
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":\"amount\",\"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.\",\"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 `amount` 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].\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":\"IERC20PermitUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol": {
+ "SafeMathUpgradeable": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203b5c9a36f59cc2aa19d5669886339f2dd5f670ff5fbc4bd729e79f7e6fca38b264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 EXTCODESIZE 0x5C SWAP11 CALLDATASIZE CREATE2 SWAP13 0xC2 0xAA NOT 0xD5 PUSH7 0x9886339F2DD5F6 PUSH17 0xFF5FBC4BD729E79F7E6FCA38B264736F6C PUSH4 0x4300060A STOP CALLER ",
+ "sourceMap": "675:4679:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203b5c9a36f59cc2aa19d5669886339f2dd5f670ff5fbc4bd729e79f7e6fca38b264736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE 0x5C SWAP11 CALLDATASIZE CREATE2 SWAP13 0xC2 0xAA NOT 0xD5 PUSH7 0x9886339F2DD5F6 PUSH17 0xFF5FBC4BD729E79F7E6FCA38B264736F6C PUSH4 0x4300060A STOP CALLER ",
+ "sourceMap": "675:4679:67:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when 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.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":\"SafeMathUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]}},\"version\":1}"
+ }
+ },
+ "contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol": {
+ "CountersUpgradeable": {
+ "abi": [],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ea2443b8cf245a7dc6cee6b39e4b8cb68c998a91e8bc96cf1e8154caedb6ad0064736f6c634300060a0033",
+ "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xEA 0x24 NUMBER 0xB8 0xCF 0x24 GAS PUSH30 0xC6CEE6B39E4B8CB68C998A91E8BC96CF1E8154CAEDB6AD0064736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "726:870:68:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ea2443b8cf245a7dc6cee6b39e4b8cb68c998a91e8bc96cf1e8154caedb6ad0064736f6c634300060a0033",
+ "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA 0x24 NUMBER 0xB8 0xCF 0x24 GAS PUSH30 0xC6CEE6B39E4B8CB68C998A91E8BC96CF1E8154CAEDB6AD0064736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "726:870:68:-:0;;;;;;;;"
+ },
+ "methodIdentifiers": {}
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matt Condon (@shrugs)\",\"details\":\"Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;` Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never directly accessed.\",\"methods\":{},\"title\":\"Counters\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":\"CountersUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]},\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0xf959d721bc9136a6e59e82953c1c5024996dfd00a68a17d37f7fc42651d855b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://25bdcbfdac49598b552c67be6b89dc87a46ac177330da3b0c4854ea31019da1e\",\"dweb:/ipfs/QmaWctiuA3r1iejQ2JBCbkip4NEUq9zQ4CHXZuFYRsyCRP\"]}},\"version\":1}"
+ }
+ },
+ "contracts/pricers/ChainlinkPricer.sol": {
+ "ChainLinkPricer": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_bot",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_asset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_aggregator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "aggregator",
+ "outputs": [
+ {
+ "internalType": "contract AggregatorInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "aggregatorDecimals",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "asset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "bot",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getHistoricalPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "setExpiryPriceInOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50604051610a3b380380610a3b8339818101604052608081101561003357600080fd5b50805160208201516040830151606090930151919290916001600160a01b03841661008f5760405162461bcd60e51b815260040180806020018281038252602c815260200180610a0f602c913960400191505060405180910390fd5b6001600160a01b0381166100d45760405162461bcd60e51b815260040180806020018281038252602f8152602001806109ad602f913960400191505060405180910390fd5b6001600160a01b0382166101195760405162461bcd60e51b81526004018080602001828103825260338152602001806109dc6033913960400191505060405180910390fd5b600480546001600160a01b03199081166001600160a01b03878116919091178355600180548316858316179055600280548316868316179081905560038054909316878316179092556040805163313ce56760e01b81529051929091169263313ce567928282019260209290829003018186803b15801561019957600080fd5b505afa1580156101ad573d6000803e3d6000fd5b505050506040513d60208110156101c357600080fd5b505160ff16600055505050506107cf806101de6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637dc0d1d01161005b5780637dc0d1d0146100db57806398d5fdca146100e3578063b2b63d9f146100eb578063eec377c01461011c57610088565b806310814c371461008d578063245a7bfc146100b157806331b46c8b146100b957806338d52e0f146100d3575b600080fd5b61009561015e565b604080516001600160a01b039092168252519081900360200190f35b61009561016d565b6100c161017c565b60408051918252519081900360200190f35b610095610182565b610095610191565b6100c16101a0565b61011a6004803603604081101561010157600080fd5b508035906020013569ffffffffffffffffffff16610270565b005b6101456004803603602081101561013257600080fd5b503569ffffffffffffffffffff16610422565b6040805192835260208301919091528051918290030190f35b6004546001600160a01b031681565b6002546001600160a01b031681565b60005481565b6003546001600160a01b031681565b6001546001600160a01b031681565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156101f157600080fd5b505afa158015610205573d6000803e3d6000fd5b505050506040513d60a081101561021b57600080fd5b50602001519050600081136102615760405162461bcd60e51b81526004018080602001828103825260268152602001806107536026913960400191505060405180910390fd5b61026a816104cd565b91505090565b6004546001600160a01b031633146102b95760405162461bcd60e51b815260040180806020018281038252602481526020018061072f6024913960400191505060405180910390fd5b60025460408051639a6fc8f560e01b815269ffffffffffffffffffff84166004820152905160009283926001600160a01b0390911691639a6fc8f59160248082019260a092909190829003018186803b15801561031557600080fd5b505afa158015610329573d6000803e3d6000fd5b505050506040513d60a081101561033f57600080fd5b5060208101516060909101519092509050808411156103a5576040805162461bcd60e51b815260206004820181905260248201527f436861696e4c696e6b5072696365723a20696e76616c696420726f756e644964604482015290519081900360640190fd5b6001546003546040805163ee53140960e01b81526001600160a01b03928316600482015260248101889052604481018690529051919092169163ee53140991606480830192600092919082900301818387803b15801561040457600080fd5b505af1158015610418573d6000803e3d6000fd5b5050505050505050565b60025460408051639a6fc8f560e01b815269ffffffffffffffffffff8416600482015290516000928392839283926001600160a01b031691639a6fc8f59160248083019260a0929190829003018186803b15801561047f57600080fd5b505afa158015610493573d6000803e3d6000fd5b505050506040513d60a08110156104a957600080fd5b50602081015160609091015190925090506104c3826104cd565b9350915050915091565b60006008600054111561050d57600080546104ef90600863ffffffff61054c16565b905061050583600a83900a63ffffffff61059716565b925050610548565b60086000541015610548576000805461052e9060089063ffffffff61054c16565b905061054483600a83900a63ffffffff6105d916565b9250505b5090565b600061058e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610632565b90505b92915050565b600061058e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506106c9565b6000826105e857506000610591565b828202828482816105f557fe5b041461058e5760405162461bcd60e51b81526004018080602001828103825260218152602001806107796021913960400191505060405180910390fd5b600081848411156106c15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561068657818101518382015260200161066e565b50505050905090810190601f1680156106b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836107185760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561068657818101518382015260200161066e565b50600083858161072457fe5b049594505050505056fe436861696e4c696e6b5072696365723a20756e617574686f72697a65642073656e646572436861696e4c696e6b5072696365723a207072696365206973206c6f776572207468616e2030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122086db7b915f54ee8730d1985eb8482e3e06cbe5dcb0524f6740573d5b6930c11564736f6c634300060a0033436861696e4c696e6b5072696365723a2043616e6e6f742073657420302061646472657373206173206f7261636c65436861696e4c696e6b5072696365723a2043616e6e6f7420736574203020616464726573732061732061676772656761746f72436861696e4c696e6b5072696365723a2043616e6e6f74207365742030206164647265737320617320626f74",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xA3B CODESIZE SUB DUP1 PUSH2 0xA3B DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA0F PUSH1 0x2C SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x9AD PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x119 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x9DC PUSH1 0x33 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 SWAP1 SWAP2 OR DUP4 SSTORE PUSH1 0x1 DUP1 SLOAD DUP4 AND DUP6 DUP4 AND OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP4 AND DUP7 DUP4 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP4 AND DUP8 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP1 SWAP2 AND SWAP3 PUSH4 0x313CE567 SWAP3 DUP3 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x0 SSTORE POP POP POP POP PUSH2 0x7CF DUP1 PUSH2 0x1DE 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 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7DC0D1D0 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0xB2B63D9F EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0x11C JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x10814C37 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x245A7BFC EQ PUSH2 0xB1 JUMPI DUP1 PUSH4 0x31B46C8B EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x38D52E0F EQ PUSH2 0xD3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x16D JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x17C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x182 JUMP JUMPDEST PUSH2 0x95 PUSH2 0x191 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x1A0 JUMP JUMPDEST PUSH2 0x11A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x270 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x145 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x422 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 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 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x205 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x261 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x753 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26A DUP2 PUSH2 0x4CD JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x72F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x9A6FC8F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x9A6FC8F5 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x329 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436861696E4C696E6B5072696365723A20696E76616C696420726F756E644964 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xEE531409 SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x418 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x9A6FC8F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x9A6FC8F5 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x493 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x4C3 DUP3 PUSH2 0x4CD JUMP JUMPDEST SWAP4 POP SWAP2 POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 PUSH1 0x0 SLOAD GT ISZERO PUSH2 0x50D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0x4EF SWAP1 PUSH1 0x8 PUSH4 0xFFFFFFFF PUSH2 0x54C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x505 DUP4 PUSH1 0xA DUP4 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x597 AND JUMP JUMPDEST SWAP3 POP POP PUSH2 0x548 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 SLOAD LT ISZERO PUSH2 0x548 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0x52E SWAP1 PUSH1 0x8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x54C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x544 DUP4 PUSH1 0xA DUP4 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x5D9 AND JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x632 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x6C9 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5E8 JUMPI POP PUSH1 0x0 PUSH2 0x591 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x5F5 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x58E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x779 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x686 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x66E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6B3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x718 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x686 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x66E JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x724 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID NUMBER PUSH9 0x61696E4C696E6B5072 PUSH10 0x6365723A20756E617574 PUSH9 0x6F72697A6564207365 PUSH15 0x646572436861696E4C696E6B507269 PUSH4 0x65723A20 PUSH17 0x72696365206973206C6F77657220746861 PUSH15 0x2030536166654D6174683A206D756C PUSH21 0x69706C69636174696F6E206F766572666C6F77A264 PUSH10 0x7066735822122086DB7B SWAP2 0x5F SLOAD 0xEE DUP8 ADDRESS 0xD1 SWAP9 0x5E 0xB8 0x48 0x2E RETURNDATACOPY MOD 0xCB 0xE5 0xDC 0xB0 MSTORE 0x4F PUSH8 0x40573D5B6930C115 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER NUMBER PUSH9 0x61696E4C696E6B5072 PUSH10 0x6365723A2043616E6E6F PUSH21 0x2073657420302061646472657373206173206F7261 PUSH4 0x6C654368 PUSH2 0x696E 0x4C PUSH10 0x6E6B5072696365723A20 NUMBER PUSH2 0x6E6E PUSH16 0x74207365742030206164647265737320 PUSH2 0x7320 PUSH2 0x6767 PUSH19 0x656761746F72436861696E4C696E6B50726963 PUSH6 0x723A2043616E PUSH15 0x6F7420736574203020616464726573 PUSH20 0x20617320626F7400000000000000000000000000 ",
+ "sourceMap": "412:3843:69:-:0;;;1268:612;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1268:612:69;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1411:18:69;;1403:75;;;;-1:-1:-1;;;1403:75:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1496:21:69;;1488:81;;;;-1:-1:-1;;;1488:81:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1587:25:69;;1579:89;;;;-1:-1:-1;;;1579:89:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:3;:10;;-1:-1:-1;;;;;;1679:10:69;;;-1:-1:-1;;;;;1679:10:69;;;;;;;;;-1:-1:-1;1699:33:69;;;;;;;;;;1742:10;:45;;;;;;;;;;;;-1:-1:-1;1797:14:69;;;;;;;;;;;;1851:21;;;-1:-1:-1;;;1851:21:69;;;;:10;;;;;:19;;:21;;;;;;;;;;;;:10;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1851:21:69;1843:30;;1822:18;:51;-1:-1:-1;;;;412:3843:69;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100885760003560e01c80637dc0d1d01161005b5780637dc0d1d0146100db57806398d5fdca146100e3578063b2b63d9f146100eb578063eec377c01461011c57610088565b806310814c371461008d578063245a7bfc146100b157806331b46c8b146100b957806338d52e0f146100d3575b600080fd5b61009561015e565b604080516001600160a01b039092168252519081900360200190f35b61009561016d565b6100c161017c565b60408051918252519081900360200190f35b610095610182565b610095610191565b6100c16101a0565b61011a6004803603604081101561010157600080fd5b508035906020013569ffffffffffffffffffff16610270565b005b6101456004803603602081101561013257600080fd5b503569ffffffffffffffffffff16610422565b6040805192835260208301919091528051918290030190f35b6004546001600160a01b031681565b6002546001600160a01b031681565b60005481565b6003546001600160a01b031681565b6001546001600160a01b031681565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156101f157600080fd5b505afa158015610205573d6000803e3d6000fd5b505050506040513d60a081101561021b57600080fd5b50602001519050600081136102615760405162461bcd60e51b81526004018080602001828103825260268152602001806107536026913960400191505060405180910390fd5b61026a816104cd565b91505090565b6004546001600160a01b031633146102b95760405162461bcd60e51b815260040180806020018281038252602481526020018061072f6024913960400191505060405180910390fd5b60025460408051639a6fc8f560e01b815269ffffffffffffffffffff84166004820152905160009283926001600160a01b0390911691639a6fc8f59160248082019260a092909190829003018186803b15801561031557600080fd5b505afa158015610329573d6000803e3d6000fd5b505050506040513d60a081101561033f57600080fd5b5060208101516060909101519092509050808411156103a5576040805162461bcd60e51b815260206004820181905260248201527f436861696e4c696e6b5072696365723a20696e76616c696420726f756e644964604482015290519081900360640190fd5b6001546003546040805163ee53140960e01b81526001600160a01b03928316600482015260248101889052604481018690529051919092169163ee53140991606480830192600092919082900301818387803b15801561040457600080fd5b505af1158015610418573d6000803e3d6000fd5b5050505050505050565b60025460408051639a6fc8f560e01b815269ffffffffffffffffffff8416600482015290516000928392839283926001600160a01b031691639a6fc8f59160248083019260a0929190829003018186803b15801561047f57600080fd5b505afa158015610493573d6000803e3d6000fd5b505050506040513d60a08110156104a957600080fd5b50602081015160609091015190925090506104c3826104cd565b9350915050915091565b60006008600054111561050d57600080546104ef90600863ffffffff61054c16565b905061050583600a83900a63ffffffff61059716565b925050610548565b60086000541015610548576000805461052e9060089063ffffffff61054c16565b905061054483600a83900a63ffffffff6105d916565b9250505b5090565b600061058e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610632565b90505b92915050565b600061058e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506106c9565b6000826105e857506000610591565b828202828482816105f557fe5b041461058e5760405162461bcd60e51b81526004018080602001828103825260218152602001806107796021913960400191505060405180910390fd5b600081848411156106c15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561068657818101518382015260200161066e565b50505050905090810190601f1680156106b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836107185760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561068657818101518382015260200161066e565b50600083858161072457fe5b049594505050505056fe436861696e4c696e6b5072696365723a20756e617574686f72697a65642073656e646572436861696e4c696e6b5072696365723a207072696365206973206c6f776572207468616e2030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122086db7b915f54ee8730d1985eb8482e3e06cbe5dcb0524f6740573d5b6930c11564736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7DC0D1D0 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0xB2B63D9F EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0x11C JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x10814C37 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x245A7BFC EQ PUSH2 0xB1 JUMPI DUP1 PUSH4 0x31B46C8B EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x38D52E0F EQ PUSH2 0xD3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x16D JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x17C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x182 JUMP JUMPDEST PUSH2 0x95 PUSH2 0x191 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x1A0 JUMP JUMPDEST PUSH2 0x11A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x270 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x145 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x422 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 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 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x205 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x261 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x753 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26A DUP2 PUSH2 0x4CD JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x72F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x9A6FC8F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x9A6FC8F5 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x329 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436861696E4C696E6B5072696365723A20696E76616C696420726F756E644964 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xEE531409 SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x418 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x9A6FC8F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x9A6FC8F5 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x493 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x4C3 DUP3 PUSH2 0x4CD JUMP JUMPDEST SWAP4 POP SWAP2 POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 PUSH1 0x0 SLOAD GT ISZERO PUSH2 0x50D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0x4EF SWAP1 PUSH1 0x8 PUSH4 0xFFFFFFFF PUSH2 0x54C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x505 DUP4 PUSH1 0xA DUP4 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x597 AND JUMP JUMPDEST SWAP3 POP POP PUSH2 0x548 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 SLOAD LT ISZERO PUSH2 0x548 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0x52E SWAP1 PUSH1 0x8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x54C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x544 DUP4 PUSH1 0xA DUP4 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x5D9 AND JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x632 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x6C9 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5E8 JUMPI POP PUSH1 0x0 PUSH2 0x591 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x5F5 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x58E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x779 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x686 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x66E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6B3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x718 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x686 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x66E JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x724 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID NUMBER PUSH9 0x61696E4C696E6B5072 PUSH10 0x6365723A20756E617574 PUSH9 0x6F72697A6564207365 PUSH15 0x646572436861696E4C696E6B507269 PUSH4 0x65723A20 PUSH17 0x72696365206973206C6F77657220746861 PUSH15 0x2030536166654D6174683A206D756C PUSH21 0x69706C69636174696F6E206F766572666C6F77A264 PUSH10 0x7066735822122086DB7B SWAP2 0x5F SLOAD 0xEE DUP8 ADDRESS 0xD1 SWAP9 0x5E 0xB8 0x48 0x2E RETURNDATACOPY MOD 0xCB 0xE5 0xDC 0xB0 MSTORE 0x4F PUSH8 0x40573D5B6930C115 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "412:3843:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:18;;;:::i;:::-;;;;-1:-1:-1;;;;;975:18:69;;;;;;;;;;;;;;770:37;;;:::i;611:33::-;;;:::i;:::-;;;;;;;;;;;;;;;;874:20;;;:::i;691:29::-;;;:::i;2998:294::-;;;:::i;2454:352::-;;;;;;;;;;;;;;;;-1:-1:-1;2454:352:69;;;;;;;;;:::i;:::-;;3443:255;;;;;;;;;;;;;;;;-1:-1:-1;3443:255:69;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;975:18;;;-1:-1:-1;;;;;975:18:69;;:::o;770:37::-;;;-1:-1:-1;;;;;770:37:69;;:::o;611:33::-;;;;:::o;874:20::-;;;-1:-1:-1;;;;;874:20:69;;:::o;691:29::-;;;-1:-1:-1;;;;;691:29:69;;:::o;2998:294::-;3050:7;3072:13;3095:10;;;;;;;;;-1:-1:-1;;;;;3095:10:69;-1:-1:-1;;;;;3095:26:69;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3095:28:69;;;;-1:-1:-1;3150:1:69;3141:10;;3133:61;;;;-1:-1:-1;;;3133:61:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3256:29;3277:6;3256:12;:29::i;:::-;3249:36;;;2998:294;:::o;2454:352::-;2028:3;;-1:-1:-1;;;;;2028:3:69;2014:10;:17;2006:66;;;;-1:-1:-1;;;2006:66:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2603:10:::1;::::0;:33:::1;::::0;;-1:-1:-1;;;2603:33:69;;::::1;::::0;::::1;;::::0;::::1;::::0;;;2559:12:::1;::::0;;;-1:-1:-1;;;;;2603:10:69;;::::1;::::0;:23:::1;::::0;:33;;;;;::::1;::::0;;;;;;;;;:10;:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;2603:33:69::1;::::0;::::1;::::0;;;;;;;;-1:-1:-1;2603:33:69;-1:-1:-1;2655:34:69;;::::1;;2647:79;;;::::0;;-1:-1:-1;;;2647:79:69;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2737:6;::::0;2759:5:::1;::::0;2737:62:::1;::::0;;-1:-1:-1;;;2737:62:69;;-1:-1:-1;;;;;2759:5:69;;::::1;2737:62;::::0;::::1;::::0;;;;;;;;;;;;;;;:6;;;::::1;::::0;:21:::1;::::0;:62;;;;;:6:::1;::::0;:62;;;;;;;:6;;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2083:1;;2454:352:::0;;:::o;3443:255::-;3595:10;;:33;;;-1:-1:-1;;;3595:33:69;;;;;;;;;;;3520:7;;;;;;;;-1:-1:-1;;;;;3595:10:69;;:23;;:33;;;;;;;;;;;;;;:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3595:33:69;;;;;;;;;;;-1:-1:-1;3595:33:69;-1:-1:-1;3646:28:69;3595:33;3646:12;:28::i;:::-;3638:53;-1:-1:-1;3676:14:69;-1:-1:-1;;3443:255:69;;;:::o;3857:396::-;3918:7;559:1;3941:18;;:25;3937:286;;;3982:11;3996:18;;:28;;559:1;3996:28;:22;:28;:::i;:::-;3982:42;-1:-1:-1;4047:19:69;:6;4058:2;:7;;;4047:19;:10;:19;:::i;:::-;4038:28;;3937:286;;;;559:1;4087:18;;:25;4083:140;;;4128:11;4151:18;;4142:28;;559:1;;4142:28;:8;:28;:::i;:::-;4128:42;-1:-1:-1;4193:19:69;:6;4204:2;:7;;;4193:19;:10;:19;:::i;:::-;4184:28;;4083:140;;-1:-1:-1;4240:6:69;3857:396::o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1439:50;;1362:134;;;;;:::o;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;:3;:39::i;2237:459::-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1780:217;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;3756:368::-;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o"
+ },
+ "methodIdentifiers": {
+ "aggregator()": "245a7bfc",
+ "aggregatorDecimals()": "31b46c8b",
+ "asset()": "38d52e0f",
+ "bot()": "10814c37",
+ "getHistoricalPrice(uint80)": "eec377c0",
+ "getPrice()": "98d5fdca",
+ "oracle()": "7dc0d1d0",
+ "setExpiryPriceInOracle(uint256,uint80)": "b2b63d9f"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bot\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_aggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"aggregator\",\"outputs\":[{\"internalType\":\"contract AggregatorInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregatorDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bot\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getHistoricalPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"setExpiryPriceInOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"_aggregator\":\"Chainlink aggregator contract for the asset\",\"_asset\":\"asset that this pricer will get a price for\",\"_bot\":\"priveleged address that can call setExpiryPriceInOracle\",\"_oracle\":\"Opyn Oracle address\"}},\"getHistoricalPrice(uint80)\":{\"params\":{\"_roundId\":\"chainlink round id\"},\"returns\":{\"_0\":\"round price and timestamp\"}},\"getPrice()\":{\"details\":\"overides the getPrice function in OpynPricerInterface\",\"returns\":{\"_0\":\"price of the asset in USD, scaled by 1e8\"}},\"setExpiryPriceInOracle(uint256,uint80)\":{\"details\":\"a roundId must be provided to confirm price validity, which is the first Chainlink price provided after the expiryTimestamp\",\"params\":{\"_expiryTimestamp\":\"expiry to set a price for\",\"_roundId\":\"the first roundId after expiryTimestamp\"}}},\"stateVariables\":{\"BASE\":{\"details\":\"base decimals\"}}},\"userdoc\":{\"methods\":{\"aggregator()\":{\"notice\":\"the aggregator for an asset\"},\"aggregatorDecimals()\":{\"notice\":\"chainlink response decimals\"},\"asset()\":{\"notice\":\"asset that this pricer will a get price for\"},\"bot()\":{\"notice\":\"bot address that is allowed to call setExpiryPriceInOracle\"},\"getHistoricalPrice(uint80)\":{\"notice\":\"get historical chainlink price\"},\"getPrice()\":{\"notice\":\"get the live price for the asset\"},\"oracle()\":{\"notice\":\"the opyn oracle address\"},\"setExpiryPriceInOracle(uint256,uint80)\":{\"notice\":\"set the expiry price in the oracle, can only be called by Bot address\"}},\"notice\":\"A Pricer contract for one asset as reported by Chainlink\"}},\"settings\":{\"compilationTarget\":{\"contracts/pricers/ChainlinkPricer.sol\":\"ChainLinkPricer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/AggregatorInterface.sol\":{\"keccak256\":\"0xc3c386002d1d3a237c8eb0c43c7b26b073f50ceeadfde0dfad3f131dd0a72fa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://753b98595a6de7800958e0034a602b17096188d87e01fecf2b40fdfdb6937cef\",\"dweb:/ipfs/QmYRrAj5vSzD9PSdMqRp6YfVRoHLq44TKUnaEuLZb7wkmZ\"]},\"contracts/interfaces/OpynPricerInterface.sol\":{\"keccak256\":\"0xa937e5fa413ff096600cd4bb62795cda1aa6916a3ad4b1e50ab11aaf5cdd07c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://194bd27f9bbbac1a58c920bda262886f9cdc315985ad152c584f9715261d8317\",\"dweb:/ipfs/QmQGXWP6dNSBxhqrW93mAsS3E2ahBSNgnG5mBais6rgdaK\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/pricers/ChainlinkPricer.sol\":{\"keccak256\":\"0xa33f7941bea6d912fb9aab60bf670acdd55483725caaa8388ed6adb70bddb1b8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://acfbd142eaaa45000282d9f75e42e761cd652417ceea78196902f8fc306b488d\",\"dweb:/ipfs/QmcMBmpdq2z6X12Qmu3dtNHbchHf24BoUcasY97a8zB4PK\"]}},\"version\":1}"
+ }
+ },
+ "contracts/pricers/CompoundPricer.sol": {
+ "CompoundPricer": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_cToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "cToken",
+ "outputs": [
+ {
+ "internalType": "contract CTokenInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPriceInOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlying",
+ "outputs": [
+ {
+ "internalType": "contract ERC20Interface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506040516108f23803806108f28339818101604052606081101561003357600080fd5b50805160208201516040909201519091906001600160a01b0383166100895760405162461bcd60e51b815260040180806020018281038252602b8152602001806108c7602b913960400191505060405180910390fd5b6001600160a01b0382166100ce5760405162461bcd60e51b815260040180806020018281038252602f815260200180610898602f913960400191505060405180910390fd5b6001600160a01b0381166101135760405162461bcd60e51b815260040180806020018281038252602b81526020018061086d602b913960400191505060405180910390fd5b600180546001600160a01b039485166001600160a01b03199182161790915560028054938516938216939093179092556000805491909316911617905561070e8061015f6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806369e527da1461005c5780636f307dc3146100805780637dc0d1d014610088578063963672901461009057806398d5fdca146100af575b600080fd5b6100646100c9565b604080516001600160a01b039092168252519081900360200190f35b6100646100d8565b6100646100e7565b6100ad600480360360208110156100a657600080fd5b50356100f6565b005b6100b761023b565b60408051918252519081900360200190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561014a57600080fd5b505afa15801561015e573d6000803e3d6000fd5b505050506040513d604081101561017457600080fd5b50519050806101b45760405162461bcd60e51b815260040180806020018281038252602c8152602001806106ad602c913960400191505060405180910390fd5b60006101bf82610308565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561021e57600080fd5b505af1158015610232573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b15801561028f57600080fd5b505afa1580156102a3573d6000803e3d6000fd5b505050506040513d60208110156102b957600080fd5b50519050806102f95760405162461bcd60e51b81526004018080602001828103825260258152602001806106676025913960400191505060405180910390fd5b61030281610308565b91505090565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561035957600080fd5b505afa15801561036d573d6000803e3d6000fd5b505050506040513d602081101561038357600080fd5b50516001546040805163313ce56760e01b8152905160ff90931693506000926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156103d457600080fd5b505afa1580156103e8573d6000803e3d6000fd5b505050506040513d60208110156103fe57600080fd5b50516001546040805163182df0f560e01b815290519293506000926001600160a01b039092169163182df0f591600480820192602092909190829003018186803b15801561044b57600080fd5b505afa15801561045f573d6000803e3d6000fd5b505050506040513d602081101561047557600080fd5b505190506104c261048d84601263ffffffff6104cb16565b600a0a6104b684600a0a6104aa898661052e90919063ffffffff16565b9063ffffffff61052e16565b9063ffffffff61058716565b95945050505050565b600082820183811015610525576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60008261053d57506000610528565b8282028284828161054a57fe5b04146105255760405162461bcd60e51b815260040180806020018281038252602181526020018061068c6021913960400191505060405180910390fd5b600061052583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836106505760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106155781810151838201526020016105fd565b50505050905090810190601f1680156106425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161065c57fe5b049594505050505056fe436f6d706f756e645072696365723a20756e6465726c79696e672070726963652069732030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6d706f756e645072696365723a20756e6465726c79696e67207072696365206e6f742073657420796574a26469706673582212203bc5053a1f3f4ea70ea3c6b473feb8263d29612bdbad448fd3028e2ae81481e564736f6c634300060a0033436f6d706f756e645072696365723a206f7261636c6520616464726573732063616e206e6f742062652030436f6d706f756e645072696365723a20756e6465726c79696e6720616464726573732063616e206e6f742062652030436f6d706f756e645072696365723a2063546f6b656e20616464726573732063616e206e6f742062652030",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x8F2 CODESIZE SUB DUP1 PUSH2 0x8F2 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8C7 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xCE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x898 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x113 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x86D PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 DUP6 AND SWAP4 DUP3 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x0 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x70E DUP1 PUSH2 0x15F 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 0x69E527DA EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x88 JUMPI DUP1 PUSH4 0x96367290 EQ PUSH2 0x90 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xAF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xD8 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xE7 JUMP JUMPDEST PUSH2 0xAD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB7 PUSH2 0x23B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0x1957F81 SWAP3 PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x1B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6AD PUSH1 0x2C SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1BF DUP3 PUSH2 0x308 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP2 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x232 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x2F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x667 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x302 DUP2 PUSH2 0x308 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 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 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0xFF SWAP1 SWAP4 AND SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x182DF0F5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x182DF0F5 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x45F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x4C2 PUSH2 0x48D DUP5 PUSH1 0x12 PUSH4 0xFFFFFFFF PUSH2 0x4CB AND JUMP JUMPDEST PUSH1 0xA EXP PUSH2 0x4B6 DUP5 PUSH1 0xA EXP PUSH2 0x4AA DUP10 DUP7 PUSH2 0x52E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x52E AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x587 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x525 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x53D JUMPI POP PUSH1 0x0 PUSH2 0x528 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x54A JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x68C PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x525 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP4 PUSH2 0x650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x642 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x65C JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID NUMBER PUSH16 0x6D706F756E645072696365723A20756E PUSH5 0x65726C7969 PUSH15 0x672070726963652069732030536166 PUSH6 0x4D6174683A20 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77436F6D706F756E6450 PUSH19 0x696365723A20756E6465726C79696E67207072 PUSH10 0x6365206E6F7420736574 KECCAK256 PUSH26 0x6574A26469706673582212203BC5053A1F3F4EA70EA3C6B473FE 0xB8 0x26 RETURNDATASIZE 0x29 PUSH2 0x2BDB 0xAD DIFFICULTY DUP16 0xD3 MUL DUP15 0x2A 0xE8 EQ DUP2 0xE5 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER NUMBER PUSH16 0x6D706F756E645072696365723A206F72 PUSH2 0x636C PUSH6 0x206164647265 PUSH20 0x732063616E206E6F742062652030436F6D706F75 PUSH15 0x645072696365723A20756E6465726C PUSH26 0x696E6720616464726573732063616E206E6F742062652030436F PUSH14 0x706F756E645072696365723A2063 SLOAD PUSH16 0x6B656E20616464726573732063616E20 PUSH15 0x6F7420626520300000000000000000 ",
+ "sourceMap": "377:2745:70:-:0;;;858:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;858:517:70;;;;;;;;;;;;;;-1:-1:-1;;;;;980:21:70;;972:77;;;;-1:-1:-1;;;972:77:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1067:25:70;;1059:85;;;;-1:-1:-1;;;1059:85:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1162:21:70;;1154:77;;;;-1:-1:-1;;;1154:77:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1242:6;:33;;-1:-1:-1;;;;;1242:33:70;;;-1:-1:-1;;;;;;1242:33:70;;;;;;;1285:10;:40;;;;;;;;;;;;;;;1242:6;1335:33;;;;;;;;;;;377:2745;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c806369e527da1461005c5780636f307dc3146100805780637dc0d1d014610088578063963672901461009057806398d5fdca146100af575b600080fd5b6100646100c9565b604080516001600160a01b039092168252519081900360200190f35b6100646100d8565b6100646100e7565b6100ad600480360360208110156100a657600080fd5b50356100f6565b005b6100b761023b565b60408051918252519081900360200190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561014a57600080fd5b505afa15801561015e573d6000803e3d6000fd5b505050506040513d604081101561017457600080fd5b50519050806101b45760405162461bcd60e51b815260040180806020018281038252602c8152602001806106ad602c913960400191505060405180910390fd5b60006101bf82610308565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561021e57600080fd5b505af1158015610232573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b15801561028f57600080fd5b505afa1580156102a3573d6000803e3d6000fd5b505050506040513d60208110156102b957600080fd5b50519050806102f95760405162461bcd60e51b81526004018080602001828103825260258152602001806106676025913960400191505060405180910390fd5b61030281610308565b91505090565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561035957600080fd5b505afa15801561036d573d6000803e3d6000fd5b505050506040513d602081101561038357600080fd5b50516001546040805163313ce56760e01b8152905160ff90931693506000926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156103d457600080fd5b505afa1580156103e8573d6000803e3d6000fd5b505050506040513d60208110156103fe57600080fd5b50516001546040805163182df0f560e01b815290519293506000926001600160a01b039092169163182df0f591600480820192602092909190829003018186803b15801561044b57600080fd5b505afa15801561045f573d6000803e3d6000fd5b505050506040513d602081101561047557600080fd5b505190506104c261048d84601263ffffffff6104cb16565b600a0a6104b684600a0a6104aa898661052e90919063ffffffff16565b9063ffffffff61052e16565b9063ffffffff61058716565b95945050505050565b600082820183811015610525576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60008261053d57506000610528565b8282028284828161054a57fe5b04146105255760405162461bcd60e51b815260040180806020018281038252602181526020018061068c6021913960400191505060405180910390fd5b600061052583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836106505760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106155781810151838201526020016105fd565b50505050905090810190601f1680156106425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161065c57fe5b049594505050505056fe436f6d706f756e645072696365723a20756e6465726c79696e672070726963652069732030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6d706f756e645072696365723a20756e6465726c79696e67207072696365206e6f742073657420796574a26469706673582212203bc5053a1f3f4ea70ea3c6b473feb8263d29612bdbad448fd3028e2ae81481e564736f6c634300060a0033",
+ "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 0x69E527DA EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x88 JUMPI DUP1 PUSH4 0x96367290 EQ PUSH2 0x90 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xAF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xD8 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xE7 JUMP JUMPDEST PUSH2 0xAD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB7 PUSH2 0x23B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0x1957F81 SWAP3 PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x1B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6AD PUSH1 0x2C SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1BF DUP3 PUSH2 0x308 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP2 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x232 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x2F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x667 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x302 DUP2 PUSH2 0x308 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 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 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0xFF SWAP1 SWAP4 AND SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x182DF0F5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x182DF0F5 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x45F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x4C2 PUSH2 0x48D DUP5 PUSH1 0x12 PUSH4 0xFFFFFFFF PUSH2 0x4CB AND JUMP JUMPDEST PUSH1 0xA EXP PUSH2 0x4B6 DUP5 PUSH1 0xA EXP PUSH2 0x4AA DUP10 DUP7 PUSH2 0x52E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x52E AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x587 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x525 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x53D JUMPI POP PUSH1 0x0 PUSH2 0x528 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x54A JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x68C PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x525 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP4 PUSH2 0x650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x642 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x65C JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID NUMBER PUSH16 0x6D706F756E645072696365723A20756E PUSH5 0x65726C7969 PUSH15 0x672070726963652069732030536166 PUSH6 0x4D6174683A20 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77436F6D706F756E6450 PUSH19 0x696365723A20756E6465726C79696E67207072 PUSH10 0x6365206E6F7420736574 KECCAK256 PUSH26 0x6574A26469706673582212203BC5053A1F3F4EA70EA3C6B473FE 0xB8 0x26 RETURNDATASIZE 0x29 PUSH2 0x2BDB 0xAD DIFFICULTY DUP16 0xD3 MUL DUP15 0x2A 0xE8 EQ DUP2 0xE5 PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "377:2745:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;573:29;;;:::i;:::-;;;;-1:-1:-1;;;;;573:29:70;;;;;;;;;;;;;;658:32;;;:::i;476:29::-;;;:::i;1994:435::-;;;;;;;;;;;;;;;;-1:-1:-1;1994:435:70;;:::i;:::-;;1502:273;;;:::i;:::-;;;;;;;;;;;;;;;;573:29;;;-1:-1:-1;;;;;573:29:70;;:::o;658:32::-;;;-1:-1:-1;;;;;658:32:70;;:::o;476:29::-;;;-1:-1:-1;;;;;476:29:70;;:::o;1994:435::-;2072:29;2107:6;;2137:10;;2107:60;;;-1:-1:-1;;;2107:60:70;;-1:-1:-1;;;;;2137:10:70;;;2107:60;;;;;;;;;;;;:6;;;;;:21;;:60;;;;;;;;;;;:6;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2107:60:70;;-1:-1:-1;2185:25:70;2177:82;;;;-1:-1:-1;;;2177:82:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2269:19;2291:52;2321:21;2291:29;:52::i;:::-;2353:6;;;;2383;2353:69;;;-1:-1:-1;;;2353:69:70;;-1:-1:-1;;;;;2383:6:70;;;2353:69;;;;;;;;;;;;;;;;;;2269:74;;-1:-1:-1;2353:6:70;;;:21;;:69;;;;;:6;;:69;;;;;;:6;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1994:435;;;:::o;1502:273::-;1545:7;1590:6;;1614:10;;1590:36;;;-1:-1:-1;;;1590:36:70;;-1:-1:-1;;;;;1614:10:70;;;1590:36;;;;;;1545:7;;1590:6;;;;;:15;;:36;;;;;;;;;;;;;;;:6;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1590:36:70;;-1:-1:-1;1644:19:70;1636:69;;;;-1:-1:-1;;;1636:69:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1722:46;1752:15;1722:29;:46::i;:::-;1715:53;;;1502:273;:::o;2711:409::-;2799:7;2818:26;2855:10;;;;;;;;;-1:-1:-1;;;;;2855:10:70;-1:-1:-1;;;;;2855:19:70;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2855:21:70;2920:6;;:17;;;-1:-1:-1;;;2920:17:70;;;;2847:30;;;;;-1:-1:-1;2887:22:70;;-1:-1:-1;;;;;2920:6:70;;;;:15;;:17;;;;;2855:21;;2920:17;;;;;;;;:6;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2920:17:70;2971:6;;:27;;;-1:-1:-1;;;2971:27:70;;;;2920:17;;-1:-1:-1;2948:20:70;;-1:-1:-1;;;;;2971:6:70;;;;:25;;:27;;;;;2920:17;;2971:27;;;;;;;;:6;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2971:27:70;;-1:-1:-1;3015:98:70;3085:26;:18;3108:2;3085:26;:22;:26;:::i;:::-;3080:2;:32;3015:60;3059:14;3054:2;:20;3015:34;3032:16;3015:12;:16;;:34;;;;:::i;:::-;:38;:60;:38;:60;:::i;:::-;:64;:98;:64;:98;:::i;:::-;3008:105;2711:409;-1:-1:-1;;;;;2711:409:70:o;922:176:51:-;980:7;1011:5;;;1034:6;;;;1026:46;;;;;-1:-1:-1;;;1026:46:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;1090:1;-1:-1:-1;922:176:51;;;;;:::o;2237:459::-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:130;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o"
+ },
+ "methodIdentifiers": {
+ "cToken()": "69e527da",
+ "getPrice()": "98d5fdca",
+ "oracle()": "7dc0d1d0",
+ "setExpiryPriceInOracle(uint256)": "96367290",
+ "underlying()": "6f307dc3"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_cToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"cToken\",\"outputs\":[{\"internalType\":\"contract CTokenInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"setExpiryPriceInOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"contract ERC20Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"_cToken\":\"cToken asset\",\"_oracle\":\"Opyn Oracle contract address\",\"_underlying\":\"underlying asset for this cToken\"}},\"getPrice()\":{\"returns\":{\"_0\":\"price of 1e8 cToken in USD, scaled by 1e8\"}},\"setExpiryPriceInOracle(uint256)\":{\"details\":\"requires that the underlying price has been set before setting a cToken price\",\"params\":{\"_expiryTimestamp\":\"expiry to set a price for\"}}}},\"userdoc\":{\"methods\":{\"cToken()\":{\"notice\":\"cToken that this pricer will a get price for\"},\"getPrice()\":{\"notice\":\"get the live price for the asset\"},\"oracle()\":{\"notice\":\"opyn oracle address\"},\"setExpiryPriceInOracle(uint256)\":{\"notice\":\"set the expiry price in the oracle\"},\"underlying()\":{\"notice\":\"underlying asset for this cToken\"}},\"notice\":\"A Pricer contract for a Compound cToken\"}},\"settings\":{\"compilationTarget\":{\"contracts/pricers/CompoundPricer.sol\":\"CompoundPricer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/CTokenInterface.sol\":{\"keccak256\":\"0x8f645adac095e22f77b0a317605ac81e3c1a3cd5f8a9c7fa0f6bda4d3ddb9c9a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5da24cd856a478bf6970b02a318128e069fa959affd5f3ea97a488f0bee1dd3e\",\"dweb:/ipfs/QmWcWdSUcmKUgVPhnQdnS3kRDrYYVEcsC2dXWZcgLB8fL1\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/pricers/CompoundPricer.sol\":{\"keccak256\":\"0xa4b029786a6bc68fc4d2c766c3b41c197206fe1ac0d04d18be4fe6c46b4e4362\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://03abd38962c535c796a1246c265da18d252136df48caa99f19c27dcc9a09e8ac\",\"dweb:/ipfs/QmP2WoHMbM7wT4oYUT6Up51tsVNVJJfWFQPdpkbHtCE3ao\"]}},\"version\":1}"
+ }
+ },
+ "contracts/pricers/WstethPricer.sol": {
+ "WstethPricer": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_wstETH",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint80",
+ "name": "",
+ "type": "uint80"
+ }
+ ],
+ "name": "getHistoricalPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPriceInOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlying",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "wstETH",
+ "outputs": [
+ {
+ "internalType": "contract WSTETHInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506040516107183803806107188339818101604052606081101561003357600080fd5b50805160208201516040909201519091906001600160a01b038316610084576040805162461bcd60e51b8152602060048201526002602482015261573160f01b604482015290519081900360640190fd5b6001600160a01b0382166100c4576040805162461bcd60e51b81526020600482015260026024820152612b9960f11b604482015290519081900360640190fd5b6001600160a01b038116610104576040805162461bcd60e51b8152602060048201526002602482015261573360f01b604482015290519081900360640190fd5b600180546001600160a01b039485166001600160a01b0319918216179091556000805492851692821692909217909155600280549290931691161790556105c8806101506000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80634aa07e64146100675780636f307dc31461008b5780637dc0d1d014610093578063963672901461009b57806398d5fdca146100ba578063eec377c0146100d4575b600080fd5b61006f610116565b604080516001600160a01b039092168252519081900360200190f35b61006f610125565b61006f610134565b6100b8600480360360208110156100b157600080fd5b5035610143565b005b6100c2610283565b60408051918252519081900360200190f35b6100fd600480360360208110156100ea57600080fd5b503569ffffffffffffffffffff1661034b565b6040805192835260208301919091528051918290030190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60408110156101c157600080fd5b50519050806101fc576040805162461bcd60e51b8152602060048201526002602482015261573560f01b604482015290519081900360640190fd5b600061020782610382565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561026657600080fd5b505af115801561027a573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b1580156102d757600080fd5b505afa1580156102eb573d6000803e3d6000fd5b505050506040513d602081101561030157600080fd5b505190508061033c576040805162461bcd60e51b815260206004820152600260248201526115cd60f21b604482015290519081900360640190fd5b61034581610382565b91505090565b6040805162461bcd60e51b81526020600482015260026024820152612b9b60f11b6044820152905160009182919081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b031663035faf826040518163ffffffff1660e01b815260040160206040518083038186803b1580156103d357600080fd5b505afa1580156103e7573d6000803e3d6000fd5b505050506040513d60208110156103fd57600080fd5b50519050610429670de0b6b3a764000061041d838663ffffffff61043016565b9063ffffffff61049216565b9392505050565b60008261043f5750600061048c565b8282028284828161044c57fe5b04146104895760405162461bcd60e51b81526004018080602001828103825260218152602001806105726021913960400191505060405180910390fd5b90505b92915050565b600061048983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361055b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610520578181015183820152602001610508565b50505050905090810190601f16801561054d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161056757fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205c51b64ddcd555f30be0917581da5c587bcfc44d1cce5824b22cc766365e482464736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x718 CODESIZE SUB DUP1 PUSH2 0x718 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x84 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x5731 PUSH1 0xF0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x2B99 PUSH1 0xF1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x104 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x5733 PUSH1 0xF0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x5C8 DUP1 PUSH2 0x150 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 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4AA07E64 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x96367290 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xBA JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0xD4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x125 JUMP JUMPDEST PUSH2 0x6F PUSH2 0x134 JUMP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x143 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC2 PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x34B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0x1957F81 SWAP3 PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x1FC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x5735 PUSH1 0xF0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x207 DUP3 PUSH2 0x382 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP2 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x33C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x15CD PUSH1 0xF2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x345 DUP2 PUSH2 0x382 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x2B9B PUSH1 0xF1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0x35FAF82 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x429 PUSH8 0xDE0B6B3A7640000 PUSH2 0x41D DUP4 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x430 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x492 AND JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x43F JUMPI POP PUSH1 0x0 PUSH2 0x48C JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x44C JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x489 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x572 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x489 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP4 PUSH2 0x55B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x520 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x508 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x54D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x567 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0x5C MLOAD 0xB6 0x4D 0xDC 0xD5 SSTORE RETURN SIGNEXTEND 0xE0 SWAP2 PUSH22 0x81DA5C587BCFC44D1CCE5824B22CC766365E48246473 PUSH16 0x6C634300060A00330000000000000000 ",
+ "sourceMap": "843:2482:71:-:0;;;1286:374;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1286:374:71;;;;;;;;;;;;;;-1:-1:-1;;;;;1408:21:71;;1400:36;;;;;-1:-1:-1;;;1400:36:71;;;;;;;;;;;;-1:-1:-1;;;1400:36:71;;;;;;;;;;;;;;;-1:-1:-1;;;;;1454:25:71;;1446:40;;;;;-1:-1:-1;;;1446:40:71;;;;;;;;;;;;-1:-1:-1;;;1446:40:71;;;;;;;;;;;;;;;-1:-1:-1;;;;;1504:21:71;;1496:36;;;;;-1:-1:-1;;;1496:36:71;;;;;;;;;;;;-1:-1:-1;;;1496:36:71;;;;;;;;;;;;;;;1543:6;:33;;-1:-1:-1;;;;;1543:33:71;;;-1:-1:-1;;;;;;1543:33:71;;;;;;;:6;1586:33;;;;;;;;;;;;;;;1629:10;:24;;;;;;;;;;;843:2482;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c80634aa07e64146100675780636f307dc31461008b5780637dc0d1d014610093578063963672901461009b57806398d5fdca146100ba578063eec377c0146100d4575b600080fd5b61006f610116565b604080516001600160a01b039092168252519081900360200190f35b61006f610125565b61006f610134565b6100b8600480360360208110156100b157600080fd5b5035610143565b005b6100c2610283565b60408051918252519081900360200190f35b6100fd600480360360208110156100ea57600080fd5b503569ffffffffffffffffffff1661034b565b6040805192835260208301919091528051918290030190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60408110156101c157600080fd5b50519050806101fc576040805162461bcd60e51b8152602060048201526002602482015261573560f01b604482015290519081900360640190fd5b600061020782610382565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561026657600080fd5b505af115801561027a573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b1580156102d757600080fd5b505afa1580156102eb573d6000803e3d6000fd5b505050506040513d602081101561030157600080fd5b505190508061033c576040805162461bcd60e51b815260206004820152600260248201526115cd60f21b604482015290519081900360640190fd5b61034581610382565b91505090565b6040805162461bcd60e51b81526020600482015260026024820152612b9b60f11b6044820152905160009182919081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b031663035faf826040518163ffffffff1660e01b815260040160206040518083038186803b1580156103d357600080fd5b505afa1580156103e7573d6000803e3d6000fd5b505050506040513d60208110156103fd57600080fd5b50519050610429670de0b6b3a764000061041d838663ffffffff61043016565b9063ffffffff61049216565b9392505050565b60008261043f5750600061048c565b8282028284828161044c57fe5b04146104895760405162461bcd60e51b81526004018080602001828103825260218152602001806105726021913960400191505060405180910390fd5b90505b92915050565b600061048983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361055b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610520578181015183820152602001610508565b50505050905090810190601f16801561054d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161056757fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205c51b64ddcd555f30be0917581da5c587bcfc44d1cce5824b22cc766365e482464736f6c634300060a0033",
+ "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 0x4AA07E64 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x96367290 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xBA JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0xD4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x125 JUMP JUMPDEST PUSH2 0x6F PUSH2 0x134 JUMP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x143 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC2 PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x34B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0x1957F81 SWAP3 PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x1FC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x5735 PUSH1 0xF0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x207 DUP3 PUSH2 0x382 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP2 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x33C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x15CD PUSH1 0xF2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x345 DUP2 PUSH2 0x382 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH2 0x2B9B PUSH1 0xF1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0x35FAF82 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x429 PUSH8 0xDE0B6B3A7640000 PUSH2 0x41D DUP4 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x430 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x492 AND JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x43F JUMPI POP PUSH1 0x0 PUSH2 0x48C JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x44C JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x489 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x572 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x489 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP4 PUSH2 0x55B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x520 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x508 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x54D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x567 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0x5C MLOAD 0xB6 0x4D 0xDC 0xD5 SSTORE RETURN SIGNEXTEND 0xE0 SWAP2 PUSH22 0x81DA5C587BCFC44D1CCE5824B22CC766365E48246473 PUSH16 0x6C634300060A00330000000000000000 ",
+ "sourceMap": "843:2482:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1028:29;;;:::i;:::-;;;;-1:-1:-1;;;;;1028:29:71;;;;;;;;;;;;;;1104:25;;;:::i;963:29::-;;;:::i;2309:384::-;;;;;;;;;;;;;;;;-1:-1:-1;2309:384:71;;:::i;:::-;;1852:238;;;:::i;:::-;;;;;;;;;;;;;;;;3208:115;;;;;;;;;;;;;;;;-1:-1:-1;3208:115:71;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1028:29;;;-1:-1:-1;;;;;1028:29:71;;:::o;1104:25::-;;;-1:-1:-1;;;;;1104:25:71;;:::o;963:29::-;;;-1:-1:-1;;;;;963:29:71;;:::o;2309:384::-;2387:29;2422:6;;2444:10;;2422:51;;;-1:-1:-1;;;2422:51:71;;-1:-1:-1;;;;;2444:10:71;;;2422:51;;;;;;;;;;;;:6;;;;;:21;;:51;;;;;;;;;;;:6;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2422:51:71;;-1:-1:-1;2491:25:71;2483:40;;;;;-1:-1:-1;;;2483:40:71;;;;;;;;;;;;-1:-1:-1;;;2483:40:71;;;;;;;;;;;;;;;2533:19;2555:52;2585:21;2555:29;:52::i;:::-;2617:6;;;;2647;2617:69;;;-1:-1:-1;;;2617:69:71;;-1:-1:-1;;;;;2647:6:71;;;2617:69;;;;;;;;;;;;;;;;;;2533:74;;-1:-1:-1;2617:6:71;;;:21;;:69;;;;;:6;;:69;;;;;;:6;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2309:384;;;:::o;1852:238::-;1904:7;1949:6;;1965:10;;1949:27;;;-1:-1:-1;;;1949:27:71;;-1:-1:-1;;;;;1965:10:71;;;1949:27;;;;;;1904:7;;1949:6;;;;;:15;;:27;;;;;;;;;;;;;;;:6;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1949:27:71;;-1:-1:-1;1994:19:71;1986:34;;;;;-1:-1:-1;;;1986:34:71;;;;;;;;;;;;-1:-1:-1;;;1986:34:71;;;;;;;;;;;;;;;2037:46;2067:15;2037:29;:46::i;:::-;2030:53;;;1852:238;:::o;3208:115::-;3304:12;;;-1:-1:-1;;;3304:12:71;;;;;;;;;;;;-1:-1:-1;;;3304:12:71;;;;;;3276:7;;;;3304:12;;;;;;;;2978:224;3065:7;3084:22;3109:6;;;;;;;;;-1:-1:-1;;;;;3109:6:71;-1:-1:-1;;;;;3109:20:71;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3109:22:71;;-1:-1:-1;3149:46:71;3190:4;3149:36;3109:22;3168:16;3149:36;:18;:36;:::i;:::-;:40;:46;:40;:46;:::i;:::-;3142:53;2978:224;-1:-1:-1;;;2978:224:71:o;2237:459:51:-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2688:1;-1:-1:-1;2237:459:51;;;;;:::o;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o"
+ },
+ "methodIdentifiers": {
+ "getHistoricalPrice(uint80)": "eec377c0",
+ "getPrice()": "98d5fdca",
+ "oracle()": "7dc0d1d0",
+ "setExpiryPriceInOracle(uint256)": "96367290",
+ "underlying()": "6f307dc3",
+ "wstETH()": "4aa07e64"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wstETH\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"name\":\"getHistoricalPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"setExpiryPriceInOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wstETH\",\"outputs\":[{\"internalType\":\"contract WSTETHInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"constructor\":{\"params\":{\"_oracle\":\"Opyn Oracle contract address\",\"_underlying\":\"underlying asset for wstETH\",\"_wstETH\":\"wstETH\"}},\"getPrice()\":{\"details\":\"overrides the getPrice function in OpynPricerInterface\",\"returns\":{\"_0\":\"price of 1 wstETH in USD, scaled by 1e8\"}},\"setExpiryPriceInOracle(uint256)\":{\"details\":\"requires that the underlying price has been set before setting a wstETH price\",\"params\":{\"_expiryTimestamp\":\"expiry to set a price for\"}}},\"title\":\"WstethPricer\"},\"userdoc\":{\"methods\":{\"getPrice()\":{\"notice\":\"get the live price for the asset\"},\"oracle()\":{\"notice\":\"opyn oracle address\"},\"setExpiryPriceInOracle(uint256)\":{\"notice\":\"set the expiry price in the oracle\"},\"underlying()\":{\"notice\":\"underlying asset (WETH)\"},\"wstETH()\":{\"notice\":\"wstETH token\"}},\"notice\":\"A Pricer contract for a wstETH token\"}},\"settings\":{\"compilationTarget\":{\"contracts/pricers/WstethPricer.sol\":\"WstethPricer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/OpynPricerInterface.sol\":{\"keccak256\":\"0xa937e5fa413ff096600cd4bb62795cda1aa6916a3ad4b1e50ab11aaf5cdd07c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://194bd27f9bbbac1a58c920bda262886f9cdc315985ad152c584f9715261d8317\",\"dweb:/ipfs/QmQGXWP6dNSBxhqrW93mAsS3E2ahBSNgnG5mBais6rgdaK\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/interfaces/WSTETHInterface.sol\":{\"keccak256\":\"0x410f849507cbfb7593edcf49b1da43215e6137feae16954b907f8e3c02682447\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16eac7a0c8960b2d66fd6a1301441d2beb9410c2a854a17f5b4efa291db268ec\",\"dweb:/ipfs/QmXPEanGdXzahaJStsikGGrTn5fMojWiCF9r6AYWypUthZ\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/pricers/WstethPricer.sol\":{\"keccak256\":\"0xa828836b8b59ebee76557329d585de386794a58faa182c9da0541663ec1ec2cb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d13c39c20d0744cec59eee0a5f46fca7e17ce2f777cfb083fb1dbbb0dd619dd5\",\"dweb:/ipfs/QmNU97nGYcwxmzQ6j9v65rAXSXXCfupUBobLdCWuR61Rnn\"]}},\"version\":1}"
+ }
+ },
+ "contracts/pricers/YearnPricer.sol": {
+ "YearnPricer": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_yToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_oracle",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint80",
+ "name": "_roundId",
+ "type": "uint80"
+ }
+ ],
+ "name": "getHistoricalPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "setExpiryPriceInOracle",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlying",
+ "outputs": [
+ {
+ "internalType": "contract ERC20Interface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "yToken",
+ "outputs": [
+ {
+ "internalType": "contract YearnVaultInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506040516108893803806108898339818101604052606081101561003357600080fd5b50805160208201516040909201519091906001600160a01b0383166100895760405162461bcd60e51b815260040180806020018281038252602881526020018061080d6028913960400191505060405180910390fd5b6001600160a01b0382166100ce5760405162461bcd60e51b815260040180806020018281038252602c815260200180610835602c913960400191505060405180910390fd5b6001600160a01b0381166101135760405162461bcd60e51b81526004018080602001828103825260288152602001806108616028913960400191505060405180910390fd5b600180546001600160a01b039485166001600160a01b0319918216179091556002805493851693821693909317909255600080549190931691161790556106ae8061015f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806349bfcca1146100675780636f307dc31461008b5780637dc0d1d014610093578063963672901461009b57806398d5fdca146100ba578063eec377c0146100d4575b600080fd5b61006f610116565b604080516001600160a01b039092168252519081900360200190f35b61006f610125565b61006f610134565b6100b8600480360360208110156100b157600080fd5b5035610143565b005b6100c2610288565b60408051918252519081900360200190f35b6100fd600480360360208110156100ea57600080fd5b503569ffffffffffffffffffff16610355565b6040805192835260208301919091528051918290030190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60408110156101c157600080fd5b50519050806102015760405162461bcd60e51b81526004018080602001828103825260298152602001806106506029913960400191505060405180910390fd5b600061020c826103a7565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b1580156102dc57600080fd5b505afa1580156102f0573d6000803e3d6000fd5b505050506040513d602081101561030657600080fd5b50519050806103465760405162461bcd60e51b815260040180806020018281038252602281526020018061060d6022913960400191505060405180910390fd5b61034f816103a7565b91505090565b6040805162461bcd60e51b815260206004820152601760248201527f596561726e5072696365723a20446570726563617465640000000000000000006044820152905160009182919081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f857600080fd5b505afa15801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b50516002546040805163313ce56760e01b815290519293506000926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b15801561046f57600080fd5b505afa158015610483573d6000803e3d6000fd5b505050506040513d602081101561049957600080fd5b505190506104c360ff8216600a0a6104b7848763ffffffff6104cb16565b9063ffffffff61052d16565b949350505050565b6000826104da57506000610527565b828202828482816104e757fe5b04146105245760405162461bcd60e51b815260040180806020018281038252602181526020018061062f6021913960400191505060405180910390fd5b90505b92915050565b600061052483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836105f65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105bb5781810151838201526020016105a3565b50505050905090810190601f1680156105e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161060257fe5b049594505050505056fe596561726e5072696365723a20756e6465726c79696e672070726963652069732030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596561726e5072696365723a20756e6465726c79696e67207072696365206e6f742073657420796574a26469706673582212205594dd8e075f0879eeb507203dcd800598aca917395cce355285b6117d09257f64736f6c634300060a0033596561726e5072696365723a2079546f6b656e20616464726573732063616e206e6f742062652030596561726e5072696365723a20756e6465726c79696e6720616464726573732063616e206e6f742062652030596561726e5072696365723a206f7261636c6520616464726573732063616e206e6f742062652030",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x889 CODESIZE SUB DUP1 PUSH2 0x889 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x80D PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xCE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x835 PUSH1 0x2C SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x113 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x861 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 DUP6 AND SWAP4 DUP3 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x0 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x6AE DUP1 PUSH2 0x15F 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 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x49BFCCA1 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x96367290 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xBA JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0xD4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x125 JUMP JUMPDEST PUSH2 0x6F PUSH2 0x134 JUMP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x143 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC2 PUSH2 0x288 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0x1957F81 SWAP3 PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x201 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x650 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x20C DUP3 PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP2 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x60D PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x34F DUP2 PUSH2 0x3A7 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x596561726E5072696365723A2044657072656361746564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0x99530B06 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x4C3 PUSH1 0xFF DUP3 AND PUSH1 0xA EXP PUSH2 0x4B7 DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x4CB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x52D AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4DA JUMPI POP PUSH1 0x0 PUSH2 0x527 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x4E7 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x524 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x62F PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x524 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP4 PUSH2 0x5F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5BB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5A3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x5E8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x602 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID MSIZE PUSH6 0x61726E507269 PUSH4 0x65723A20 PUSH22 0x6E6465726C79696E6720707269636520697320305361 PUSH7 0x654D6174683A20 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77596561726E50726963 PUSH6 0x723A20756E64 PUSH6 0x726C79696E67 KECCAK256 PUSH17 0x72696365206E6F742073657420796574A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SWAP5 0xDD DUP15 SMOD 0x5F ADDMOD PUSH26 0xEEB507203DCD800598ACA917395CCE355285B6117D09257F6473 PUSH16 0x6C634300060A0033596561726E507269 PUSH4 0x65723A20 PUSH26 0x546F6B656E20616464726573732063616E206E6F742062652030 MSIZE PUSH6 0x61726E507269 PUSH4 0x65723A20 PUSH22 0x6E6465726C79696E6720616464726573732063616E20 PUSH15 0x6F742062652030596561726E507269 PUSH4 0x65723A20 PUSH16 0x7261636C652061646472657373206361 PUSH15 0x206E6F742062652030000000000000 ",
+ "sourceMap": "457:2883:72:-:0;;;962:512;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;962:512:72;;;;;;;;;;;;;;-1:-1:-1;;;;;1084:21:72;;1076:74;;;;-1:-1:-1;;;1076:74:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1168:25:72;;1160:82;;;;-1:-1:-1;;;1160:82:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1260:21:72;;1252:74;;;;-1:-1:-1;;;1252:74:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1337:6;:37;;-1:-1:-1;;;;;1337:37:72;;;-1:-1:-1;;;;;;1337:37:72;;;;;;;1384:10;:40;;;;;;;;;;;;;;;1337:6;1434:33;;;;;;;;;;;457:2883;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c806349bfcca1146100675780636f307dc31461008b5780637dc0d1d014610093578063963672901461009b57806398d5fdca146100ba578063eec377c0146100d4575b600080fd5b61006f610116565b604080516001600160a01b039092168252519081900360200190f35b61006f610125565b61006f610134565b6100b8600480360360208110156100b157600080fd5b5035610143565b005b6100c2610288565b60408051918252519081900360200190f35b6100fd600480360360208110156100ea57600080fd5b503569ffffffffffffffffffff16610355565b6040805192835260208301919091528051918290030190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60408110156101c157600080fd5b50519050806102015760405162461bcd60e51b81526004018080602001828103825260298152602001806106506029913960400191505060405180910390fd5b600061020c826103a7565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b1580156102dc57600080fd5b505afa1580156102f0573d6000803e3d6000fd5b505050506040513d602081101561030657600080fd5b50519050806103465760405162461bcd60e51b815260040180806020018281038252602281526020018061060d6022913960400191505060405180910390fd5b61034f816103a7565b91505090565b6040805162461bcd60e51b815260206004820152601760248201527f596561726e5072696365723a20446570726563617465640000000000000000006044820152905160009182919081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f857600080fd5b505afa15801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b50516002546040805163313ce56760e01b815290519293506000926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b15801561046f57600080fd5b505afa158015610483573d6000803e3d6000fd5b505050506040513d602081101561049957600080fd5b505190506104c360ff8216600a0a6104b7848763ffffffff6104cb16565b9063ffffffff61052d16565b949350505050565b6000826104da57506000610527565b828202828482816104e757fe5b04146105245760405162461bcd60e51b815260040180806020018281038252602181526020018061062f6021913960400191505060405180910390fd5b90505b92915050565b600061052483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836105f65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105bb5781810151838201526020016105a3565b50505050905090810190601f1680156105e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161060257fe5b049594505050505056fe596561726e5072696365723a20756e6465726c79696e672070726963652069732030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596561726e5072696365723a20756e6465726c79696e67207072696365206e6f742073657420796574a26469706673582212205594dd8e075f0879eeb507203dcd800598aca917395cce355285b6117d09257f64736f6c634300060a0033",
+ "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 0x49BFCCA1 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x96367290 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0xBA JUMPI DUP1 PUSH4 0xEEC377C0 EQ PUSH2 0xD4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x125 JUMP JUMPDEST PUSH2 0x6F PUSH2 0x134 JUMP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x143 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC2 PUSH2 0x288 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0x1957F81 SWAP3 PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x201 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x650 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x20C DUP3 PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xEE531409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP2 AND SWAP3 PUSH4 0xEE531409 SWAP3 PUSH1 0x64 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0x346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x60D PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x34F DUP2 PUSH2 0x3A7 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x596561726E5072696365723A2044657072656361746564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 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 0x99530B06 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x4C3 PUSH1 0xFF DUP3 AND PUSH1 0xA EXP PUSH2 0x4B7 DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x4CB AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x52D AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4DA JUMPI POP PUSH1 0x0 PUSH2 0x527 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x4E7 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x524 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x62F PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x524 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP2 DUP4 PUSH2 0x5F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5BB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5A3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x5E8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x602 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID MSIZE PUSH6 0x61726E507269 PUSH4 0x65723A20 PUSH22 0x6E6465726C79696E6720707269636520697320305361 PUSH7 0x654D6174683A20 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77596561726E50726963 PUSH6 0x723A20756E64 PUSH6 0x726C79696E67 KECCAK256 PUSH17 0x72696365206E6F742073657420796574A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SWAP5 0xDD DUP15 SMOD 0x5F ADDMOD PUSH26 0xEEB507203DCD800598ACA917395CCE355285B6117D09257F6473 PUSH16 0x6C634300060A00330000000000000000 ",
+ "sourceMap": "457:2883:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;673:33;;;:::i;:::-;;;;-1:-1:-1;;;;;673:33:72;;;;;;;;;;;;;;762:32;;;:::i;576:29::-;;;:::i;2166:432::-;;;;;;;;;;;;;;;;-1:-1:-1;2166:432:72;;:::i;:::-;;1668:279;;;:::i;:::-;;;;;;;;;;;;;;;;3193:145;;;;;;;;;;;;;;;;-1:-1:-1;3193:145:72;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;673:33;;;-1:-1:-1;;;;;673:33:72;;:::o;762:32::-;;;-1:-1:-1;;;;;762:32:72;;:::o;576:29::-;;;-1:-1:-1;;;;;576:29:72;;:::o;2166:432::-;2244:29;2279:6;;2309:10;;2279:60;;;-1:-1:-1;;;2279:60:72;;-1:-1:-1;;;;;2309:10:72;;;2279:60;;;;;;;;;;;;:6;;;;;:21;;:60;;;;;;;;;;;:6;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2279:60:72;;-1:-1:-1;2357:25:72;2349:79;;;;-1:-1:-1;;;2349:79:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2438:19;2460:52;2490:21;2460:29;:52::i;:::-;2522:6;;;;2552;2522:69;;;-1:-1:-1;;;2522:69:72;;-1:-1:-1;;;;;2552:6:72;;;2522:69;;;;;;;;;;;;;;;;;;2438:74;;-1:-1:-1;2522:6:72;;;:21;;:69;;;;;:6;;:69;;;;;;:6;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:432;;;:::o;1668:279::-;1720:7;1765:6;;1789:10;;1765:36;;;-1:-1:-1;;;1765:36:72;;-1:-1:-1;;;;;1789:10:72;;;1765:36;;;;;;1720:7;;1765:6;;;;;:15;;:36;;;;;;;;;;;;;;;:6;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1765:36:72;;-1:-1:-1;1819:19:72;1811:66;;;;-1:-1:-1;;;1811:66:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1894:46;1924:15;1894:29;:46::i;:::-;1887:53;;;1668:279;:::o;3193:145::-;3298:33;;;-1:-1:-1;;;3298:33:72;;;;;;;;;;;;;;;;;;;3270:7;;;;3298:33;;;;;;;;2880:307;2967:7;2986:21;3010:6;;;;;;;;;-1:-1:-1;;;;;3010:6:72;-1:-1:-1;;;;;3010:20:72;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3010:22:72;3069:10;;:21;;;-1:-1:-1;;;3069:21:72;;;;3010:22;;-1:-1:-1;3042:24:72;;-1:-1:-1;;;;;3069:10:72;;;;:19;;:21;;;;;3010:22;;3069:21;;;;;;;;:10;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3069:21:72;;-1:-1:-1;3108:72:72;3152:27;;;3148:2;:31;3108:35;:13;3126:16;3108:35;:17;:35;:::i;:::-;:39;:72;:39;:72;:::i;:::-;3101:79;2880:307;-1:-1:-1;;;;2880:307:72:o;2237:459:51:-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2688:1;-1:-1:-1;2237:459:51;;;;;:::o;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o"
+ },
+ "methodIdentifiers": {
+ "getHistoricalPrice(uint80)": "eec377c0",
+ "getPrice()": "98d5fdca",
+ "oracle()": "7dc0d1d0",
+ "setExpiryPriceInOracle(uint256)": "96367290",
+ "underlying()": "6f307dc3",
+ "yToken()": "49bfcca1"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_yToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getHistoricalPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"setExpiryPriceInOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"contract ERC20Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"yToken\",\"outputs\":[{\"internalType\":\"contract YearnVaultInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"_oracle\":\"Opyn Oracle contract address\",\"_underlying\":\"underlying asset for this yToken\",\"_yToken\":\"yToken asset\"}},\"getPrice()\":{\"details\":\"overrides the getPrice function in OpynPricerInterface\",\"returns\":{\"_0\":\"price of 1e8 yToken in USD, scaled by 1e8\"}},\"setExpiryPriceInOracle(uint256)\":{\"details\":\"requires that the underlying price has been set before setting a yToken price\",\"params\":{\"_expiryTimestamp\":\"expiry to set a price for\"}}}},\"userdoc\":{\"methods\":{\"getPrice()\":{\"notice\":\"get the live price for the asset\"},\"oracle()\":{\"notice\":\"opyn oracle address\"},\"setExpiryPriceInOracle(uint256)\":{\"notice\":\"set the expiry price in the oracle\"},\"underlying()\":{\"notice\":\"underlying asset for this yToken\"},\"yToken()\":{\"notice\":\"yToken that this pricer will a get price for\"}},\"notice\":\"A Pricer contract for a Yearn yToken\"}},\"settings\":{\"compilationTarget\":{\"contracts/pricers/YearnPricer.sol\":\"YearnPricer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/OpynPricerInterface.sol\":{\"keccak256\":\"0xa937e5fa413ff096600cd4bb62795cda1aa6916a3ad4b1e50ab11aaf5cdd07c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://194bd27f9bbbac1a58c920bda262886f9cdc315985ad152c584f9715261d8317\",\"dweb:/ipfs/QmQGXWP6dNSBxhqrW93mAsS3E2ahBSNgnG5mBais6rgdaK\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/interfaces/YearnVaultInterface.sol\":{\"keccak256\":\"0x20d7d090e5281983b354bf9faa43b272738996146e1ceecceb799a14c8373b6e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d5543480ce3f4c9cced95d8b207c523cccf2c7d4a9c8299401f0696367bcea1\",\"dweb:/ipfs/QmbFKtnEr87jyxdsToqw3FugHncy5UANvJGd89jtnAnF2P\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/pricers/YearnPricer.sol\":{\"keccak256\":\"0x22a8f5414fad1f1e70a9dd52956c8e2f8d8f1bccb347d653fe7e26ca8885f464\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9703565636fc857c115ba7d1d76a174c749390501939154a8c43cebed5331bc0\",\"dweb:/ipfs/QmPJKb9dfkbynJun63yCN8qqFFey3HytL1eWYty4j7X6pv\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/ActionTester.sol": {
+ "ActionTester": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "getBurnArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.BurnArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCallArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "callee",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.CallArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getDepositArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.DepositArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getLiquidateArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "roundId",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.LiquidateArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getMintArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.MintArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOpenVaultArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultType",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.OpenVaultArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getRedeemArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "otoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.RedeemArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getSettleVaultArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ }
+ ],
+ "internalType": "struct Actions.SettleVaultArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getWithdrawArgs",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct Actions.WithdrawArgs",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseBurnAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseCallAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseDespositAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseLiquidateActions",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseMintAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseOpenVaultAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseRedeemAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseSettleVaultAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum Actions.ActionType",
+ "name": "actionType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "asset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Actions.ActionArgs",
+ "name": "_args",
+ "type": "tuple"
+ }
+ ],
+ "name": "testParseWithdrawAction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50611610806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80639d53155a116100a2578063cc294d7c11610071578063cc294d7c1461021c578063cdc5c6d314610231578063e516b11e14610239578063ef772c471461024c578063f5380a841461025457610116565b80639d53155a146101ce578063b90835ad146101e1578063be0c775c146101f6578063c36b3f121461020957610116565b806342ef617d116100e957806342ef617d146101765780634af9d84f1461018b57806360062217146101935780637343b9b7146101a857806383bb0c5d146101bb57610116565b806302772fc61461011b578063065d80e41461013057806321667fe5146101435780633a3a258514610161575b600080fd5b61012e6101293660046110ab565b610267565b005b61012e61013e3660046110ab565b6102ac565b61014b610317565b604051610158919061147d565b60405180910390f35b6101696103d3565b604051610158919061146f565b61017e610428565b6040516101589190611586565b610169610463565b61019b6104b8565b60405161015891906114ea565b61012e6101b63660046110ab565b610501565b61012e6101c93660046110ab565b61053d565b61012e6101dc3660046110ab565b6105a8565b6101e96105fe565b6040516101589190611557565b61012e6102043660046110ab565b610637565b61012e6102173660046110ab565b61067d565b6102246106c3565b604051610158919061152d565b6101696106f9565b61012e6102473660046110ab565b61074e565b6101696107b9565b61012e6102623660046110ab565b61080e565b61027081610879565b8051601e80546001600160a01b039283166001600160a01b031991821617909155602080840151601f5560409093015183549216911617905550565b6102b58161094a565b8051600f80546001600160a01b039283166001600160a01b0319918216179091556020830151601055604083015160118054918416918316919091179055606083015160128054919093169116179055608081015160135560a0015160145550565b61031f610e8a565b604080518082018252602180546001600160a01b03168252602280548451602060026101006001851615026000190190931692909204601f810183900483028201830190965285815293949293818601939092918301828280156103c45780601f10610399576101008083540402835291602001916103c4565b820191906000526020600020905b8154815290600101906020018083116103a757829003601f168201915b50505050508152505090505b90565b6103db610ea2565b506040805160c0810182526003546001600160a01b03908116825260045460208301526005548116928201929092526006549091166060820152600754608082015260085460a082015290565b610430610ef3565b5060408051606081018252601e546001600160a01b039081168252601f5460208084019190915254169181019190915290565b61046b610ea2565b506040805160c0810182526009546001600160a01b039081168252600a546020830152600b54811692820192909252600c549091166060820152600d546080820152600e5460a082015290565b6104c0610f13565b506040805160a0810182526023546001600160a01b039081168252602454166020820152602554918101919091526026546060820152602754608082015290565b61050a81610a0f565b8051600080546001600160a01b0319166001600160a01b0390921691909117905560208101516001556040015160025550565b61054681610ae7565b8051601580546001600160a01b039283166001600160a01b0319918216179091556020830151601655604083015160178054918416918316919091179055606083015160188054919093169116179055608081015160195560a00151601a5550565b6105b181610b45565b8051602380546001600160a01b039283166001600160a01b031991821617909155602083015160248054919093169116179055604081015160255560608101516026556080015160275550565b610606610ef3565b5060408051606081018252601b546001600160a01b039081168252601c54166020820152601d549181019190915290565b61064081610c5f565b8051602180546001600160a01b0319166001600160a01b039092169190911781556020808301518051610677926022920190610f54565b50505050565b61068681610ce4565b8051601b80546001600160a01b039283166001600160a01b0319918216179091556020830151601c805491909316911617905560400151601d5550565b6106cb610fd2565b50604080516060810182526000546001600160a01b0316815260015460208201526002549181019190915290565b610701610ea2565b506040805160c081018252600f546001600160a01b03908116825260105460208301526011548116928201929092526012549091166060820152601354608082015260145460a082015290565b61075781610d76565b8051600380546001600160a01b039283166001600160a01b0319918216179091556020830151600455604083015160058054918416918316919091179055606083015160068054919093169116179055608081015160075560a0015160085550565b6107c1610ea2565b506040805160c0810182526015546001600160a01b039081168252601654602083015260175481169282019290925260185490911660608201526019546080820152601a5460a082015290565b61081781610deb565b8051600980546001600160a01b039283166001600160a01b0319918216179091556020830151600a556040830151600b80549184169183169190911790556060830151600c80549190931691161790556080810151600d5560a00151600e5550565b610881610ef3565b60078251600a81111561089057fe5b146108b65760405162461bcd60e51b81526004016108ad9061136f565b60405180910390fd5b60208201516001600160a01b03166108e05760405162461bcd60e51b81526004016108ad90611250565b60408201516001600160a01b031661090a5760405162461bcd60e51b81526004016108ad906113fd565b604051806060016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b03168152509050919050565b610952610ea2565b60018251600a81111561096157fe5b1461097e5760405162461bcd60e51b81526004016108ad9061141a565b60208201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad90611453565b6040518060c0016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b0316815260200183606001516001600160a01b031681526020018360c0015181526020018360a001518152509050919050565b610a17610fd2565b60008251600a811115610a2657fe5b14610a435760405162461bcd60e51b81526004016108ad9061128a565b60208201516001600160a01b0316610a6d5760405162461bcd60e51b81526004016108ad906112c2565b60008260e001515160201415610a98578260e00151806020019051810190610a95919061117e565b90505b60028110610ab85760405162461bcd60e51b81526004016108ad90611234565b604080516060810182526020808601516001600160a01b03168252608090950151948101949094528301525090565b610aef610ea2565b60028251600a811115610afe57fe5b14610b1b5760405162461bcd60e51b81526004016108ad906113c4565b60208201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad906112a6565b610b4d610f13565b600a8251600a811115610b5c57fe5b14610b795760405162461bcd60e51b81526004016108ad906111dd565b60208201516001600160a01b0316610ba35760405162461bcd60e51b81526004016108ad9061126d565b60408201516001600160a01b0316610bcd5760405162461bcd60e51b81526004016108ad90611217565b8160e0015151602014610bf25760405162461bcd60e51b81526004016108ad906113e0565b60008260e00151806020019051810190610c0c919061117e565b90506040518060a0016040528084602001516001600160a01b0316815260200184604001516001600160a01b03168152602001846080015181526020018460a00151815260200182815250915050919050565b610c67610e8a565b60098251600a811115610c7657fe5b14610c935760405162461bcd60e51b81526004016108ad906112fb565b60408201516001600160a01b0316610cbd5760405162461bcd60e51b81526004016108ad90611352565b50604080518082018252908201516001600160a01b0316815260e090910151602082015290565b610cec610ef3565b60088251600a811115610cfb57fe5b14610d185760405162461bcd60e51b81526004016108ad90611436565b60408201516001600160a01b0316610d425760405162461bcd60e51b81526004016108ad906112de565b506040805160608082018352838301516001600160a01b0390811683529084015116602082015260a0909201519082015290565b610d7e610ea2565b60038251600a811115610d8d57fe5b1480610da5575060058251600a811115610da357fe5b145b610dc15760405162461bcd60e51b81526004016108ad9061138c565b60208201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad906113a8565b610df3610ea2565b60048251600a811115610e0257fe5b1480610e1a575060068251600a811115610e1857fe5b145b610e365760405162461bcd60e51b81526004016108ad90611318565b60208201516001600160a01b0316610e605760405162461bcd60e51b81526004016108ad906111fa565b60408201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad90611335565b60408051808201909152600081526060602082015290565b6040518060c0016040528060006001600160a01b031681526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f9557805160ff1916838001178555610fc2565b82800160010185558215610fc2579182015b82811115610fc2578251825591602001919060010190610fa7565b50610fce929150610ffc565b5090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6103d091905b80821115610fce5760008155600101611002565b80356001600160a01b038116811461102d57600080fd5b92915050565b600082601f830112611043578081fd5b813567ffffffffffffffff811115611059578182fd5b61106c601f8201601f19166020016115b3565b915080825283602082850101111561108357600080fd5b8060208401602084013760009082016020015292915050565b8035600b811061102d57600080fd5b6000602082840312156110bc578081fd5b813567ffffffffffffffff808211156110d3578283fd5b6101009184018086038313156110e7578384fd5b6110f0836115b3565b6110fa878361109c565b81526111098760208401611016565b602082015261111b8760408401611016565b604082015261112d8760608401611016565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e0820135935082841115611163578485fd5b61116f87858401611033565b60e08201529695505050505050565b60006020828403121561118f578081fd5b5051919050565b80516001600160a01b03908116835260208083015190840152604080830151821690840152606080830151909116908301526080808201519083015260a090810151910152565b60208082526003908201526208262760eb1b604082015260600190565b60208082526003908201526241313160e81b604082015260600190565b60208082526003908201526204132360ec1b604082015260600190565b602080825260029082015261413360f01b604082015260600190565b60208082526003908201526220989b60e91b604082015260600190565b60208082526003908201526241313960e81b604082015260600190565b602080825260029082015261413160f01b604082015260600190565b602080825260029082015261413760f01b604082015260600190565b602080825260029082015261209960f11b604082015260600190565b602080825260039082015262104c4d60ea1b604082015260600190565b60208082526003908201526220991960e91b604082015260600190565b60208082526003908201526204131360ec1b604082015260600190565b60208082526003908201526220989960e91b604082015260600190565b60208082526003908201526241323360e81b604082015260600190565b60208082526003908201526241313560e81b604082015260600190565b602080825260029082015261082760f31b604082015260600190565b602080825260029082015261413960f01b604082015260600190565b602080825260029082015261209b60f11b604082015260600190565b60208082526003908201526241323160e81b604082015260600190565b60208082526003908201526241313760e81b604082015260600190565b602080825260029082015261104d60f21b604082015260600190565b60208082526003908201526241313360e81b604082015260600190565b602080825260029082015261413560f01b604082015260600190565b60c0810161102d8284611196565b6000602080835260018060a01b0384511681840152808401516040808501528051806060860152835b818110156114c2578281018401518682016080015283016114a6565b818111156114d35784608083880101525b50601f01601f191693909301608001949350505050565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606080830151908201526080918201519181019190915260a00190565b81516001600160a01b03168152602080830151908201526040918201519181019190915260600190565b81516001600160a01b039081168252602080840151909116908201526040918201519181019190915260600190565b81516001600160a01b03908116825260208084015190830152604092830151169181019190915260600190565b60405181810167ffffffffffffffff811182821017156115d257600080fd5b60405291905056fea264697066735822122054922c7e768b9a7d2fed64e6a3c11f055ba9b95cf899703f8a28f0dd0f99779b64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1610 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 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9D53155A GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xCC294D7C GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCC294D7C EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xCDC5C6D3 EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0xE516B11E EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xEF772C47 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xF5380A84 EQ PUSH2 0x254 JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x9D53155A EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0xB90835AD EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0xBE0C775C EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xC36B3F12 EQ PUSH2 0x209 JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x42EF617D GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x42EF617D EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x4AF9D84F EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0x60062217 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x7343B9B7 EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x83BB0C5D EQ PUSH2 0x1BB JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x2772FC6 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x65D80E4 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x21667FE5 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x3A3A2585 EQ PUSH2 0x161 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12E PUSH2 0x129 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x267 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12E PUSH2 0x13E CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x2AC JUMP JUMPDEST PUSH2 0x14B PUSH2 0x317 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x147D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x169 PUSH2 0x3D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x146F JUMP JUMPDEST PUSH2 0x17E PUSH2 0x428 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x1586 JUMP JUMPDEST PUSH2 0x169 PUSH2 0x463 JUMP JUMPDEST PUSH2 0x19B PUSH2 0x4B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x14EA JUMP JUMPDEST PUSH2 0x12E PUSH2 0x1B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x501 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x53D JUMP JUMPDEST PUSH2 0x12E PUSH2 0x1DC CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x5FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x1557 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x204 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x637 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x217 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x67D JUMP JUMPDEST PUSH2 0x224 PUSH2 0x6C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x152D JUMP JUMPDEST PUSH2 0x169 PUSH2 0x6F9 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x247 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x74E JUMP JUMPDEST PUSH2 0x169 PUSH2 0x7B9 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x262 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x80E JUMP JUMPDEST PUSH2 0x270 DUP2 PUSH2 0x879 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x1F SSTORE PUSH1 0x40 SWAP1 SWAP4 ADD MLOAD DUP4 SLOAD SWAP3 AND SWAP2 AND OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x2B5 DUP2 PUSH2 0x94A JUMP JUMPDEST DUP1 MLOAD PUSH1 0xF DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x10 SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x11 DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x12 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x13 SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0x14 SSTORE POP JUMP JUMPDEST PUSH2 0x31F PUSH2 0xE8A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x21 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x22 DUP1 SLOAD DUP5 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH2 0x100 PUSH1 0x1 DUP6 AND ISZERO MUL PUSH1 0x0 NOT ADD SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP3 ADD DUP4 ADD SWAP1 SWAP7 MSTORE DUP6 DUP2 MSTORE SWAP4 SWAP5 SWAP3 SWAP4 DUP2 DUP7 ADD SWAP4 SWAP1 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x399 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C4 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 0x3A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x4 SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x5 SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x6 SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x8 SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x430 PUSH2 0xEF3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1F SLOAD PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x46B PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xA SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xB SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xE SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x4C0 PUSH2 0xF13 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x23 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x24 SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x25 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x26 SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x27 SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x50A DUP2 PUSH2 0xA0F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 SSTORE PUSH1 0x40 ADD MLOAD PUSH1 0x2 SSTORE POP JUMP JUMPDEST PUSH2 0x546 DUP2 PUSH2 0xAE7 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x16 SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x17 DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x18 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x19 SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0x1A SSTORE POP JUMP JUMPDEST PUSH2 0x5B1 DUP2 PUSH2 0xB45 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x23 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x24 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x25 SSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x26 SSTORE PUSH1 0x80 ADD MLOAD PUSH1 0x27 SSTORE POP JUMP JUMPDEST PUSH2 0x606 PUSH2 0xEF3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1C SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1D SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x640 DUP2 PUSH2 0xC5F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x21 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x677 SWAP3 PUSH1 0x22 SWAP3 ADD SWAP1 PUSH2 0xF54 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x686 DUP2 PUSH2 0xCE4 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1C DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x40 ADD MLOAD PUSH1 0x1D SSTORE POP JUMP JUMPDEST PUSH2 0x6CB PUSH2 0xFD2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x701 PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0xF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x10 SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x11 SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x12 SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x13 SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x14 SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x757 DUP2 PUSH2 0xD76 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x4 SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x5 DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x7 SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0x8 SSTORE POP JUMP JUMPDEST PUSH2 0x7C1 PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x16 SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x17 SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x18 SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x19 SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x1A SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x817 DUP2 PUSH2 0xDEB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0xB DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xC DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xD SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0xE SSTORE POP JUMP JUMPDEST PUSH2 0x881 PUSH2 0xEF3 JUMP JUMPDEST PUSH1 0x7 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x890 JUMPI INVALID JUMPDEST EQ PUSH2 0x8B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x136F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1250 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x952 PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x1 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x961 JUMPI INVALID JUMPDEST EQ PUSH2 0x97E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x141A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1453 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA17 PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xA26 JUMPI INVALID JUMPDEST EQ PUSH2 0xA43 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x128A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA6D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12C2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ ISZERO PUSH2 0xA98 JUMPI DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xA95 SWAP2 SWAP1 PUSH2 0x117E JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0xAB8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1234 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0xAEF PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x2 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xAFE JUMPI INVALID JUMPDEST EQ PUSH2 0xB1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13C4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0xB4D PUSH2 0xF13 JUMP JUMPDEST PUSH1 0xA DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xB5C JUMPI INVALID JUMPDEST EQ PUSH2 0xB79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x11DD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBA3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBCD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1217 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ PUSH2 0xBF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13E0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xC0C SWAP2 SWAP1 PUSH2 0x117E JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC67 PUSH2 0xE8A JUMP JUMPDEST PUSH1 0x9 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xC76 JUMPI INVALID JUMPDEST EQ PUSH2 0xC93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1352 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE SWAP1 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xCEC PUSH2 0xEF3 JUMP JUMPDEST PUSH1 0x8 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xCFB JUMPI INVALID JUMPDEST EQ PUSH2 0xD18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1436 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12DE JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP4 MSTORE DUP4 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP5 ADD MLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xD7E PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x3 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xD8D JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0xDA5 JUMPI POP PUSH1 0x5 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xDA3 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0xDC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x138C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0xDF3 PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x4 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xE02 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0xE1A JUMPI POP PUSH1 0x6 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xE18 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0xE36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1318 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x11FA JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1335 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 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 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 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 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xF95 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xFC2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xFC2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xFC2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xFA7 JUMP JUMPDEST POP PUSH2 0xFCE SWAP3 SWAP2 POP PUSH2 0xFFC JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 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 POP SWAP1 JUMP JUMPDEST PUSH2 0x3D0 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xFCE JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1002 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x102D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1043 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1059 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x106C PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x15B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1083 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xB DUP2 LT PUSH2 0x102D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10BC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x10D3 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x100 SWAP2 DUP5 ADD DUP1 DUP7 SUB DUP4 SGT ISZERO PUSH2 0x10E7 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x10F0 DUP4 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x10FA DUP8 DUP4 PUSH2 0x109C JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1109 DUP8 PUSH1 0x20 DUP5 ADD PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x111B DUP8 PUSH1 0x40 DUP5 ADD PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x112D DUP8 PUSH1 0x60 DUP5 ADD PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP3 ADD CALLDATALOAD SWAP4 POP DUP3 DUP5 GT ISZERO PUSH2 0x1163 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x116F DUP8 DUP6 DUP5 ADD PUSH2 0x1033 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x118F JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x82627 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413131 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41323 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4133 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x20989B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413139 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4131 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4137 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2099 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x104C4D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209919 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41313 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209899 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413233 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413135 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x827 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4139 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x209B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413231 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413137 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x104D PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413133 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4135 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD PUSH2 0x102D DUP3 DUP5 PUSH2 0x1196 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP5 MLOAD AND DUP2 DUP5 ADD MSTORE DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MSTORE DUP1 MLOAD DUP1 PUSH1 0x60 DUP7 ADD MSTORE DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x14C2 JUMPI DUP3 DUP2 ADD DUP5 ADD MLOAD DUP7 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP4 ADD PUSH2 0x14A6 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x14D3 JUMPI DUP5 PUSH1 0x80 DUP4 DUP9 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP4 SWAP1 SWAP4 ADD PUSH1 0x80 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x40 SWAP3 DUP4 ADD MLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x15D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD SWAP3 0x2C PUSH31 0x768B9A7D2FED64E6A3C11F055BA9B95CF899703F8A28F0DD0F99779B64736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "145:2773:73:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101165760003560e01c80639d53155a116100a2578063cc294d7c11610071578063cc294d7c1461021c578063cdc5c6d314610231578063e516b11e14610239578063ef772c471461024c578063f5380a841461025457610116565b80639d53155a146101ce578063b90835ad146101e1578063be0c775c146101f6578063c36b3f121461020957610116565b806342ef617d116100e957806342ef617d146101765780634af9d84f1461018b57806360062217146101935780637343b9b7146101a857806383bb0c5d146101bb57610116565b806302772fc61461011b578063065d80e41461013057806321667fe5146101435780633a3a258514610161575b600080fd5b61012e6101293660046110ab565b610267565b005b61012e61013e3660046110ab565b6102ac565b61014b610317565b604051610158919061147d565b60405180910390f35b6101696103d3565b604051610158919061146f565b61017e610428565b6040516101589190611586565b610169610463565b61019b6104b8565b60405161015891906114ea565b61012e6101b63660046110ab565b610501565b61012e6101c93660046110ab565b61053d565b61012e6101dc3660046110ab565b6105a8565b6101e96105fe565b6040516101589190611557565b61012e6102043660046110ab565b610637565b61012e6102173660046110ab565b61067d565b6102246106c3565b604051610158919061152d565b6101696106f9565b61012e6102473660046110ab565b61074e565b6101696107b9565b61012e6102623660046110ab565b61080e565b61027081610879565b8051601e80546001600160a01b039283166001600160a01b031991821617909155602080840151601f5560409093015183549216911617905550565b6102b58161094a565b8051600f80546001600160a01b039283166001600160a01b0319918216179091556020830151601055604083015160118054918416918316919091179055606083015160128054919093169116179055608081015160135560a0015160145550565b61031f610e8a565b604080518082018252602180546001600160a01b03168252602280548451602060026101006001851615026000190190931692909204601f810183900483028201830190965285815293949293818601939092918301828280156103c45780601f10610399576101008083540402835291602001916103c4565b820191906000526020600020905b8154815290600101906020018083116103a757829003601f168201915b50505050508152505090505b90565b6103db610ea2565b506040805160c0810182526003546001600160a01b03908116825260045460208301526005548116928201929092526006549091166060820152600754608082015260085460a082015290565b610430610ef3565b5060408051606081018252601e546001600160a01b039081168252601f5460208084019190915254169181019190915290565b61046b610ea2565b506040805160c0810182526009546001600160a01b039081168252600a546020830152600b54811692820192909252600c549091166060820152600d546080820152600e5460a082015290565b6104c0610f13565b506040805160a0810182526023546001600160a01b039081168252602454166020820152602554918101919091526026546060820152602754608082015290565b61050a81610a0f565b8051600080546001600160a01b0319166001600160a01b0390921691909117905560208101516001556040015160025550565b61054681610ae7565b8051601580546001600160a01b039283166001600160a01b0319918216179091556020830151601655604083015160178054918416918316919091179055606083015160188054919093169116179055608081015160195560a00151601a5550565b6105b181610b45565b8051602380546001600160a01b039283166001600160a01b031991821617909155602083015160248054919093169116179055604081015160255560608101516026556080015160275550565b610606610ef3565b5060408051606081018252601b546001600160a01b039081168252601c54166020820152601d549181019190915290565b61064081610c5f565b8051602180546001600160a01b0319166001600160a01b039092169190911781556020808301518051610677926022920190610f54565b50505050565b61068681610ce4565b8051601b80546001600160a01b039283166001600160a01b0319918216179091556020830151601c805491909316911617905560400151601d5550565b6106cb610fd2565b50604080516060810182526000546001600160a01b0316815260015460208201526002549181019190915290565b610701610ea2565b506040805160c081018252600f546001600160a01b03908116825260105460208301526011548116928201929092526012549091166060820152601354608082015260145460a082015290565b61075781610d76565b8051600380546001600160a01b039283166001600160a01b0319918216179091556020830151600455604083015160058054918416918316919091179055606083015160068054919093169116179055608081015160075560a0015160085550565b6107c1610ea2565b506040805160c0810182526015546001600160a01b039081168252601654602083015260175481169282019290925260185490911660608201526019546080820152601a5460a082015290565b61081781610deb565b8051600980546001600160a01b039283166001600160a01b0319918216179091556020830151600a556040830151600b80549184169183169190911790556060830151600c80549190931691161790556080810151600d5560a00151600e5550565b610881610ef3565b60078251600a81111561089057fe5b146108b65760405162461bcd60e51b81526004016108ad9061136f565b60405180910390fd5b60208201516001600160a01b03166108e05760405162461bcd60e51b81526004016108ad90611250565b60408201516001600160a01b031661090a5760405162461bcd60e51b81526004016108ad906113fd565b604051806060016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b03168152509050919050565b610952610ea2565b60018251600a81111561096157fe5b1461097e5760405162461bcd60e51b81526004016108ad9061141a565b60208201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad90611453565b6040518060c0016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b0316815260200183606001516001600160a01b031681526020018360c0015181526020018360a001518152509050919050565b610a17610fd2565b60008251600a811115610a2657fe5b14610a435760405162461bcd60e51b81526004016108ad9061128a565b60208201516001600160a01b0316610a6d5760405162461bcd60e51b81526004016108ad906112c2565b60008260e001515160201415610a98578260e00151806020019051810190610a95919061117e565b90505b60028110610ab85760405162461bcd60e51b81526004016108ad90611234565b604080516060810182526020808601516001600160a01b03168252608090950151948101949094528301525090565b610aef610ea2565b60028251600a811115610afe57fe5b14610b1b5760405162461bcd60e51b81526004016108ad906113c4565b60208201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad906112a6565b610b4d610f13565b600a8251600a811115610b5c57fe5b14610b795760405162461bcd60e51b81526004016108ad906111dd565b60208201516001600160a01b0316610ba35760405162461bcd60e51b81526004016108ad9061126d565b60408201516001600160a01b0316610bcd5760405162461bcd60e51b81526004016108ad90611217565b8160e0015151602014610bf25760405162461bcd60e51b81526004016108ad906113e0565b60008260e00151806020019051810190610c0c919061117e565b90506040518060a0016040528084602001516001600160a01b0316815260200184604001516001600160a01b03168152602001846080015181526020018460a00151815260200182815250915050919050565b610c67610e8a565b60098251600a811115610c7657fe5b14610c935760405162461bcd60e51b81526004016108ad906112fb565b60408201516001600160a01b0316610cbd5760405162461bcd60e51b81526004016108ad90611352565b50604080518082018252908201516001600160a01b0316815260e090910151602082015290565b610cec610ef3565b60088251600a811115610cfb57fe5b14610d185760405162461bcd60e51b81526004016108ad90611436565b60408201516001600160a01b0316610d425760405162461bcd60e51b81526004016108ad906112de565b506040805160608082018352838301516001600160a01b0390811683529084015116602082015260a0909201519082015290565b610d7e610ea2565b60038251600a811115610d8d57fe5b1480610da5575060058251600a811115610da357fe5b145b610dc15760405162461bcd60e51b81526004016108ad9061138c565b60208201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad906113a8565b610df3610ea2565b60048251600a811115610e0257fe5b1480610e1a575060068251600a811115610e1857fe5b145b610e365760405162461bcd60e51b81526004016108ad90611318565b60208201516001600160a01b0316610e605760405162461bcd60e51b81526004016108ad906111fa565b60408201516001600160a01b03166109a85760405162461bcd60e51b81526004016108ad90611335565b60408051808201909152600081526060602082015290565b6040518060c0016040528060006001600160a01b031681526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f9557805160ff1916838001178555610fc2565b82800160010185558215610fc2579182015b82811115610fc2578251825591602001919060010190610fa7565b50610fce929150610ffc565b5090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6103d091905b80821115610fce5760008155600101611002565b80356001600160a01b038116811461102d57600080fd5b92915050565b600082601f830112611043578081fd5b813567ffffffffffffffff811115611059578182fd5b61106c601f8201601f19166020016115b3565b915080825283602082850101111561108357600080fd5b8060208401602084013760009082016020015292915050565b8035600b811061102d57600080fd5b6000602082840312156110bc578081fd5b813567ffffffffffffffff808211156110d3578283fd5b6101009184018086038313156110e7578384fd5b6110f0836115b3565b6110fa878361109c565b81526111098760208401611016565b602082015261111b8760408401611016565b604082015261112d8760608401611016565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e0820135935082841115611163578485fd5b61116f87858401611033565b60e08201529695505050505050565b60006020828403121561118f578081fd5b5051919050565b80516001600160a01b03908116835260208083015190840152604080830151821690840152606080830151909116908301526080808201519083015260a090810151910152565b60208082526003908201526208262760eb1b604082015260600190565b60208082526003908201526241313160e81b604082015260600190565b60208082526003908201526204132360ec1b604082015260600190565b602080825260029082015261413360f01b604082015260600190565b60208082526003908201526220989b60e91b604082015260600190565b60208082526003908201526241313960e81b604082015260600190565b602080825260029082015261413160f01b604082015260600190565b602080825260029082015261413760f01b604082015260600190565b602080825260029082015261209960f11b604082015260600190565b602080825260039082015262104c4d60ea1b604082015260600190565b60208082526003908201526220991960e91b604082015260600190565b60208082526003908201526204131360ec1b604082015260600190565b60208082526003908201526220989960e91b604082015260600190565b60208082526003908201526241323360e81b604082015260600190565b60208082526003908201526241313560e81b604082015260600190565b602080825260029082015261082760f31b604082015260600190565b602080825260029082015261413960f01b604082015260600190565b602080825260029082015261209b60f11b604082015260600190565b60208082526003908201526241323160e81b604082015260600190565b60208082526003908201526241313760e81b604082015260600190565b602080825260029082015261104d60f21b604082015260600190565b60208082526003908201526241313360e81b604082015260600190565b602080825260029082015261413560f01b604082015260600190565b60c0810161102d8284611196565b6000602080835260018060a01b0384511681840152808401516040808501528051806060860152835b818110156114c2578281018401518682016080015283016114a6565b818111156114d35784608083880101525b50601f01601f191693909301608001949350505050565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606080830151908201526080918201519181019190915260a00190565b81516001600160a01b03168152602080830151908201526040918201519181019190915260600190565b81516001600160a01b039081168252602080840151909116908201526040918201519181019190915260600190565b81516001600160a01b03908116825260208084015190830152604092830151169181019190915260600190565b60405181810167ffffffffffffffff811182821017156115d257600080fd5b60405291905056fea264697066735822122054922c7e768b9a7d2fed64e6a3c11f055ba9b95cf899703f8a28f0dd0f99779b64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9D53155A GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xCC294D7C GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCC294D7C EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xCDC5C6D3 EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0xE516B11E EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xEF772C47 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xF5380A84 EQ PUSH2 0x254 JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x9D53155A EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0xB90835AD EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0xBE0C775C EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xC36B3F12 EQ PUSH2 0x209 JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x42EF617D GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x42EF617D EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x4AF9D84F EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0x60062217 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x7343B9B7 EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x83BB0C5D EQ PUSH2 0x1BB JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x2772FC6 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x65D80E4 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x21667FE5 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x3A3A2585 EQ PUSH2 0x161 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12E PUSH2 0x129 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x267 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12E PUSH2 0x13E CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x2AC JUMP JUMPDEST PUSH2 0x14B PUSH2 0x317 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x147D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x169 PUSH2 0x3D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x146F JUMP JUMPDEST PUSH2 0x17E PUSH2 0x428 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x1586 JUMP JUMPDEST PUSH2 0x169 PUSH2 0x463 JUMP JUMPDEST PUSH2 0x19B PUSH2 0x4B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x14EA JUMP JUMPDEST PUSH2 0x12E PUSH2 0x1B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x501 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x53D JUMP JUMPDEST PUSH2 0x12E PUSH2 0x1DC CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x5FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x1557 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x204 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x637 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x217 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x67D JUMP JUMPDEST PUSH2 0x224 PUSH2 0x6C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x152D JUMP JUMPDEST PUSH2 0x169 PUSH2 0x6F9 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x247 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x74E JUMP JUMPDEST PUSH2 0x169 PUSH2 0x7B9 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x262 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AB JUMP JUMPDEST PUSH2 0x80E JUMP JUMPDEST PUSH2 0x270 DUP2 PUSH2 0x879 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x1F SSTORE PUSH1 0x40 SWAP1 SWAP4 ADD MLOAD DUP4 SLOAD SWAP3 AND SWAP2 AND OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x2B5 DUP2 PUSH2 0x94A JUMP JUMPDEST DUP1 MLOAD PUSH1 0xF DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x10 SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x11 DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x12 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x13 SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0x14 SSTORE POP JUMP JUMPDEST PUSH2 0x31F PUSH2 0xE8A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x21 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x22 DUP1 SLOAD DUP5 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH2 0x100 PUSH1 0x1 DUP6 AND ISZERO MUL PUSH1 0x0 NOT ADD SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP3 ADD DUP4 ADD SWAP1 SWAP7 MSTORE DUP6 DUP2 MSTORE SWAP4 SWAP5 SWAP3 SWAP4 DUP2 DUP7 ADD SWAP4 SWAP1 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x399 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C4 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 0x3A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x4 SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x5 SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x6 SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x8 SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x430 PUSH2 0xEF3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1F SLOAD PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x46B PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xA SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xB SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xE SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x4C0 PUSH2 0xF13 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x23 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x24 SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x25 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x26 SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x27 SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x50A DUP2 PUSH2 0xA0F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 SSTORE PUSH1 0x40 ADD MLOAD PUSH1 0x2 SSTORE POP JUMP JUMPDEST PUSH2 0x546 DUP2 PUSH2 0xAE7 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x16 SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x17 DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x18 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x19 SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0x1A SSTORE POP JUMP JUMPDEST PUSH2 0x5B1 DUP2 PUSH2 0xB45 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x23 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x24 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x25 SSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x26 SSTORE PUSH1 0x80 ADD MLOAD PUSH1 0x27 SSTORE POP JUMP JUMPDEST PUSH2 0x606 PUSH2 0xEF3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1C SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1D SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x640 DUP2 PUSH2 0xC5F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x21 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x677 SWAP3 PUSH1 0x22 SWAP3 ADD SWAP1 PUSH2 0xF54 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x686 DUP2 PUSH2 0xCE4 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1C DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x40 ADD MLOAD PUSH1 0x1D SSTORE POP JUMP JUMPDEST PUSH2 0x6CB PUSH2 0xFD2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x701 PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0xF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x10 SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x11 SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x12 SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x13 SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x14 SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x757 DUP2 PUSH2 0xD76 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x4 SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x5 DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x7 SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0x8 SSTORE POP JUMP JUMPDEST PUSH2 0x7C1 PUSH2 0xEA2 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x16 SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x17 SLOAD DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x18 SLOAD SWAP1 SWAP2 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x19 SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x1A SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x817 DUP2 PUSH2 0xDEB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA SSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0xB DUP1 SLOAD SWAP2 DUP5 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xC DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xD SSTORE PUSH1 0xA0 ADD MLOAD PUSH1 0xE SSTORE POP JUMP JUMPDEST PUSH2 0x881 PUSH2 0xEF3 JUMP JUMPDEST PUSH1 0x7 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x890 JUMPI INVALID JUMPDEST EQ PUSH2 0x8B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x136F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1250 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x952 PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x1 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0x961 JUMPI INVALID JUMPDEST EQ PUSH2 0x97E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x141A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1453 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA17 PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xA26 JUMPI INVALID JUMPDEST EQ PUSH2 0xA43 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x128A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA6D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12C2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ ISZERO PUSH2 0xA98 JUMPI DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xA95 SWAP2 SWAP1 PUSH2 0x117E JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0xAB8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1234 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0xAEF PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x2 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xAFE JUMPI INVALID JUMPDEST EQ PUSH2 0xB1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13C4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0xB4D PUSH2 0xF13 JUMP JUMPDEST PUSH1 0xA DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xB5C JUMPI INVALID JUMPDEST EQ PUSH2 0xB79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x11DD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBA3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBCD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1217 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD MLOAD PUSH1 0x20 EQ PUSH2 0xBF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13E0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xE0 ADD MLOAD DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xC0C SWAP2 SWAP1 PUSH2 0x117E JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC67 PUSH2 0xE8A JUMP JUMPDEST PUSH1 0x9 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xC76 JUMPI INVALID JUMPDEST EQ PUSH2 0xC93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1352 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE SWAP1 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xCEC PUSH2 0xEF3 JUMP JUMPDEST PUSH1 0x8 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xCFB JUMPI INVALID JUMPDEST EQ PUSH2 0xD18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1436 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x12DE JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP4 MSTORE DUP4 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP5 ADD MLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xD7E PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x3 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xD8D JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0xDA5 JUMPI POP PUSH1 0x5 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xDA3 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0xDC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x138C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0xDF3 PUSH2 0xEA2 JUMP JUMPDEST PUSH1 0x4 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xE02 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0xE1A JUMPI POP PUSH1 0x6 DUP3 MLOAD PUSH1 0xA DUP2 GT ISZERO PUSH2 0xE18 JUMPI INVALID JUMPDEST EQ JUMPDEST PUSH2 0xE36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1318 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x11FA JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8AD SWAP1 PUSH2 0x1335 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 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 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 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 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xF95 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xFC2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xFC2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xFC2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xFA7 JUMP JUMPDEST POP PUSH2 0xFCE SWAP3 SWAP2 POP PUSH2 0xFFC JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 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 POP SWAP1 JUMP JUMPDEST PUSH2 0x3D0 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xFCE JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1002 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x102D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1043 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1059 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x106C PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x15B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1083 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xB DUP2 LT PUSH2 0x102D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10BC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x10D3 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x100 SWAP2 DUP5 ADD DUP1 DUP7 SUB DUP4 SGT ISZERO PUSH2 0x10E7 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x10F0 DUP4 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x10FA DUP8 DUP4 PUSH2 0x109C JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1109 DUP8 PUSH1 0x20 DUP5 ADD PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x111B DUP8 PUSH1 0x40 DUP5 ADD PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x112D DUP8 PUSH1 0x60 DUP5 ADD PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP3 ADD CALLDATALOAD SWAP4 POP DUP3 DUP5 GT ISZERO PUSH2 0x1163 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x116F DUP8 DUP6 DUP5 ADD PUSH2 0x1033 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x118F JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x82627 PUSH1 0xEB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413131 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41323 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4133 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x20989B PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413139 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4131 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4137 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x2099 PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x104C4D PUSH1 0xEA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209919 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x41313 PUSH1 0xEC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x209899 PUSH1 0xE9 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413233 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413135 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x827 PUSH1 0xF3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4139 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x209B PUSH1 0xF1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413231 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413137 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x104D PUSH1 0xF2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH3 0x413133 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH2 0x4135 PUSH1 0xF0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD PUSH2 0x102D DUP3 DUP5 PUSH2 0x1196 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP5 MLOAD AND DUP2 DUP5 ADD MSTORE DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MSTORE DUP1 MLOAD DUP1 PUSH1 0x60 DUP7 ADD MSTORE DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x14C2 JUMPI DUP3 DUP2 ADD DUP5 ADD MLOAD DUP7 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP4 ADD PUSH2 0x14A6 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x14D3 JUMPI DUP5 PUSH1 0x80 DUP4 DUP9 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP4 SWAP1 SWAP4 ADD PUSH1 0x80 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x40 SWAP3 DUP4 ADD MLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x15D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD SWAP3 0x2C PUSH31 0x768B9A7D2FED64E6A3C11F055BA9B95CF899703F8A28F0DD0F99779B64736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "145:2773:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1634:149;;;;;;;;;:::i;:::-;;2069:128;;;;;;;;;:::i;2689:103::-;;;:::i;:::-;;;;;;;;;;;;;;;;721:112;;;:::i;:::-;;;;;;;;1939:124;;;:::i;:::-;;;;;;;;985:115;;;:::i;2798:118::-;;;:::i;:::-;;;;;;;;1106:143;;;;;;;;;:::i;2312:128::-;;;;;;;;;:::i;1789:144::-;;;;;;;;;:::i;1519:109::-;;;:::i;:::-;;;;;;;;2555:128;;;;;;;;;:::i;1379:134::-;;;;;;;;;:::i;1255:118::-;;;:::i;:::-;;;;;;;;2203:103;;;:::i;577:138::-;;;;;;;;;:::i;2446:103::-;;;:::i;839:140::-;;;;;;;;;:::i;1634:149::-;1740:36;1770:5;1740:29;:36::i;:::-;1722:54;;:15;:54;;-1:-1:-1;;;;;1722:54:73;;;-1:-1:-1;;;;;;1722:54:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1634:149:73:o;2069:128::-;2161:29;2184:5;2161:22;:29::i;:::-;2150:40;;:8;:40;;-1:-1:-1;;;;;2150:40:73;;;-1:-1:-1;;;;;;2150:40:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2069:128:73:o;2689:103::-;2735:23;;:::i;:::-;2770:15;;;;;;;;2777:8;2770:15;;-1:-1:-1;;;;;2770:15:73;;;;;;;;;;;;;;;;-1:-1:-1;;2770:15:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:8;;2770:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2689:103;;:::o;721:112::-;770:26;;:::i;:::-;-1:-1:-1;808:18:73;;;;;;;;815:11;808:18;-1:-1:-1;;;;;808:18:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;721:112;:::o;1939:124::-;1992:30;;:::i;:::-;-1:-1:-1;2034:22:73;;;;;;;;2041:15;2034:22;-1:-1:-1;;;;;2034:22:73;;;;;;;;;;;;;;;;;;;;;;;;1939:124;:::o;985:115::-;1035:27;;:::i;:::-;-1:-1:-1;1074:19:73;;;;;;;;1081:12;1074:19;-1:-1:-1;;;;;1074:19:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;985:115;:::o;2798:118::-;2849:28;;:::i;:::-;-1:-1:-1;2889:20:73;;;;;;;;2896:13;2889:20;-1:-1:-1;;;;;2889:20:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2798:118;:::o;1106:143::-;1208:34;1236:5;1208:27;:34::i;:::-;1192:50;;:13;:50;;-1:-1:-1;;;;;;1192:50:73;-1:-1:-1;;;;;1192:50:73;;;;;;;;;;;;;-1:-1:-1;1192:50:73;;;;;;-1:-1:-1;1106:143:73:o;2312:128::-;2404:29;2427:5;2404:22;:29::i;:::-;2393:40;;:8;:40;;-1:-1:-1;;;;;2393:40:73;;;-1:-1:-1;;;;;;2393:40:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2312:128:73:o;1789:144::-;1892:34;1920:5;1892:27;:34::i;:::-;1876:50;;:13;:50;;-1:-1:-1;;;;;1876:50:73;;;-1:-1:-1;;;;;;1876:50:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1789:144:73:o;1519:109::-;1567:25;;:::i;:::-;-1:-1:-1;1604:17:73;;;;;;;;1611:10;1604:17;-1:-1:-1;;;;;1604:17:73;;;;;;;;;;;;;;;;;;;;;1519:109;:::o;2555:128::-;2647:29;2670:5;2647:22;:29::i;:::-;2636:40;;:8;:40;;-1:-1:-1;;;;;;2636:40:73;-1:-1:-1;;;;;2636:40:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;2555:128:73:o;1379:134::-;1475:31;1500:5;1475:24;:31::i;:::-;1462:44;;:10;:44;;-1:-1:-1;;;;;1462:44:73;;;-1:-1:-1;;;;;;1462:44:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1379:134:73:o;1255:118::-;1306:28;;:::i;:::-;-1:-1:-1;1346:20:73;;;;;;;;1353:13;1346:20;-1:-1:-1;;;;;1346:20:73;;;;;;;;;;;;;;;;;;1255:118;:::o;2203:103::-;2249:23;;:::i;:::-;-1:-1:-1;2284:15:73;;;;;;;;2291:8;2284:15;-1:-1:-1;;;;;2284:15:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2203:103;:::o;577:138::-;676:32;702:5;676:25;:32::i;:::-;662:46;;:11;:46;;-1:-1:-1;;;;;662:46:73;;;-1:-1:-1;;;;;;662:46:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;577:138:73:o;2446:103::-;2492:23;;:::i;:::-;-1:-1:-1;2527:15:73;;;;;;;;2534:8;2527:15;-1:-1:-1;;;;;2527:15:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2446:103;:::o;839:140::-;939:33;966:5;939:26;:33::i;:::-;924:48;;:12;:48;;-1:-1:-1;;;;;924:48:73;;;-1:-1:-1;;;;;;924:48:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;839:140:73:o;11510:392:26:-;11589:22;;:::i;:::-;11651;11631:16;;:42;;;;;;;;;11623:58;;;;-1:-1:-1;;;11623:58:26;;;;;;;;;;;;;;;;;11699:11;;;;-1:-1:-1;;;;;11699:25:26;11691:41;;;;-1:-1:-1;;;11691:41:26;;;;;;;;;11750:19;;;;-1:-1:-1;;;;;11750:33:26;11742:49;;;;-1:-1:-1;;;11742:49:26;;;;;;;;;11809:86;;;;;;;;11833:5;:11;;;-1:-1:-1;;;;;11809:86:26;;;;;11855:5;:13;;;11809:86;;;;11874:5;:19;;;-1:-1:-1;;;;;11809:86:26;;;;11802:93;;11510:392;;;:::o;7823:499::-;7895:15;;:::i;:::-;7950:26;7930:16;;:46;;;;;;;;;7922:61;;;;-1:-1:-1;;;7922:61:26;;;;;;;;;8001:11;;;;-1:-1:-1;;;;;8001:25:26;7993:40;;;;-1:-1:-1;;;7993:40:26;;;;;;;;;8063:252;;;;;;;;8097:5;:11;;;-1:-1:-1;;;;;8063:252:26;;;;;8135:5;:13;;;8063:252;;;;8170:5;:19;;;-1:-1:-1;;;;;8063:252:26;;;;;8215:5;:11;;;-1:-1:-1;;;;;8063:252:26;;;;;8251:5;:11;;;8063:252;;;;8288:5;:12;;;8063:252;;;8044:271;;7823:499;;;:::o;6949:662::-;7026:20;;:::i;:::-;7086;7066:16;;:40;;;;;;;;;7058:55;;;;-1:-1:-1;;;7058:55:26;;;;;;;;;7131:11;;;;-1:-1:-1;;;;;7131:25:26;7123:40;;;;-1:-1:-1;;;7123:40:26;;;;;;;;;7245:17;7277:5;:10;;;:17;7298:2;7277:23;7273:148;;;7388:5;:10;;;7377:33;;;;;;;;;;;;;;7365:45;;7273:148;7497:1;7485:9;:13;7477:28;;;;-1:-1:-1;;;7477:28:26;;;;;;;;;7523:81;;;;;;;;7545:11;;;;;-1:-1:-1;;;;;7523:81:26;;;7567:13;;;;;7523:81;;;;;;;;;;-1:-1:-1;7523:81:26;6949:662::o;8534:501::-;8606:15;;:::i;:::-;8661:26;8641:16;;:46;;;;;;;;;8633:61;;;;-1:-1:-1;;;8633:61:26;;;;;;;;;8712:11;;;;-1:-1:-1;;;;;8712:25:26;8704:40;;;;-1:-1:-1;;;8704:40:26;;;;;;;;11908:700;11985:20;;:::i;:::-;12045;12025:16;;:40;;;;;;;;;12017:56;;;;-1:-1:-1;;;12017:56:26;;;;;;;;;12091:11;;;;-1:-1:-1;;;;;12091:25:26;12083:41;;;;-1:-1:-1;;;12083:41:26;;;;;;;;;12142:19;;;;-1:-1:-1;;;;;12142:33:26;12134:49;;;;-1:-1:-1;;;12134:49:26;;;;;;;;;12201:5;:10;;;:17;12222:2;12201:23;12193:39;;;;-1:-1:-1;;;12193:39:26;;;;;;;;;12296:15;12325:5;:10;;;12314:33;;;;;;;;;;;;;;12296:51;;12377:224;;;;;;;;12416:5;:11;;;-1:-1:-1;;;;;12377:224:26;;;;;12455:5;:19;;;-1:-1:-1;;;;;12377:224:26;;;;;12501:5;:13;;;12377:224;;;;12540:5;:12;;;12377:224;;;;12579:7;12377:224;;;12358:243;;;11908:700;;;:::o;12820:291::-;12892:15;;:::i;:::-;12947;12927:16;;:35;;;;;;;;;12919:51;;;;-1:-1:-1;;;12919:51:26;;;;;;;;;12988:19;;;;-1:-1:-1;;;;;12988:33:26;12980:49;;;;-1:-1:-1;;;12980:49:26;;;;;;;;;-1:-1:-1;13047:57:26;;;;;;;;13065:19;;;;-1:-1:-1;;;;;13047:57:26;;;13092:10;;;;;13047:57;;;;;12820:291::o;10956:326::-;11030:17;;:::i;:::-;11087;11067:16;;:37;;;;;;;;;11059:53;;;;-1:-1:-1;;;11059:53:26;;;;;;;;;11130:19;;;;-1:-1:-1;;;;;11130:33:26;11122:49;;;;-1:-1:-1;;;11122:49:26;;;;;;;;;-1:-1:-1;11189:86:26;;;;;;;;;11211:19;;;;-1:-1:-1;;;;;11189:86:26;;;;;11240:11;;;;11189:86;;;;;11261:12;;;;;11189:86;;;;;10956:326::o;9253:601::-;9328:18;;:::i;:::-;9400:28;9380:16;;:48;;;;;;;;;9379:104;;;-1:-1:-1;9454:28:26;9434:16;;:48;;;;;;;;;9379:104;9358:153;;;;-1:-1:-1;;;9358:153:26;;;;;;;;;9529:11;;;;-1:-1:-1;;;;;9529:25:26;9521:40;;;;-1:-1:-1;;;9521:40:26;;;;;;;;10074:665;10150:19;;:::i;:::-;10223:29;10203:16;;:49;;;;;;;;;10202:106;;;-1:-1:-1;10278:29:26;10258:16;;:49;;;;;;;;;10202:106;10181:156;;;;-1:-1:-1;;;10181:156:26;;;;;;;;;10355:11;;;;-1:-1:-1;;;;;10355:25:26;10347:41;;;;-1:-1:-1;;;10347:41:26;;;;;;;;;10406:19;;;;-1:-1:-1;;;;;10406:33:26;10398:49;;;;-1:-1:-1;;;10398:49:26;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;5:130;72:20;;-1:-1;;;;;33568:54;;34308:35;;34298:2;;34357:1;;34347:12;34298:2;57:78;;;;;143:440;;244:3;237:4;229:6;225:17;221:27;211:2;;-1:-1;;252:12;211:2;299:6;286:20;32762:18;32754:6;32751:30;32748:2;;;-1:-1;;32784:12;32748:2;321:64;32857:9;32838:17;;-1:-1;;32834:33;32925:4;32915:15;321:64;;;312:73;;405:6;398:5;391:21;509:3;32925:4;500:6;433;491:16;;488:25;485:2;;;526:1;;516:12;485:2;33795:6;32925:4;433:6;429:17;32925:4;467:5;463:16;33772:30;33851:1;33833:16;;;32925:4;33833:16;33826:27;467:5;204:379;-1:-1;;204:379;591:160;673:20;;34457:2;34447:13;;34437:2;;34474:1;;34464:12;2550:383;;2682:2;2670:9;2661:7;2657:23;2653:32;2650:2;;;-1:-1;;2688:12;2650:2;2746:17;2733:31;2784:18;;2776:6;2773:30;2770:2;;;-1:-1;;2806:12;2770:2;907:6;;2885:22;;886:19;;;882:32;-1:-1;879:2;;;-1:-1;;917:12;879:2;945:22;907:6;945:22;;;1055:64;1115:3;1091:22;1055:64;;;1037:16;1030:90;1215:49;1260:3;2682:2;1240:9;1236:22;1215:49;;;2682:2;1201:5;1197:16;1190:75;1368:49;1413:3;1335:2;1393:9;1389:22;1368:49;;;1335:2;1354:5;1350:16;1343:75;1513:49;1558:3;1480:2;1538:9;1534:22;1513:49;;;1480:2;1499:5;1495:16;1488:75;1627:3;1686:9;1682:22;2339:20;1627:3;1647:5;1643:16;1636:75;1774:3;1833:9;1829:22;2339:20;1774:3;1794:5;1790:16;1783:75;1920:3;1979:9;1975:22;2339:20;1920:3;1940:5;1936:16;1929:75;2093:3;2082:9;2078:19;2065:33;2051:47;;2784:18;2110:6;2107:30;2104:2;;;-1:-1;;2140:12;2104:2;2185:58;2239:3;2230:6;2219:9;2215:22;2185:58;;;2093:3;2167:16;;2160:84;2171:5;2644:289;-1:-1;;;;;;2644:289;2940:263;;3055:2;3043:9;3034:7;3030:23;3026:32;3023:2;;;-1:-1;;3061:12;3023:2;-1:-1;2487:13;;3017:186;-1:-1;3017:186;10851:1103;11063:23;;-1:-1;;;;;33568:54;;;3271:37;;11237:4;11226:16;;;11220:23;11297:14;;;19396:37;11391:4;11380:16;;;11374:23;33568:54;;11451:14;;;3271:37;11547:4;11536:16;;;11530:23;33568:54;;;11607:14;;;3271:37;11702:4;11691:16;;;11685:23;11762:14;;;19396:37;33579:42;11847:16;;;11841:23;11918:14;;19396:37;10969:985;19445:416;19645:2;19659:47;;;3875:1;19630:18;;;33168:19;-1:-1;;;33208:14;;;3890:26;3935:12;;;19616:245;19868:416;20068:2;20082:47;;;4186:1;20053:18;;;33168:19;-1:-1;;;33208:14;;;4201:26;4246:12;;;20039:245;20291:416;20491:2;20505:47;;;4497:1;20476:18;;;33168:19;-1:-1;;;33208:14;;;4512:26;4557:12;;;20462:245;20714:416;20914:2;20928:47;;;4808:1;20899:18;;;33168:19;-1:-1;;;33208:14;;;4823:25;4867:12;;;20885:245;21137:416;21337:2;21351:47;;;5118:1;21322:18;;;33168:19;-1:-1;;;33208:14;;;5133:26;5178:12;;;21308:245;21560:416;21760:2;21774:47;;;5429:1;21745:18;;;33168:19;-1:-1;;;33208:14;;;5444:26;5489:12;;;21731:245;21983:416;22183:2;22197:47;;;5740:1;22168:18;;;33168:19;-1:-1;;;33208:14;;;5755:25;5799:12;;;22154:245;22406:416;22606:2;22620:47;;;6050:1;22591:18;;;33168:19;-1:-1;;;33208:14;;;6065:25;6109:12;;;22577:245;22829:416;23029:2;23043:47;;;6360:1;23014:18;;;33168:19;-1:-1;;;33208:14;;;6375:25;6419:12;;;23000:245;23252:416;23452:2;23466:47;;;6670:1;23437:18;;;33168:19;-1:-1;;;33208:14;;;6685:26;6730:12;;;23423:245;23675:416;23875:2;23889:47;;;6981:1;23860:18;;;33168:19;-1:-1;;;33208:14;;;6996:26;7041:12;;;23846:245;24098:416;24298:2;24312:47;;;7292:1;24283:18;;;33168:19;-1:-1;;;33208:14;;;7307:26;7352:12;;;24269:245;24521:416;24721:2;24735:47;;;7603:1;24706:18;;;33168:19;-1:-1;;;33208:14;;;7618:26;7663:12;;;24692:245;24944:416;25144:2;25158:47;;;7914:1;25129:18;;;33168:19;-1:-1;;;33208:14;;;7929:26;7974:12;;;25115:245;25367:416;25567:2;25581:47;;;8225:1;25552:18;;;33168:19;-1:-1;;;33208:14;;;8240:26;8285:12;;;25538:245;25790:416;25990:2;26004:47;;;8536:1;25975:18;;;33168:19;-1:-1;;;33208:14;;;8551:25;8595:12;;;25961:245;26213:416;26413:2;26427:47;;;8846:1;26398:18;;;33168:19;-1:-1;;;33208:14;;;8861:25;8905:12;;;26384:245;26636:416;26836:2;26850:47;;;9156:1;26821:18;;;33168:19;-1:-1;;;33208:14;;;9171:25;9215:12;;;26807:245;27059:416;27259:2;27273:47;;;9466:1;27244:18;;;33168:19;-1:-1;;;33208:14;;;9481:26;9526:12;;;27230:245;27482:416;27682:2;27696:47;;;9777:1;27667:18;;;33168:19;-1:-1;;;33208:14;;;9792:26;9837:12;;;27653:245;27905:416;28105:2;28119:47;;;10088:1;28090:18;;;33168:19;-1:-1;;;33208:14;;;10103:25;10147:12;;;28076:245;28328:416;28528:2;28542:47;;;10398:1;28513:18;;;33168:19;-1:-1;;;33208:14;;;10413:26;10458:12;;;28499:245;28751:416;28951:2;28965:47;;;10709:1;28936:18;;;33168:19;-1:-1;;;33208:14;;;10724:25;10768:12;;;28922:245;29174:327;29353:3;29338:19;;29368:123;29342:9;29464:6;29368:123;;29508:378;;29689:2;;29710:17;29703:47;33579:42;;;;;12247:16;12241:23;33568:54;29689:2;29678:9;29674:18;3271:37;29689:2;12405:5;12401:16;12395:23;12173:4;;29678:9;12438:14;12431:38;3452:5;33034:12;33180:6;12164:14;29678:9;12164:14;33168:19;-1:-1;33940:101;33954:6;33951:1;33948:13;33940:101;;;34021:11;;;;;34015:18;34002:11;;;33208:14;34002:11;33995:39;33969:10;;33940:101;;;34056:6;34053:1;34050:13;34047:2;;;-1:-1;33208:14;34112:6;29678:9;34103:16;;34096:27;34047:2;-1:-1;32857:9;34212:14;-1:-1;;34208:28;3599:39;;;;33208:14;3599:39;;29660:226;-1:-1;;;;29660:226;30243:351;14071:23;;-1:-1;;;;;33568:54;;;3271:37;;14246:4;14235:16;;;14229:23;33568:54;;;14306:14;;;3271:37;14403:4;14392:16;;;14386:23;14463:14;;;19396:37;14559:4;14548:16;;;14542:23;14619:14;;;19396:37;14716:4;14705:16;;;14699:23;14776:14;;;19396:37;;;;30434:3;30419:19;;30405:189;30935:350;16275:23;;-1:-1;;;;;33568:54;3271:37;;16449:4;16438:16;;;16432:23;16509:14;;;19396:37;16608:4;16597:16;;;16591:23;16668:14;;;19396:37;;;;31126:2;31111:18;;31097:188;31292:338;16993:23;;-1:-1;;;;;33568:54;;;3271:37;;17166:4;17155:16;;;17149:23;33568:54;;;17226:14;;;3271:37;17322:4;17311:16;;;17305:23;17382:14;;;19396:37;;;;31477:2;31462:18;;31448:182;31637:358;17724:23;;-1:-1;;;;;33568:54;;;3271:37;;17898:4;17887:16;;;17881:23;17958:14;;;19396:37;18050:4;18039:16;;;18033:23;33568:54;18110:14;;;3271:37;;;;31832:2;31817:18;;31803:192;32356:256;32418:2;32412:9;32444:17;;;32519:18;32504:34;;32540:22;;;32501:62;32498:2;;;32576:1;;32566:12;32498:2;32418;32585:22;32396:216;;-1:-1;32396:216"
+ },
+ "methodIdentifiers": {
+ "getBurnArgs()": "ef772c47",
+ "getCallArgs()": "21667fe5",
+ "getDepositArgs()": "3a3a2585",
+ "getLiquidateArgs()": "60062217",
+ "getMintArgs()": "cdc5c6d3",
+ "getOpenVaultArgs()": "cc294d7c",
+ "getRedeemArgs()": "b90835ad",
+ "getSettleVaultArgs()": "42ef617d",
+ "getWithdrawArgs()": "4af9d84f",
+ "testParseBurnAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "83bb0c5d",
+ "testParseCallAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "be0c775c",
+ "testParseDespositAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "e516b11e",
+ "testParseLiquidateActions((uint8,address,address,address,uint256,uint256,uint256,bytes))": "9d53155a",
+ "testParseMintAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "065d80e4",
+ "testParseOpenVaultAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "7343b9b7",
+ "testParseRedeemAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "c36b3f12",
+ "testParseSettleVaultAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "02772fc6",
+ "testParseWithdrawAction((uint8,address,address,address,uint256,uint256,uint256,bytes))": "f5380a84"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getBurnArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.BurnArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCallArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.CallArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDepositArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.DepositArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidateArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.LiquidateArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMintArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.MintArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOpenVaultArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vaultType\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.OpenVaultArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRedeemArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"otoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.RedeemArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSettleVaultArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"internalType\":\"struct Actions.SettleVaultArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawArgs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Actions.WithdrawArgs\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseBurnAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseCallAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseDespositAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseLiquidateActions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseMintAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseOpenVaultAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseRedeemAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseSettleVaultAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"testParseWithdrawAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/tests/ActionTester.sol\":\"ActionTester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/Actions.sol\":{\"keccak256\":\"0x2466a1a3131110b868a7b44c63bea7b5b96f4dabef85955375ac2fe232668470\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cc5bb8b5a9b755a0f1516d9dabc27057839b0a7abc1231750f7d7eb27593a2fa\",\"dweb:/ipfs/Qmb9ELtRVGuBBzxpTuf72KSskwPS16bi35fxYHcRqX8WRy\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/tests/ActionTester.sol\":{\"keccak256\":\"0x93dfdaa718f264c83cb9d8360d83cf20fe8f4b3d490faae57b2be61ca75ee74b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ea1f44aecf67962865127112868aa66aae08d38361384e5034b4cf68d0e13eab\",\"dweb:/ipfs/QmUf56PV2pWwWaHpHHbEm4EmMixti5Az68EVz1twDnhs5E\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/CalculatorTester.sol": {
+ "CalculatorTester": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "dust",
+ "type": "uint256"
+ }
+ ],
+ "name": "CollateralDustUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "timeToExpiry",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "MaxPriceAdded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "timeToExpiry",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oldValue",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "MaxPriceUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oracleDeviation",
+ "type": "uint256"
+ }
+ ],
+ "name": "OracleDeviationUpdated",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "product",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "spotShock",
+ "type": "uint256"
+ }
+ ],
+ "name": "SpotShockUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "productHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "timeToExpiry",
+ "type": "uint256"
+ }
+ ],
+ "name": "TimeToExpiryAdded",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "AUCTION_TIME",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "findUpperBoundValue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ }
+ ],
+ "name": "getCollateralDust",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getExcessCollateral",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getExpiredCashValue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_otoken",
+ "type": "address"
+ }
+ ],
+ "name": "getExpiredPayoutRate",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getMarginRequired",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_timeToExpiry",
+ "type": "uint256"
+ }
+ ],
+ "name": "getMaxPrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_shortAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_underlyingPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_shortExpiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_collateralDecimals",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getNakedMarginRequired",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getOracleDeviation",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getSpotShock",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "getTimesToExpiry",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "_vault",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultLatestUpdate",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_roundId",
+ "type": "uint256"
+ }
+ ],
+ "name": "isLiquidatable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "oracle",
+ "outputs": [
+ {
+ "internalType": "contract OracleInterface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultCollateral",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultDebt",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_cv",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_spotPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_auctionStartingTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_collateralDecimals",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "price",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_dust",
+ "type": "uint256"
+ }
+ ],
+ "name": "setCollateralDust",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_deviation",
+ "type": "uint256"
+ }
+ ],
+ "name": "setOracleDeviation",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_shockValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "setSpotShock",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_timesToExpiry",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "setUpperBoundValues",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_underlying",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strike",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_timeToExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "updateUpperBoundValue",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "60806040526200001d600060086200010a60201b620011cc1760201c565b516002553480156200002e57600080fd5b50604051620049ec380380620049ec833981016040819052620000519162000389565b806000620000676001600160e01b036200020816565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038116620000e35760405162461bcd60e51b8152600401620000da906200048b565b60405180910390fd5b600780546001600160a01b0319166001600160a01b039290921691909117905550620004d3565b6200011462000376565b6200011e62000376565b601b8314156200015357604051806020016040528062000149866200020c60201b6200128c1760201c565b90529050620001ff565b601b831115620001c55760006200017a601b856200023860201b620012b51790919060201c565b90506040518060200160405280620001b9620001a884600a0a896200028260201b620012f71790919060201c565b6200020c60201b6200128c1760201c565b815250915050620001ff565b600083601b0390506040518060200160405280620001f9620001a884600a0a89620002cc60201b620013391790919060201c565b90529150505b90505b92915050565b3390565b6000600160ff1b8210620002345760405162461bcd60e51b8152600401620000da9062000408565b5090565b6000620001ff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200030c60201b60201c565b6000620001ff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200033b60201b60201c565b600082620002dd5750600062000202565b82820282848281620002eb57fe5b0414620001ff5760405162461bcd60e51b8152600401620000da906200044a565b60008184841115620003335760405162461bcd60e51b8152600401620000da9190620003b2565b505050900390565b600081836200035f5760405162461bcd60e51b8152600401620000da9190620003b2565b5060008385816200036c57fe5b0495945050505050565b6040518060200160405280600081525090565b6000602082840312156200039b578081fd5b81516001600160a01b0381168114620001ff578182fd5b6000602080835283518082850152825b81811015620003e057858101830151858201604001528201620003c2565b81811115620003f25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526028908201527f4d617267696e43616c63756c61746f723a20696e76616c6964206f7261636c65604082015267206164647265737360c01b606082015260800190565b61450980620004e36000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063c73547e31161007c578063c73547e3146102b8578063cd43fbfb146102cb578063dc1b3f00146102ec578063e592301a146102ff578063e842063114610307578063f2fde38b1461031a5761014d565b80638da5cb5b1461024d578063958c3234146102555780639a783d1114610268578063a101bca11461027b578063a6c569071461028e578063b29d5ee8146102b05761014d565b80636ccb9506116101155780636ccb9506146101e2578063715018a6146101f55780637ad7f800146101ff5780637dc0d1d0146102125780637f519b72146102275780638aab8fa51461023a5761014d565b8063053fe57c146101525780630b0509fb1461017c578063463459001461019c57806347840930146101af57806347d438a5146101c2575b600080fd5b61016561016036600461365b565b61032d565b604051610173929190614419565b60405180910390f35b61018f61018a366004613528565b610368565b6040516101739190614429565b61018f6101aa3660046132d3565b6103e3565b61018f6101bd36600461329b565b61040d565b6101d56101d03660046132d3565b610544565b604051610173919061386e565b61018f6101f036600461329b565b6105bc565b6101fd6105d7565b005b6101fd61020d366004613448565b610656565b61021a610757565b60405161017391906137f2565b6101fd61023536600461332e565b610766565b6101fd6102483660046133e5565b610a3d565b61021a610af6565b61018f610263366004613772565b610b05565b6101fd610276366004613614565b610b79565b61018f6102893660046133e5565b610c25565b6102a161029c36600461369e565b610c78565b604051610173939291906138b2565b61018f610f21565b6101fd6102c63660046136f0565b610f27565b6102de6102d936600461365b565b610f9c565b604051610173929190614432565b61018f6102fa3660046133e5565b6110b6565b61018f6110eb565b61018f6103153660046135b6565b6110f1565b6101fd61032836600461329b565b611116565b610335612f71565b61033d612f71565b610345612f84565b61034f8585611373565b905061035b85826116be565b92509250505b9250929050565b6000806103778b8b8b86611b73565b9050610381612f71565b61038c8960086111cc565b9050610396612f71565b6103a18960086111cc565b90506103ab612f71565b6103b68960086111cc565b90506103d16103c9858584868d8c611bac565b886000611d32565b9e9d5050505050505050505050505050565b6000806103f286868686611b73565b6000908152600660205260409020549150505b949350505050565b60006001600160a01b03821661043e5760405162461bcd60e51b8152600401610435906139d8565b60405180910390fd5b60008060008060008061045088611e05565b9550955095509550955095508142101561047c5760405162461bcd60e51b815260040161043590613a1f565b610484612f71565b6104918686858786612157565b905061049b612f71565b6104a782878a876121b8565b90506000886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e457600080fd5b505afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c91906137d1565b60ff1690506105338282600163ffffffff611d3216565b99505050505050505050505b919050565b6060600061055486868686611b73565b60008181526004602090815260409182902080548351818402810184019094528084529394509192908301828280156105ac57602002820191906000526020600020905b815481526020019060010190808311610598575b5050505050915050949350505050565b6001600160a01b031660009081526003602052604090205490565b6105df612344565b6000546001600160a01b0390811691161461060c5760405162461bcd60e51b815260040161043590613fc8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61065e612344565b6000546001600160a01b0390811691161461068b5760405162461bcd60e51b815260040161043590613fc8565b600081116106ab5760405162461bcd60e51b815260040161043590613dd4565b60006106b987878787611b73565b6000818152600560209081526040808320878452909152902054909150806106f35760405162461bcd60e51b8152600401610435906141a2565b6000828152600560209081526040808320878452909152908190208490555182907f39bab32d3b88604bdfbf6e8c3b1aaaf9bb6013da4fd5206dee9e3b00ee6f2cf99061074590879085908890614450565b60405180910390a25050505050505050565b6007546001600160a01b031681565b61076e612344565b6000546001600160a01b0390811691161461079b5760405162461bcd60e51b815260040161043590613fc8565b826107b85760405162461bcd60e51b815260040161043590613aba565b8281146107d75760405162461bcd60e51b815260040161043590613c25565b60006107e589898989611b73565b6000818152600460205260409020805491925090158061084057508054819061081590600163ffffffff6112b516565b8154811061081f57fe5b90600052602060002001548686600081811061083757fe5b90506020020135115b61085c5760405162461bcd60e51b8152600401610435906141ef565b60005b85811015610a30578561087982600163ffffffff61234816565b10156108d257868661089283600163ffffffff61234816565b81811061089b57fe5b905060200201358787838181106108ae57fe5b90506020020135106108d25760405162461bcd60e51b8152600401610435906140ab565b60008585838181106108e057fe5b90506020020135116109045760405162461bcd60e51b815260040161043590613a67565b84848281811061091057fe5b9050602002013560056000858152602001908152602001600020600089898581811061093857fe5b905060200201358152602001908152602001600020819055508187878381811061095e57fe5b83546001810185556000948552602094859020919094029290920135919092015550827fcaae9881bd3ac6f531c9e6021f1f873b93a83648e348624eef8f9ba9757fcb628888848181106109ae57fe5b905060200201356040516109c29190614429565b60405180910390a2827fcbb8d688de73727385afee9d53a2771ae5fe45293ff6de0ba46b201ab29df1158888848181106109f857fe5b90506020020135878785818110610a0b57fe5b90506020020135604051610a20929190614442565b60405180910390a260010161085f565b5050505050505050505050565b610a45612344565b6000546001600160a01b03908116911614610a725760405162461bcd60e51b815260040161043590613fc8565b60008111610a925760405162461bcd60e51b8152600401610435906142d6565b6000610aa086868686611b73565b600081815260066020526040908190208490555190915081907f78d22b4a9e4e0e1db30e7762696456ca380dc80efc59f416a299b97213b6d31690610ae6908590614429565b60405180910390a2505050505050565b6000546001600160a01b031690565b6000610b0f612f71565b610b1989856111cc565b9050610b23612f71565b610b2e8960086111cc565b9050610b38612f71565b610b438960086111cc565b9050610b4d612f71565b610b588960086111cc565b9050610b69848484848c8c8c61236d565b9c9b505050505050505050505050565b610b81612344565b6000546001600160a01b03908116911614610bae5760405162461bcd60e51b815260040161043590613fc8565b60008111610bce5760405162461bcd60e51b815260040161043590613b4f565b6001600160a01b03821660008181526003602052604090819020839055517f8ef429e6cec4339c5f0187fb930764fb967114bf09bc8bb06a552ba32923fd8690610c19908490614429565b60405180910390a25050565b60008086868686604051602001610c3f9493929190613806565b604051602081830303815290604052805190602001209050610c6d610c6482856124b5565b601b6000611d32565b979650505050505050565b600080600085600114610c9d5760405162461bcd60e51b8152600401610435906140f4565b610ca5612f84565b610caf8888611373565b9050806102200151610ccb575060009250829150819050610f17565b8060e001514210610cee5760405162461bcd60e51b815260040161043590613f33565b6007548151604051631b85462d60e01b815260009283926001600160a01b0390911691631b85462d91610d25918b90600401613849565b604080518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d74919061374f565b91509150878111610d975760405162461bcd60e51b81526004016104359061396c565b610d9f613020565b6040518060600160405280610dcd8d60600151600081518110610dbe57fe5b602002602001015160086111cc565b8152602001610de18660c0015160086111cc565b8152602001610df18560086111cc565b81525090506000610e15856000015186602001518760400151886101c00151611b73565b9050610e1f612f71565b610e468d60a00151600081518110610e3357fe5b60200260200101518761018001516111cc565b9050610e50612f71565b610e73838560000151866040015187602001518b60e001518c6101c00151611bac565b9050610e85818363ffffffff61262016565b15610ea1575060009850889750879650610f1795505050505050565b610ea9612f71565b610ec1856020015186604001518a6101c00151612628565b90506000610ee68487600001518489604001518b8e61018001518f6101c0015161236d565b6040998a01516001600160a01b031660009081526003602052999099205460019c50989a5097985050505050505050505b9450945094915050565b60015490565b610f2f612344565b6000546001600160a01b03908116911614610f5c5760405162461bcd60e51b815260040161043590613fc8565b60018190556040517fe44c6dd1fc3826ad24b81f17cf04849cedd368e002a52e89a845d14d3474e20a90610f91908390614429565b60405180910390a150565b600080610fa7612f84565b610fb18585611373565b9050610fbd85826126af565b806102200151158015610fd35750806102000151155b15611013576000816102400151610feb576000611005565b8560a00151600081518110610ffc57fe5b60200260200101515b935060019250610361915050565b61101b612f71565b611023612f71565b61102d87846116be565b91509150611039612f71565b611049838363ffffffff6127e616565b6040805160208101909152600254815290915060009061107090839063ffffffff61281816565b9050600085610200015161108957856101000151611090565b8561016001515b905060006110a584838563ffffffff611d3216565b9b929a509198505050505050505050565b6000806110c587878787611b73565b600090815260056020908152604080832086845290915290205491505095945050505050565b610e1081565b600061110c6111038787878787612157565b60086001611d32565b9695505050505050565b61111e612344565b6000546001600160a01b0390811691161461114b5760405162461bcd60e51b815260040161043590613fc8565b6001600160a01b0381166111715760405162461bcd60e51b815260040161043590613b09565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111d4612f71565b6111dc612f71565b601b8314156112025760405180602001604052806111f98661128c565b90529050611283565b601b83111561125457600061121e84601b63ffffffff6112b516565b9050604051806020016040528061124961124484600a0a896112f790919063ffffffff16565b61128c565b815250915050611283565b6040805160208101909152601b849003908061127d61124488600a86900a63ffffffff61133916565b90529150505b90505b92915050565b6000600160ff1b82106112b15760405162461bcd60e51b815260040161043590613bac565b5090565b600061128383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612820565b600061128383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061284c565b60008261134857506000611286565b8282028284828161135557fe5b04146112835760405162461bcd60e51b815260040161043590613f87565b61137b612f84565b611383612f84565b50604080516102608101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082018190526102408201529084015161142890612883565b1515610200820152835161143b90612883565b1515610220820152604084015161145190612883565b15156102408201526101a081018390526102008101511561153f576000846020015160008151811061147f57fe5b6020026020010151905061149281611e05565b15156101e08801526101408701526101208601526001600160a01b03908116608086015290811660608501521660a083018190526040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153491906137d1565b60ff16610160830152505b8061022001511561161a576000846000015160008151811061155d57fe5b6020026020010151905061157081611e05565b15156101c088015260e087015260c08601526001600160a01b039081166020808701919091529181168552919091166040808501829052805163313ce56760e01b81529051919263313ce56792600480840193829003018186803b1580156115d757600080fd5b505afa1580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f91906137d1565b60ff16610100830152505b8061024001511561128357836040015160008151811061163657fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561167657600080fd5b505afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906137d1565b60ff166101808201529392505050565b6116c6612f71565b6116ce612f71565b6116d6612f71565b8361022001516116f55760408051602081019091526002548152611709565b6117098560600151600081518110610dbe57fe5b9050611713612f71565b8461020001516117325760408051602081019091526002548152611746565b6117468660800151600081518110610dbe57fe5b9050611750612f71565b85610240015161176f5760408051602081019091526002548152611783565b6117838760a00151600081518110610e3357fe5b905061178d612f71565b8661022001516117ac57604080516020810190915260025481526117bb565b6117bb8760c0015160086111cc565b90506117c5613052565b6040518060a001604052808961022001516117e45789606001516117e7565b89515b6001600160a01b03168152602001896102200151611809578960a0015161180f565b89604001515b6001600160a01b03168152602001896102200151611831578960800151611837565b89602001515b6001600160a01b0316815260200189610220015161185a57896101400151611860565b8960e001515b815260200189610220015161187a57896101e00151611881565b896101c001515b151581525090508060600151421015611aae57876101a0015160011415611a07576118aa612f71565b6040808a01516001600160a01b03166000908152600360205220546101808a01516118d591906111cc565b604080516020810190915260025481529091506118f990859063ffffffff6128c116565b1561192a5761190e848263ffffffff6128c116565b61192a5760405162461bcd60e51b815260040161043590613d51565b611932612f71565b6007548a516040516341976e0960e01b81526119bc926001600160a01b0316916341976e099161196591906004016137f2565b60206040518083038186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b59190613708565b60086111cc565b905060006119dd8b600001518c602001518d604001518e6101c00151611b73565b9050856119f6828a858989606001518a60800151611bac565b995099505050505050505050610361565b611a0f612f71565b886102000151611a2e5760408051602081019091526002548152611a3e565b611a3e89610120015160086111cc565b9050816080015115611a8457611a52612f71565b611a5e878786856128c8565b905084611a748285604001518660200151612915565b9850985050505050505050610361565b611a8c612f71565b611a9887878685612a70565b905084611a748285600001518660200151612915565b611ab6612f71565b886102200151611ad55760408051602081019091526002548152611af6565b611af689600001518a602001518b60e001518c60c001518660800151612157565b9050611b00612f71565b896102000151611b1f5760408051602081019091526002548152611b42565b611b428a606001518b608001518c61014001518d61012001518760800151612157565b9050611b4c612f71565b611b5888888585612b01565b9050856119f6828660400151876020015188606001516121b8565b600084848484604051602001611b8c9493929190613806565b604051602081830303815290604052805190602001209050949350505050565b611bb4612f71565b611bbc612f71565b611bc688856124b5565b9050611bd0612f71565b50604080516020808201835260008b8152600690915291909120548152611bf5612f71565b611bfd612f71565b611c05612f71565b8615611c9757611c2489611c1f868d63ffffffff612b2c16565b612b73565b9250611c5e611c49611c3c868d63ffffffff612b2c16565b8b9063ffffffff6127e616565b60408051602081019091526002548152612b91565b9150611c908b611c8484611c78898863ffffffff612b2c16565b9063ffffffff612ba816565b9063ffffffff612b2c16565b9050611d23565b611c9f612f71565b611cb66b033b2e3c9fd0803ce8000000601b6111cc565b9050611cdc81611c1f8d611cd08e8a63ffffffff612b2c16565b9063ffffffff612bd116565b9350611d05611c49611cf88d611cd08e8a63ffffffff612b2c16565b839063ffffffff6127e616565b9250611d1f8c611c8485611c788a8963ffffffff612b2c16565b9150505b9b9a5050505050505050505050565b600080601b841415611d50578451611d4990612c07565b9050611dfb565b601b841115611d89576000601b85039050611d8181600a0a611d758860000151612c07565b9063ffffffff61133916565b915050611dfb565b601b849003600084611dc6576000611db783600a0a611dab8a60000151612c07565b9063ffffffff612c2316565b90508015611dc457600191505b505b611df681611dea84600a0a611dde8b60000151612c07565b9063ffffffff6112f716565b9063ffffffff61234816565b925050505b90505b9392505050565b6000806000806000806000879050806001600160a01b031663af0968fc6040518163ffffffff1660e01b815260040160c06040518083038186803b158015611e4c57600080fd5b505afa925050508015611e7c575060408051601f3d908101601f19168201909252611e79918101906134b5565b60015b61213857806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb957600080fd5b505afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906132b7565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2a57600080fd5b505afa158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6291906132b7565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9b57600080fd5b505afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd391906132b7565b836001600160a01b031663c52987cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561200c57600080fd5b505afa158015612020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120449190613708565b846001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561207d57600080fd5b505afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190613708565b856001600160a01b031663f3c274a66040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ee57600080fd5b505afa158015612102573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612126919061363f565b9650965096509650965096505061214e565b949b5092995090975095509350915061214e9050565b91939550919395565b61215f612f71565b612167612f71565b6121728460086111cc565b905061217c612f71565b612188600160006111cc565b9050612192612f71565b61219e828a8a8a6121b8565b90506121ab838287612628565b9998505050505050505050565b6121c0612f71565b826001600160a01b0316846001600160a01b031614156121e1575083610405565b6007546040516301957f8160e01b815260009182916001600160a01b03909116906301957f81906122189089908890600401613830565b604080518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613720565b6007546040516301957f8160e01b815292945090925060009182916001600160a01b0316906301957f81906122a2908a908a90600401613830565b604080518083038186803b1580156122b957600080fd5b505afa1580156122cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f19190613720565b915091508280156122ff5750805b61231b5760405162461bcd60e51b815260040161043590613e83565b6121ab6123298360086111cc565b611cd06123378760086111cc565b8c9063ffffffff612b2c16565b3390565b6000828201838110156112835760405162461bcd60e51b815260040161043590613bee565b6000612377612f71565b61237f612f71565b61238f8a8a63ffffffff612bd116565b905060006123a3428863ffffffff6112b516565b9050610e1081106123b6578192506124a3565b6123be612f71565b6123c6612f71565b6123d3600154601b6111cc565b90508615612405576123fe611c496123f1838d63ffffffff612b2c16565b8d9063ffffffff6127e616565b915061242f565b61242c8a611cd0611c4961241f858463ffffffff612b2c16565b8f9063ffffffff6127e616565b91505b50612438612f71565b6124438360126111cc565b905061244d612f71565b61245a610e1060126111cc565b905061248461247782611cd085611c848a8963ffffffff6127e616565b849063ffffffff612ba816565b9550612496868663ffffffff6128c116565b1561249f578495505b5050505b611d238387600163ffffffff611d3216565b6124bd612f71565b60008381526004602090815260409182902080548351818402810184019094528084526060939283018282801561251357602002820191906000526020600020905b8154815260200190600101908083116124ff575b5050505050905080516000141561253c5760405162461bcd60e51b81526004016104359061391d565b600061254e844263ffffffff6112b516565b90508082612567600185516112b590919063ffffffff16565b8151811061257157fe5b602002602001015110156125975760405162461bcd60e51b8152600401610435906143c6565b60005b82518160ff1610156126175781838260ff16815181106125b657fe5b60200260200101511061260f57600086815260056020526040812084516126059290869060ff86169081106125e757fe5b6020026020010151815260200190815260200160002054601b6111cc565b9350505050611286565b60010161259a565b50505092915050565b519051131590565b612630612f71565b811561267657612646848463ffffffff6128c116565b61265f576040805160208101909152600254815261266f565b61266f848463ffffffff6127e616565b9050611dfe565b612686838563ffffffff6128c116565b61269f5760408051602081019091526002548152611dfb565b611dfb838563ffffffff6127e616565b815151600110156126d25760405162461bcd60e51b81526004016104359061423d565b600182602001515111156126f85760405162461bcd60e51b815260040161043590613c6b565b6001826040015151111561271e5760405162461bcd60e51b815260040161043590614145565b606082015151825151146127445760405162461bcd60e51b815260040161043590613d00565b8160800151518260200151511461276d5760405162461bcd60e51b815260040161043590614320565b8160a0015151826040015151146127965760405162461bcd60e51b815260040161043590614370565b6127a08282612c65565b6127bc5760405162461bcd60e51b815260040161043590613ed6565b6127c68282612d9f565b6127e25760405162461bcd60e51b815260040161043590614044565b5050565b6127ee612f71565b604080516020810190915282518451829161280f919063ffffffff612e3f16565b90529392505050565b519051121590565b600081848411156128445760405162461bcd60e51b815260040161043591906138ca565b505050900390565b6000818361286d5760405162461bcd60e51b815260040161043591906138ca565b50600083858161287957fe5b0495945050505050565b6000808251118015611286575060006001600160a01b0316826000815181106128a857fe5b60200260200101516001600160a01b0316141592915050565b5190511390565b6128d0612f71565b61290c611c496128f06128e38888612b73565b859063ffffffff612b2c16565b612900888763ffffffff612b2c16565b9063ffffffff6127e616565b95945050505050565b61291d612f71565b816001600160a01b0316836001600160a01b0316141561293e575082611dfe565b6007546040516341976e0960e01b81526000916001600160a01b0316906341976e099061296f9087906004016137f2565b60206040518083038186803b15801561298757600080fd5b505afa15801561299b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bf9190613708565b6007546040516341976e0960e01b81529192506000916001600160a01b03909116906341976e09906129f59087906004016137f2565b60206040518083038186803b158015612a0d57600080fd5b505afa158015612a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a459190613708565b905061110c612a558260086111cc565b611cd0612a638560086111cc565b899063ffffffff612b2c16565b612a78612f71565b60408051602081019091526002548152612a9990839063ffffffff612e8516565b15612ab857612ab1611c49868663ffffffff6127e616565b9050610405565b612ac0612f71565b612ad883611cd088611c84838963ffffffff6127e616565b9050612ae2612f71565b612af5611c49888863ffffffff6127e616565b9050610c6d8282612b91565b612b09612f71565b61290c612b1c838663ffffffff612b2c16565b612900858863ffffffff612b2c16565b612b34612f71565b60408051602081019091528251845182916b033b2e3c9fd0803ce800000091612b629163ffffffff612e8c16565b81612b6957fe5b0590529392505050565b612b7b612f71565b8151835112612b8a5781611283565b5090919050565b612b99612f71565b8151835113612b8a5781611283565b612bb0612f71565b604080516020810190915282518451829161280f919063ffffffff612ef716565b612bd9612f71565b604080516020810190915282518451829190612b62906b033b2e3c9fd0803ce800000063ffffffff612e8c16565b600080821215612c1c5781600003905061053f565b508061053f565b600061128383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612f3d565b6000816101a0015160011415612c985781610200015115612c985760405162461bcd60e51b815260040161043590613e26565b8161020001511580612cad5750816102200151155b15612cba57506001611286565b82518051600090612cc757fe5b60200260200101516001600160a01b03168360200151600081518110612ce957fe5b60200260200101516001600160a01b031614158015612d21575081600001516001600160a01b031682606001516001600160a01b0316145b8015612d46575081602001516001600160a01b031682608001516001600160a01b0316145b8015612d6b575081604001516001600160a01b03168260a001516001600160a01b0316145b8015612d7f57508160e00151826101400151145b80156112835750816101c001511515826101e00151151514905092915050565b610240810151600090600190612db6579050611286565b82610220015115612df9578360400151600081518110612dd257fe5b60200260200101516001600160a01b031683604001516001600160a01b0316149050611283565b82610200015115611283578360400151600081518110612e1557fe5b60200260200101516001600160a01b03168360a001516001600160a01b0316149050905092915050565b6000818303818312801590612e545750838113155b80612e695750600083128015612e6957508381135b6112835760405162461bcd60e51b815260040161043590614292565b5190511490565b600082612e9b57506000611286565b82600019148015612eaf5750600160ff1b82145b15612ecc5760405162461bcd60e51b815260040161043590613ffd565b82820282848281612ed957fe5b05146112835760405162461bcd60e51b815260040161043590613ffd565b6000828201818312801590612f0c5750838112155b80612f215750600083128015612f2157508381125b6112835760405162461bcd60e51b815260040161043590613cbf565b60008183612f5e5760405162461bcd60e51b815260040161043591906138ca565b50828481612f6857fe5b06949350505050565b6040518060200160405280600081525090565b6040805161026081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101829052610220810182905261024081019190915290565b6040518060600160405280613033612f71565b8152602001613040612f71565b815260200161304d612f71565b905290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b600082601f830112613090578081fd5b81356130a361309e8261448d565b614466565b8181529150602080830190848101818402860182018710156130c457600080fd5b60005b848110156130ec5781356130da816144ad565b845292820192908201906001016130c7565b505050505092915050565b60008083601f840112613108578081fd5b50813567ffffffffffffffff81111561311f578182fd5b602083019150836020808302850101111561036157600080fd5b600082601f830112613149578081fd5b813561315761309e8261448d565b81815291506020808301908481018184028601820187101561317857600080fd5b60005b848110156130ec5781358452928201929082019060010161317b565b600060c082840312156131a8578081fd5b6131b260c0614466565b9050813567ffffffffffffffff808211156131cc57600080fd5b6131d885838601613080565b835260208401359150808211156131ee57600080fd5b6131fa85838601613080565b6020840152604084013591508082111561321357600080fd5b61321f85838601613080565b6040840152606084013591508082111561323857600080fd5b61324485838601613139565b6060840152608084013591508082111561325d57600080fd5b61326985838601613139565b608084015260a084013591508082111561328257600080fd5b5061328f84828501613139565b60a08301525092915050565b6000602082840312156132ac578081fd5b8135611283816144ad565b6000602082840312156132c8578081fd5b8151611283816144ad565b600080600080608085870312156132e8578283fd5b84356132f3816144ad565b93506020850135613303816144ad565b92506040850135613313816144ad565b91506060850135613323816144c5565b939692955090935050565b60008060008060008060008060c0898b031215613349578384fd5b8835613354816144ad565b97506020890135613364816144ad565b96506040890135613374816144ad565b95506060890135613384816144c5565b9450608089013567ffffffffffffffff808211156133a0578586fd5b6133ac8c838d016130f7565b909650945060a08b01359150808211156133c4578384fd5b506133d18b828c016130f7565b999c989b5096995094979396929594505050565b600080600080600060a086880312156133fc578081fd5b8535613407816144ad565b94506020860135613417816144ad565b93506040860135613427816144ad565b92506060860135613437816144c5565b949793965091946080013592915050565b60008060008060008060c08789031215613460578182fd5b863561346b816144ad565b9550602087013561347b816144ad565b9450604087013561348b816144ad565b9350606087013561349b816144c5565b9598949750929560808101359460a0909101359350915050565b60008060008060008060c087890312156134cd578182fd5b86516134d8816144ad565b60208801519096506134e9816144ad565b60408801519095506134fa816144ad565b80945050606087015192506080870151915060a087015161351a816144c5565b809150509295509295509295565b60008060008060008060008060006101208a8c031215613546578283fd5b8935613551816144ad565b985060208a0135613561816144ad565b975060408a0135613571816144ad565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a01356135a5816144c5565b809150509295985092959850929598565b600080600080600060a086880312156135cd578283fd5b85356135d8816144ad565b945060208601356135e8816144ad565b935060408601359250606086013591506080860135613606816144c5565b809150509295509295909350565b60008060408385031215613626578182fd5b8235613631816144ad565b946020939093013593505050565b600060208284031215613650578081fd5b8151611283816144c5565b6000806040838503121561366d578182fd5b823567ffffffffffffffff811115613683578283fd5b61368f85828601613197565b95602094909401359450505050565b600080600080608085870312156136b3578182fd5b843567ffffffffffffffff8111156136c9578283fd5b6136d587828801613197565b97602087013597506040870135966060013595509350505050565b600060208284031215613701578081fd5b5035919050565b600060208284031215613719578081fd5b5051919050565b60008060408385031215613732578182fd5b825191506020830151613744816144c5565b809150509250929050565b60008060408385031215613761578182fd5b505080516020909101519092909150565b600080600080600080600060e0888a03121561378c578081fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c08801356137c1816144c5565b8091505092959891949750929550565b6000602082840312156137e2578081fd5b815160ff81168114611283578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152901515606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825269ffffffffffffffffffff16602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156138a65783518352928401929184019160010161388a565b50909695505050505050565b92151583526020830191909152604082015260600190565b6000602080835283518082850152825b818110156138f6578581018301518582016040015282016138da565b818111156139075783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602f908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e60408201526e6f206578706972792076616c75657360881b606082015260800190565b60208082526046908201527f4d617267696e43616c63756c61746f723a2061756374696f6e2074696d65737460408201527f616d702073686f756c6420626520706f7374207661756c74206c61746573742060608201526575706461746560d01b608082015260a00190565b60208082526027908201527f4d617267696e43616c63756c61746f723a20496e76616c696420746f6b656e206040820152666164647265737360c81b606082015260800190565b60208082526028908201527f4d617267696e43616c63756c61746f723a204f746f6b656e206e6f74206578706040820152671a5c9959081e595d60c21b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a206e6f2065787069727920757070656040820152721c88189bdd5b99081d985b1d5948199bdd5b99606a1b606082015260800190565b6020808252602f908201527f4d617267696e43616c63756c61746f723a20696e76616c69642074696d65732060408201526e746f2065787069727920617272617960881b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a206475737420616d6f756e7420736860408201527f6f756c642062652067726561746572207468616e207a65726f00000000000000606082015260800190565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f4d617267696e43616c63756c61746f723a20696e76616c69642076616c75657360408201526520617272617960d01b606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e79206c6f6e67206040820152731bdd1bdad95b9cc81a5b881d1a19481d985d5b1d60621b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a2053686f727420617373657420616e6040820152700c840c2dadeeadce840dad2e6dac2e8c6d607b1b606082015260800190565b6020808252605b908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742073686f756c64206861766520636f6c6c61746572616c20616d6f7560608201527f6e742067726561746572207468616e206475737420616d6f756e740000000000608082015260a00190565b60208082526032908201527f4d617267696e43616c63756c61746f723a20696e76616c6964206f7074696f6e60408201527120757070657220626f756e642076616c756560701b606082015260800190565b6020808252603c908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742063616e6e6f742068617665206c6f6e67206f746f6b656e00000000606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726963652061742065787069726040820152721e481b9bdd08199a5b985b1a5e9959081e595d606a1b606082015260800190565b6020808252603b908201527f4d617267696e43616c63756c61746f723a206c6f6e67206173736574206e6f7460408201527f206d617267696e61626c6520666f722073686f72742061737365740000000000606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a2063616e206e6f74206c697175696460408201527330ba329032bc3834b932b2103837b9b4ba34b7b760611b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526041908201527f4d617267696e43616c63756c61746f723a20636f6c6c61746572616c2061737360408201527f6574206e6f74206d617267696e61626c6520666f722073686f727420617373656060820152601d60fa1b608082015260a00190565b60208082526029908201527f4d617267696e43616c63756c61746f723a2074696d652073686f756c642062656040820152681034b71037b93232b960b91b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a20696e76616c6964207661756c74206040820152707479706520746f206c697175696461746560781b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e7920636f6c6c6160408201527f746572616c2061737365747320696e20746865207661756c7400000000000000606082015260800190565b6020808252602d908201527f4d617267696e43616c63756c61746f723a20757070657220626f756e6420766160408201526c1b1d59481b9bdd08199bdd5b99609a1b606082015260800190565b6020808252602e908201527f4d617267696e43616c63756c61746f723a20657870697279206172726179206960408201526d39903737ba1034b71037b93232b960911b606082015260800190565b60208082526035908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e792073686f7274604082015274081bdd1bdad95b9cc81a5b881d1a19481d985d5b1d605a1b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252602a908201527f4d617267696e43616c63756c61746f723a20696e76616c69642073706f742073604082015269686f636b2076616c756560b01b606082015260800190565b60208082526030908201527f4d617267696e43616c63756c61746f723a204c6f6e6720617373657420616e6460408201526f040c2dadeeadce840dad2e6dac2e8c6d60831b606082015260800190565b60208082526036908201527f4d617267696e43616c63756c61746f723a20436f6c6c61746572616c206173736040820152750cae840c2dcc840c2dadeeadce840dad2e6dac2e8c6d60531b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e6040820152726f20757070657220626f756e642076616c756560681b606082015260800190565b9151825251602082015260400190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561448557600080fd5b604052919050565b600067ffffffffffffffff8211156144a3578081fd5b5060209081020190565b6001600160a01b03811681146144c257600080fd5b50565b80151581146144c257600080fdfea2646970667358221220c70ea1831b6f51b2b4c7f97dce8cd8d531cf97e725b7eab345585506696467c164736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x1D PUSH1 0x0 PUSH1 0x8 PUSH3 0x10A PUSH1 0x20 SHL PUSH3 0x11CC OR PUSH1 0x20 SHR JUMP JUMPDEST MLOAD PUSH1 0x2 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x49EC CODESIZE SUB DUP1 PUSH3 0x49EC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x51 SWAP2 PUSH3 0x389 JUMP JUMPDEST DUP1 PUSH1 0x0 PUSH3 0x67 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x208 AND JUMP JUMPDEST PUSH1 0x0 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 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xDA SWAP1 PUSH3 0x48B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x7 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 PUSH3 0x4D3 JUMP JUMPDEST PUSH3 0x114 PUSH3 0x376 JUMP JUMPDEST PUSH3 0x11E PUSH3 0x376 JUMP JUMPDEST PUSH1 0x1B DUP4 EQ ISZERO PUSH3 0x153 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x149 DUP7 PUSH3 0x20C PUSH1 0x20 SHL PUSH3 0x128C OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH3 0x1FF JUMP JUMPDEST PUSH1 0x1B DUP4 GT ISZERO PUSH3 0x1C5 JUMPI PUSH1 0x0 PUSH3 0x17A PUSH1 0x1B DUP6 PUSH3 0x238 PUSH1 0x20 SHL PUSH3 0x12B5 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x1B9 PUSH3 0x1A8 DUP5 PUSH1 0xA EXP DUP10 PUSH3 0x282 PUSH1 0x20 SHL PUSH3 0x12F7 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x20C PUSH1 0x20 SHL PUSH3 0x128C OR PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE POP SWAP2 POP POP PUSH3 0x1FF JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1B SUB SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x1F9 PUSH3 0x1A8 DUP5 PUSH1 0xA EXP DUP10 PUSH3 0x2CC PUSH1 0x20 SHL PUSH3 0x1339 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 MSTORE SWAP2 POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH3 0x234 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xDA SWAP1 PUSH3 0x408 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1FF DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH3 0x30C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1FF DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH3 0x33B PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0x2DD JUMPI POP PUSH1 0x0 PUSH3 0x202 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH3 0x2EB JUMPI INVALID JUMPDEST DIV EQ PUSH3 0x1FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xDA SWAP1 PUSH3 0x44A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH3 0x333 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xDA SWAP2 SWAP1 PUSH3 0x3B2 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH3 0x35F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xDA SWAP2 SWAP1 PUSH3 0x3B2 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH3 0x36C JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x39B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x3E0 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x3C2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x3F2 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964206F7261636C65 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH2 0x4509 DUP1 PUSH3 0x4E3 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 0x14D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xC73547E3 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xC73547E3 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xCD43FBFB EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0xDC1B3F00 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0xE592301A EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0xE8420631 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x31A JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x958C3234 EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0x9A783D11 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xA101BCA1 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0xA6C56907 EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0xB29D5EE8 EQ PUSH2 0x2B0 JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x6CCB9506 GT PUSH2 0x115 JUMPI DUP1 PUSH4 0x6CCB9506 EQ PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x7AD7F800 EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x7F519B72 EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x8AAB8FA5 EQ PUSH2 0x23A JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x53FE57C EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0xB0509FB EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x46345900 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x47840930 EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x47D438A5 EQ PUSH2 0x1C2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x165 PUSH2 0x160 CALLDATASIZE PUSH1 0x4 PUSH2 0x365B JUMP JUMPDEST PUSH2 0x32D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP3 SWAP2 SWAP1 PUSH2 0x4419 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18F PUSH2 0x18A CALLDATASIZE PUSH1 0x4 PUSH2 0x3528 JUMP JUMPDEST PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP2 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1AA CALLDATASIZE PUSH1 0x4 PUSH2 0x32D3 JUMP JUMPDEST PUSH2 0x3E3 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1BD CALLDATASIZE PUSH1 0x4 PUSH2 0x329B JUMP JUMPDEST PUSH2 0x40D JUMP JUMPDEST PUSH2 0x1D5 PUSH2 0x1D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x32D3 JUMP JUMPDEST PUSH2 0x544 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP2 SWAP1 PUSH2 0x386E JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x329B JUMP JUMPDEST PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x5D7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1FD PUSH2 0x20D CALLDATASIZE PUSH1 0x4 PUSH2 0x3448 JUMP JUMPDEST PUSH2 0x656 JUMP JUMPDEST PUSH2 0x21A PUSH2 0x757 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP2 SWAP1 PUSH2 0x37F2 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0x332E JUMP JUMPDEST PUSH2 0x766 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0x33E5 JUMP JUMPDEST PUSH2 0xA3D JUMP JUMPDEST PUSH2 0x21A PUSH2 0xAF6 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x263 CALLDATASIZE PUSH1 0x4 PUSH2 0x3772 JUMP JUMPDEST PUSH2 0xB05 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x276 CALLDATASIZE PUSH1 0x4 PUSH2 0x3614 JUMP JUMPDEST PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x33E5 JUMP JUMPDEST PUSH2 0xC25 JUMP JUMPDEST PUSH2 0x2A1 PUSH2 0x29C CALLDATASIZE PUSH1 0x4 PUSH2 0x369E JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x38B2 JUMP JUMPDEST PUSH2 0x18F PUSH2 0xF21 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x36F0 JUMP JUMPDEST PUSH2 0xF27 JUMP JUMPDEST PUSH2 0x2DE PUSH2 0x2D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x365B JUMP JUMPDEST PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP3 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x33E5 JUMP JUMPDEST PUSH2 0x10B6 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x10EB JUMP JUMPDEST PUSH2 0x18F PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x35B6 JUMP JUMPDEST PUSH2 0x10F1 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x328 CALLDATASIZE PUSH1 0x4 PUSH2 0x329B JUMP JUMPDEST PUSH2 0x1116 JUMP JUMPDEST PUSH2 0x335 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x33D PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x345 PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0x34F DUP6 DUP6 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH2 0x35B DUP6 DUP3 PUSH2 0x16BE JUMP JUMPDEST SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x377 DUP12 DUP12 DUP12 DUP7 PUSH2 0x1B73 JUMP JUMPDEST SWAP1 POP PUSH2 0x381 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x38C DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x396 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x3A1 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x3AB PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x3B6 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x3D1 PUSH2 0x3C9 DUP6 DUP6 DUP5 DUP7 DUP14 DUP13 PUSH2 0x1BAC JUMP JUMPDEST DUP9 PUSH1 0x0 PUSH2 0x1D32 JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3F2 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x43E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x450 DUP9 PUSH2 0x1E05 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP DUP2 TIMESTAMP LT ISZERO PUSH2 0x47C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3A1F JUMP JUMPDEST PUSH2 0x484 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x491 DUP7 DUP7 DUP6 DUP8 DUP7 PUSH2 0x2157 JUMP JUMPDEST SWAP1 POP PUSH2 0x49B PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x4A7 DUP3 DUP8 DUP11 DUP8 PUSH2 0x21B8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x51C SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH2 0x533 DUP3 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1D32 AND JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x554 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5AC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x598 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP 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 SWAP1 JUMP JUMPDEST PUSH2 0x5DF PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x60C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x65E PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x6AB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B9 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x41A2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x39BAB32D3B88604BDFBF6E8C3B1AAAF9BB6013DA4FD5206DEE9E3B00EE6F2CF9 SWAP1 PUSH2 0x745 SWAP1 DUP8 SWAP1 DUP6 SWAP1 DUP9 SWAP1 PUSH2 0x4450 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x76E PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x79B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST DUP3 PUSH2 0x7B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3ABA JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x7D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E5 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP SWAP1 ISZERO DUP1 PUSH2 0x840 JUMPI POP DUP1 SLOAD DUP2 SWAP1 PUSH2 0x815 SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x81F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x837 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT JUMPDEST PUSH2 0x85C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x41EF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0xA30 JUMPI DUP6 PUSH2 0x879 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2348 AND JUMP JUMPDEST LT ISZERO PUSH2 0x8D2 JUMPI DUP7 DUP7 PUSH2 0x892 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2348 AND JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x89B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x8AE JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD LT PUSH2 0x8D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x40AB JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x8E0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT PUSH2 0x904 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x910 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x5 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 DUP10 DUP6 DUP2 DUP2 LT PUSH2 0x938 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x95E JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP5 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 SWAP3 ADD SSTORE POP DUP3 PUSH32 0xCAAE9881BD3AC6F531C9E6021F1F873B93A83648E348624EEF8F9BA9757FCB62 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x9AE JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x9C2 SWAP2 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 PUSH32 0xCBB8D688DE73727385AFEE9D53A2771AE5FE45293FF6DE0BA46B201AB29DF115 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x9F8 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0xA0B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0xA20 SWAP3 SWAP2 SWAP1 PUSH2 0x4442 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x85F JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xA45 PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA72 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xA92 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x42D6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAA0 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0x78D22B4A9E4E0E1DB30E7762696456CA380DC80EFC59F416A299B97213B6D316 SWAP1 PUSH2 0xAE6 SWAP1 DUP6 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB19 DUP10 DUP6 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB23 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB2E DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB38 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB43 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB4D PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB58 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB69 DUP5 DUP5 DUP5 DUP5 DUP13 DUP13 DUP13 PUSH2 0x236D JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB81 PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xBAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xBCE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3B4F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x8EF429E6CEC4339C5F0187FB930764FB967114BF09BC8BB06A552BA32923FD86 SWAP1 PUSH2 0xC19 SWAP1 DUP5 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xC3F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0xC6D PUSH2 0xC64 DUP3 DUP6 PUSH2 0x24B5 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x0 PUSH2 0x1D32 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 PUSH1 0x1 EQ PUSH2 0xC9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x40F4 JUMP JUMPDEST PUSH2 0xCA5 PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0xCAF DUP9 DUP9 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x220 ADD MLOAD PUSH2 0xCCB JUMPI POP PUSH1 0x0 SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP PUSH2 0xF17 JUMP JUMPDEST DUP1 PUSH1 0xE0 ADD MLOAD TIMESTAMP LT PUSH2 0xCEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3F33 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1B85462D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x1B85462D SWAP2 PUSH2 0xD25 SWAP2 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x3849 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD74 SWAP2 SWAP1 PUSH2 0x374F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP8 DUP2 GT PUSH2 0xD97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x396C JUMP JUMPDEST PUSH2 0xD9F PUSH2 0x3020 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0xDCD DUP14 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDBE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDE1 DUP7 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF1 DUP6 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0xE15 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1B73 JUMP JUMPDEST SWAP1 POP PUSH2 0xE1F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xE46 DUP14 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE33 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH2 0x180 ADD MLOAD PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xE50 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xE73 DUP4 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1BAC JUMP JUMPDEST SWAP1 POP PUSH2 0xE85 DUP2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2620 AND JUMP JUMPDEST ISZERO PUSH2 0xEA1 JUMPI POP PUSH1 0x0 SWAP9 POP DUP9 SWAP8 POP DUP8 SWAP7 POP PUSH2 0xF17 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEA9 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xEC1 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP11 PUSH2 0x1C0 ADD MLOAD PUSH2 0x2628 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEE6 DUP5 DUP8 PUSH1 0x0 ADD MLOAD DUP5 DUP10 PUSH1 0x40 ADD MLOAD DUP12 DUP15 PUSH2 0x180 ADD MLOAD DUP16 PUSH2 0x1C0 ADD MLOAD PUSH2 0x236D JUMP JUMPDEST PUSH1 0x40 SWAP10 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE SWAP10 SWAP1 SWAP10 KECCAK256 SLOAD PUSH1 0x1 SWAP13 POP SWAP9 SWAP11 POP SWAP8 SWAP9 POP POP POP POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xF2F PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xF5C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE44C6DD1FC3826AD24B81F17CF04849CEDD368E002A52E89A845D14D3474E20A SWAP1 PUSH2 0xF91 SWAP1 DUP4 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFA7 PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0xFB1 DUP6 DUP6 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH2 0xFBD DUP6 DUP3 PUSH2 0x26AF JUMP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0xFD3 JUMPI POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x1013 JUMPI PUSH1 0x0 DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xFEB JUMPI PUSH1 0x0 PUSH2 0x1005 JUMP JUMPDEST DUP6 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xFFC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH2 0x361 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x101B PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1023 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x102D DUP8 DUP5 PUSH2 0x16BE JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1039 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1049 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1070 SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2818 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH2 0x200 ADD MLOAD PUSH2 0x1089 JUMPI DUP6 PUSH2 0x100 ADD MLOAD PUSH2 0x1090 JUMP JUMPDEST DUP6 PUSH2 0x160 ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x10A5 DUP5 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1D32 AND JUMP JUMPDEST SWAP12 SWAP3 SWAP11 POP SWAP2 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10C5 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE10 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x110C PUSH2 0x1103 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x2157 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x1 PUSH2 0x1D32 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x111E PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x114B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3B09 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 PUSH2 0x11D4 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x11DC PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x1B DUP4 EQ ISZERO PUSH2 0x1202 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x11F9 DUP7 PUSH2 0x128C JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x1B DUP4 GT ISZERO PUSH2 0x1254 JUMPI PUSH1 0x0 PUSH2 0x121E DUP5 PUSH1 0x1B PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1249 PUSH2 0x1244 DUP5 PUSH1 0xA EXP DUP10 PUSH2 0x12F7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x128C JUMP JUMPDEST DUP2 MSTORE POP SWAP2 POP POP PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1B DUP5 SWAP1 SUB SWAP1 DUP1 PUSH2 0x127D PUSH2 0x1244 DUP9 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x1339 AND JUMP JUMPDEST SWAP1 MSTORE SWAP2 POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH2 0x12B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3BAC JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1283 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x2820 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1283 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x284C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1348 JUMPI POP PUSH1 0x0 PUSH2 0x1286 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1355 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3F87 JUMP JUMPDEST PUSH2 0x137B PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0x1383 PUSH2 0x2F84 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1C0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1E0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x220 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x240 DUP3 ADD MSTORE SWAP1 DUP5 ADD MLOAD PUSH2 0x1428 SWAP1 PUSH2 0x2883 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x200 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x143B SWAP1 PUSH2 0x2883 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1451 SWAP1 PUSH2 0x2883 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP4 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO PUSH2 0x153F JUMPI PUSH1 0x0 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x147F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x1492 DUP2 PUSH2 0x1E05 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1E0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD MSTORE PUSH2 0x120 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP7 ADD MSTORE SWAP1 DUP2 AND PUSH1 0x60 DUP6 ADD MSTORE AND PUSH1 0xA0 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1510 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1534 SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x160 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x161A JUMPI PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x155D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x1570 DUP2 PUSH2 0x1E05 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP2 AND DUP6 MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x40 DUP1 DUP6 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x160F SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x100 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x240 ADD MLOAD ISZERO PUSH2 0x1283 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1636 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x168A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16AE SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x180 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x16C6 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x16CE PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x16D6 PUSH2 0x2F71 JUMP JUMPDEST DUP4 PUSH2 0x220 ADD MLOAD PUSH2 0x16F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1709 JUMP JUMPDEST PUSH2 0x1709 DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDBE JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1713 PUSH2 0x2F71 JUMP JUMPDEST DUP5 PUSH2 0x200 ADD MLOAD PUSH2 0x1732 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1746 JUMP JUMPDEST PUSH2 0x1746 DUP7 PUSH1 0x80 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDBE JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1750 PUSH2 0x2F71 JUMP JUMPDEST DUP6 PUSH2 0x240 ADD MLOAD PUSH2 0x176F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1783 JUMP JUMPDEST PUSH2 0x1783 DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE33 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x178D PUSH2 0x2F71 JUMP JUMPDEST DUP7 PUSH2 0x220 ADD MLOAD PUSH2 0x17AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x17BB JUMP JUMPDEST PUSH2 0x17BB DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x17C5 PUSH2 0x3052 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x17E4 JUMPI DUP10 PUSH1 0x60 ADD MLOAD PUSH2 0x17E7 JUMP JUMPDEST DUP10 MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1809 JUMPI DUP10 PUSH1 0xA0 ADD MLOAD PUSH2 0x180F JUMP JUMPDEST DUP10 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1831 JUMPI DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x1837 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x185A JUMPI DUP10 PUSH2 0x140 ADD MLOAD PUSH2 0x1860 JUMP JUMPDEST DUP10 PUSH1 0xE0 ADD MLOAD JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x187A JUMPI DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1881 JUMP JUMPDEST DUP10 PUSH2 0x1C0 ADD MLOAD JUMPDEST ISZERO ISZERO DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x60 ADD MLOAD TIMESTAMP LT ISZERO PUSH2 0x1AAE JUMPI DUP8 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x1A07 JUMPI PUSH2 0x18AA PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x18D5 SWAP2 SWAP1 PUSH2 0x11CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH2 0x18F9 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST ISZERO PUSH2 0x192A JUMPI PUSH2 0x190E DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST PUSH2 0x192A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3D51 JUMP JUMPDEST PUSH2 0x1932 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP11 MLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x19BC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH2 0x1965 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x37F2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19B5 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x19DD DUP12 PUSH1 0x0 ADD MLOAD DUP13 PUSH1 0x20 ADD MLOAD DUP14 PUSH1 0x40 ADD MLOAD DUP15 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1B73 JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x19F6 DUP3 DUP11 DUP6 DUP10 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD PUSH2 0x1BAC JUMP JUMPDEST SWAP10 POP SWAP10 POP POP POP POP POP POP POP POP POP PUSH2 0x361 JUMP JUMPDEST PUSH2 0x1A0F PUSH2 0x2F71 JUMP JUMPDEST DUP9 PUSH2 0x200 ADD MLOAD PUSH2 0x1A2E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x1A3E DUP10 PUSH2 0x120 ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0x1A84 JUMPI PUSH2 0x1A52 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1A5E DUP8 DUP8 DUP7 DUP6 PUSH2 0x28C8 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x1A74 DUP3 DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2915 JUMP JUMPDEST SWAP9 POP SWAP9 POP POP POP POP POP POP POP POP PUSH2 0x361 JUMP JUMPDEST PUSH2 0x1A8C PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1A98 DUP8 DUP8 DUP7 DUP6 PUSH2 0x2A70 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x1A74 DUP3 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2915 JUMP JUMPDEST PUSH2 0x1AB6 PUSH2 0x2F71 JUMP JUMPDEST DUP9 PUSH2 0x220 ADD MLOAD PUSH2 0x1AD5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x1AF6 DUP10 PUSH1 0x0 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH1 0xC0 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0x2157 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B00 PUSH2 0x2F71 JUMP JUMPDEST DUP10 PUSH2 0x200 ADD MLOAD PUSH2 0x1B1F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1B42 JUMP JUMPDEST PUSH2 0x1B42 DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0x80 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2157 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B4C PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1B58 DUP9 DUP9 DUP6 DUP6 PUSH2 0x2B01 JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x19F6 DUP3 DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x21B8 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B8C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1BB4 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1BBC PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1BC6 DUP9 DUP6 PUSH2 0x24B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x1BD0 PUSH2 0x2F71 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 MSTORE PUSH2 0x1BF5 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1BFD PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1C05 PUSH2 0x2F71 JUMP JUMPDEST DUP7 ISZERO PUSH2 0x1C97 JUMPI PUSH2 0x1C24 DUP10 PUSH2 0x1C1F DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2B73 JUMP JUMPDEST SWAP3 POP PUSH2 0x1C5E PUSH2 0x1C49 PUSH2 0x1C3C DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP12 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2B91 JUMP JUMPDEST SWAP2 POP PUSH2 0x1C90 DUP12 PUSH2 0x1C84 DUP5 PUSH2 0x1C78 DUP10 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2BA8 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1D23 JUMP JUMPDEST PUSH2 0x1C9F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1CB6 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x1B PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x1CDC DUP2 PUSH2 0x1C1F DUP14 PUSH2 0x1CD0 DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2BD1 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1D05 PUSH2 0x1C49 PUSH2 0x1CF8 DUP14 PUSH2 0x1CD0 DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP3 POP PUSH2 0x1D1F DUP13 PUSH2 0x1C84 DUP6 PUSH2 0x1C78 DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1B DUP5 EQ ISZERO PUSH2 0x1D50 JUMPI DUP5 MLOAD PUSH2 0x1D49 SWAP1 PUSH2 0x2C07 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DFB JUMP JUMPDEST PUSH1 0x1B DUP5 GT ISZERO PUSH2 0x1D89 JUMPI PUSH1 0x0 PUSH1 0x1B DUP6 SUB SWAP1 POP PUSH2 0x1D81 DUP2 PUSH1 0xA EXP PUSH2 0x1D75 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1339 AND JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1DFB JUMP JUMPDEST PUSH1 0x1B DUP5 SWAP1 SUB PUSH1 0x0 DUP5 PUSH2 0x1DC6 JUMPI PUSH1 0x0 PUSH2 0x1DB7 DUP4 PUSH1 0xA EXP PUSH2 0x1DAB DUP11 PUSH1 0x0 ADD MLOAD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2C23 AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1DC4 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x1DF6 DUP2 PUSH2 0x1DEA DUP5 PUSH1 0xA EXP PUSH2 0x1DDE DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x12F7 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2348 AND JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAF0968FC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1E7C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1E79 SWAP2 DUP2 ADD SWAP1 PUSH2 0x34B5 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x2138 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAABAECD6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ECD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EF1 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7158DA7C 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F62 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D69BC8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FD3 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC52987CF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x200C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2020 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2044 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x207D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2091 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20B5 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF3C274A6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2102 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2126 SWAP2 SWAP1 PUSH2 0x363F JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP POP PUSH2 0x214E JUMP JUMPDEST SWAP5 SWAP12 POP SWAP3 SWAP10 POP SWAP1 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH2 0x214E SWAP1 POP JUMP JUMPDEST SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x215F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2167 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2172 DUP5 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x217C PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2188 PUSH1 0x1 PUSH1 0x0 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x2192 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x219E DUP3 DUP11 DUP11 DUP11 PUSH2 0x21B8 JUMP JUMPDEST SWAP1 POP PUSH2 0x21AB DUP4 DUP3 DUP8 PUSH2 0x2628 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x21C0 PUSH2 0x2F71 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x21E1 JUMPI POP DUP4 PUSH2 0x405 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x2218 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x3830 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x222F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2243 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2267 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x22A2 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x3830 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22F1 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 DUP1 ISZERO PUSH2 0x22FF JUMPI POP DUP1 JUMPDEST PUSH2 0x231B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3E83 JUMP JUMPDEST PUSH2 0x21AB PUSH2 0x2329 DUP4 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST PUSH2 0x1CD0 PUSH2 0x2337 DUP8 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP13 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3BEE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2377 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x237F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x238F DUP11 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2BD1 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23A3 TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xE10 DUP2 LT PUSH2 0x23B6 JUMPI DUP2 SWAP3 POP PUSH2 0x24A3 JUMP JUMPDEST PUSH2 0x23BE PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x23C6 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x23D3 PUSH1 0x1 SLOAD PUSH1 0x1B PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP DUP7 ISZERO PUSH2 0x2405 JUMPI PUSH2 0x23FE PUSH2 0x1C49 PUSH2 0x23F1 DUP4 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP14 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP2 POP PUSH2 0x242F JUMP JUMPDEST PUSH2 0x242C DUP11 PUSH2 0x1CD0 PUSH2 0x1C49 PUSH2 0x241F DUP6 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP16 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x2438 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2443 DUP4 PUSH1 0x12 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x244D PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x245A PUSH2 0xE10 PUSH1 0x12 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x2484 PUSH2 0x2477 DUP3 PUSH2 0x1CD0 DUP6 PUSH2 0x1C84 DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2BA8 AND JUMP JUMPDEST SWAP6 POP PUSH2 0x2496 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST ISZERO PUSH2 0x249F JUMPI DUP5 SWAP6 POP JUMPDEST POP POP POP JUMPDEST PUSH2 0x1D23 DUP4 DUP8 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1D32 AND JUMP JUMPDEST PUSH2 0x24BD PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2513 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x24FF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x253C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x391D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x254E DUP5 TIMESTAMP PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 PUSH2 0x2567 PUSH1 0x1 DUP6 MLOAD PUSH2 0x12B5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2571 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x2597 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x43C6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 PUSH1 0xFF AND LT ISZERO PUSH2 0x2617 JUMPI DUP2 DUP4 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x25B6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT PUSH2 0x260F JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 MLOAD PUSH2 0x2605 SWAP3 SWAP1 DUP7 SWAP1 PUSH1 0xFF DUP7 AND SWAP1 DUP2 LT PUSH2 0x25E7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1B PUSH2 0x11CC JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x259A JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2630 PUSH2 0x2F71 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2676 JUMPI PUSH2 0x2646 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST PUSH2 0x265F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x266F JUMP JUMPDEST PUSH2 0x266F DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1DFE JUMP JUMPDEST PUSH2 0x2686 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST PUSH2 0x269F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1DFB JUMP JUMPDEST PUSH2 0x1DFB DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST DUP2 MLOAD MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x26D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x423D JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x20 ADD MLOAD MLOAD GT ISZERO PUSH2 0x26F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3C6B JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x40 ADD MLOAD MLOAD GT ISZERO PUSH2 0x271E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4145 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD MLOAD DUP3 MLOAD MLOAD EQ PUSH2 0x2744 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3D00 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD MLOAD DUP3 PUSH1 0x20 ADD MLOAD MLOAD EQ PUSH2 0x276D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4320 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD MLOAD DUP3 PUSH1 0x40 ADD MLOAD MLOAD EQ PUSH2 0x2796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4370 JUMP JUMPDEST PUSH2 0x27A0 DUP3 DUP3 PUSH2 0x2C65 JUMP JUMPDEST PUSH2 0x27BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3ED6 JUMP JUMPDEST PUSH2 0x27C6 DUP3 DUP3 PUSH2 0x2D9F JUMP JUMPDEST PUSH2 0x27E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4044 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x27EE PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x280F SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2E3F AND JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x2844 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP2 SWAP1 PUSH2 0x38CA JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x286D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP2 SWAP1 PUSH2 0x38CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2879 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x1286 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x28A8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT SWAP1 JUMP JUMPDEST PUSH2 0x28D0 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x290C PUSH2 0x1C49 PUSH2 0x28F0 PUSH2 0x28E3 DUP9 DUP9 PUSH2 0x2B73 JUMP JUMPDEST DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2900 DUP9 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x291D PUSH2 0x2F71 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x293E JUMPI POP DUP3 PUSH2 0x1DFE JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x296F SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x37F2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x299B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29BF SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x29F5 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x37F2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A21 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A45 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST SWAP1 POP PUSH2 0x110C PUSH2 0x2A55 DUP3 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST PUSH2 0x1CD0 PUSH2 0x2A63 DUP6 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2A78 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2A99 SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2E85 AND JUMP JUMPDEST ISZERO PUSH2 0x2AB8 JUMPI PUSH2 0x2AB1 PUSH2 0x1C49 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x405 JUMP JUMPDEST PUSH2 0x2AC0 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2AD8 DUP4 PUSH2 0x1CD0 DUP9 PUSH2 0x1C84 DUP4 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x2AE2 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2AF5 PUSH2 0x1C49 DUP9 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xC6D DUP3 DUP3 PUSH2 0x2B91 JUMP JUMPDEST PUSH2 0x2B09 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x290C PUSH2 0x2B1C DUP4 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2900 DUP6 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2B34 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 PUSH2 0x2B62 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x2E8C AND JUMP JUMPDEST DUP2 PUSH2 0x2B69 JUMPI INVALID JUMPDEST SDIV SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2B7B PUSH2 0x2F71 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SLT PUSH2 0x2B8A JUMPI DUP2 PUSH2 0x1283 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B99 PUSH2 0x2F71 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SGT PUSH2 0x2B8A JUMPI DUP2 PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x2BB0 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x280F SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2EF7 AND JUMP JUMPDEST PUSH2 0x2BD9 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 SWAP1 PUSH2 0x2B62 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x2E8C AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x2C1C JUMPI DUP2 PUSH1 0x0 SUB SWAP1 POP PUSH2 0x53F JUMP JUMPDEST POP DUP1 PUSH2 0x53F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1283 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0x2F3D JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x2C98 JUMPI DUP2 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x2C98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3E26 JUMP JUMPDEST DUP2 PUSH2 0x200 ADD MLOAD ISZERO DUP1 PUSH2 0x2CAD JUMPI POP DUP2 PUSH2 0x220 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2CBA JUMPI POP PUSH1 0x1 PUSH2 0x1286 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2CC7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CE9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2D21 JUMPI POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2D46 JUMPI POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2D6B JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2D7F JUMPI POP DUP2 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x140 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0x1283 JUMPI POP DUP2 PUSH2 0x1C0 ADD MLOAD ISZERO ISZERO DUP3 PUSH2 0x1E0 ADD MLOAD ISZERO ISZERO EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x240 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2DB6 JUMPI SWAP1 POP PUSH2 0x1286 JUMP JUMPDEST DUP3 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x2DF9 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2DD2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x1283 JUMP JUMPDEST DUP3 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x1283 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E15 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2E54 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x2E69 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2E69 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4292 JUMP JUMPDEST MLOAD SWAP1 MLOAD EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E9B JUMPI POP PUSH1 0x0 PUSH2 0x1286 JUMP JUMPDEST DUP3 PUSH1 0x0 NOT EQ DUP1 ISZERO PUSH2 0x2EAF JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ JUMPDEST ISZERO PUSH2 0x2ECC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FFD JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2ED9 JUMPI INVALID JUMPDEST SDIV EQ PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FFD JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2F0C JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x2F21 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2F21 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3CBF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2F5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP2 SWAP1 PUSH2 0x38CA JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0x2F68 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 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 SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x3033 PUSH2 0x2F71 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3040 PUSH2 0x2F71 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x304D PUSH2 0x2F71 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3090 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x30A3 PUSH2 0x309E DUP3 PUSH2 0x448D JUMP JUMPDEST PUSH2 0x4466 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x30C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x30EC JUMPI DUP2 CALLDATALOAD PUSH2 0x30DA DUP2 PUSH2 0x44AD JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x30C7 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3108 JUMPI DUP1 DUP2 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x311F JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3149 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3157 PUSH2 0x309E DUP3 PUSH2 0x448D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x3178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x30EC JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x317B JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31A8 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x31B2 PUSH1 0xC0 PUSH2 0x4466 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x31CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31D8 DUP6 DUP4 DUP7 ADD PUSH2 0x3080 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x31EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31FA DUP6 DUP4 DUP7 ADD PUSH2 0x3080 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321F DUP6 DUP4 DUP7 ADD PUSH2 0x3080 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3244 DUP6 DUP4 DUP7 ADD PUSH2 0x3139 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x325D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3269 DUP6 DUP4 DUP7 ADD PUSH2 0x3139 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x328F DUP5 DUP3 DUP6 ADD PUSH2 0x3139 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32AC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1283 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32C8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1283 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x32E8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32F3 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3303 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3313 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3323 DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3349 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3354 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x3364 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3374 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3384 DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x33A0 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x33AC DUP13 DUP4 DUP14 ADD PUSH2 0x30F7 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x33C4 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x33D1 DUP12 DUP3 DUP13 ADD PUSH2 0x30F7 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x33FC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3407 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3417 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3427 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3437 DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3460 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x346B DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x347B DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x348B DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x349B DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x34CD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH2 0x34D8 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x34E9 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH2 0x34FA DUP2 PUSH2 0x44AD JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x351A DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x3546 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH2 0x3551 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD PUSH2 0x3561 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH2 0x3571 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x100 DUP11 ADD CALLDATALOAD PUSH2 0x35A5 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x35CD JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x35D8 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x35E8 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3606 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3626 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3631 DUP2 PUSH2 0x44AD 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 0x3650 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1283 DUP2 PUSH2 0x44C5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x366D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3683 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x368F DUP6 DUP3 DUP7 ADD PUSH2 0x3197 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x36B3 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x36C9 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x36D5 DUP8 DUP3 DUP9 ADD PUSH2 0x3197 JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3701 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3719 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3732 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3744 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3761 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x378C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0x37C1 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37E2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1283 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x40 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 0x38A6 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x388A JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x38F6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x38DA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3907 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x6F206578706972792076616C756573 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x46 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2061756374696F6E2074696D657374 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x616D702073686F756C6420626520706F7374207661756C74206C617465737420 PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x757064617465 PUSH1 0xD0 SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20496E76616C696420746F6B656E20 PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x61646472657373 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204F746F6B656E206E6F7420657870 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1A5C9959081E595D PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E6F206578706972792075707065 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1C88189BDD5B99081D985B1D5948199BDD5B99 PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642074696D657320 PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x746F20657870697279206172726179 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206475737420616D6F756E74207368 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6F756C642062652067726561746572207468616E207A65726F00000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642076616C756573 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x206172726179 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E79206C6F6E6720 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x1BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x62 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2053686F727420617373657420616E PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0xC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x7B SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742073686F756C64206861766520636F6C6C61746572616C20616D6F75 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0x6E742067726561746572207468616E206475737420616D6F756E740000000000 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964206F7074696F6E PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x20757070657220626F756E642076616C7565 PUSH1 0x70 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3C SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742063616E6E6F742068617665206C6F6E67206F746F6B656E00000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A207072696365206174206578706972 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1E481B9BDD08199A5B985B1A5E9959081E595D PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206C6F6E67206173736574206E6F74 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x206D617267696E61626C6520666F722073686F72742061737365740000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2063616E206E6F74206C6971756964 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x30BA329032BC3834B932B2103837B9B4BA34B7B7 PUSH1 0x61 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206D756C7469706C69636174696F6E206F PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x766572666C6F77 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x41 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20636F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6574206E6F74206D617267696E61626C6520666F722073686F72742061737365 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2074696D652073686F756C64206265 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x1034B71037B93232B9 PUSH1 0xB9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964207661756C7420 PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0x7479706520746F206C6971756964617465 PUSH1 0x78 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E7920636F6C6C61 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746572616C2061737365747320696E20746865207661756C7400000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20757070657220626F756E64207661 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1B1D59481B9BDD08199BDD5B99 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206578706972792061727261792069 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x39903737BA1034B71037B93232B9 PUSH1 0x91 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x35 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E792073686F7274 PUSH1 0x40 DUP3 ADD MSTORE PUSH21 0x81BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x5A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642073706F742073 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x686F636B2076616C7565 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x30 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204C6F6E6720617373657420616E64 PUSH1 0x40 DUP3 ADD MSTORE PUSH16 0x40C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x83 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20436F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH22 0xCAE840C2DCC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x53 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x6F20757070657220626F756E642076616C7565 PUSH1 0x68 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP2 MLOAD DUP3 MSTORE MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4485 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x44A3 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x44C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x44C2 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 0xE LOG1 DUP4 SHL PUSH16 0x51B2B4C7F97DCE8CD8D531CF97E725B7 0xEA 0xB3 GASLIMIT PC SSTORE MOD PUSH10 0x6467C164736F6C634300 MOD EXP STOP CALLER ",
+ "sourceMap": "234:1881:74:-:0;;;1992:27:2;2011:1;1049;1992:18;;;;;:27;;:::i;:::-;1958:61;;;286:74:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;344:12;893:17:48;913:12;-1:-1:-1;;;;;913:10:48;:12;:::i;:::-;935:6;:18;;-1:-1:-1;;;;;;935:18:48;-1:-1:-1;;;;;935:18:48;;;;;;;968:43;;935:18;;-1:-1:-1;935:18:48;968:43;;935:6;;968:43;-1:-1:-1;;;;;;3858:21:2;;3850:74;;;;-1:-1:-1;;;3850:74:2;;;;;;;;;;;;;;;;;3935:6;:33;;-1:-1:-1;;;;;;3935:33:2;-1:-1:-1;;;;;3935:33:2;;;;;;;;;;-1:-1:-1;234:1881:74;;1493:601:27;1571:20;;:::i;:::-;1603:31;;:::i;:::-;549:2;1649:9;:26;1645:415;;;1704:29;;;;;;;;1718:14;:2;:12;;;;;:14;;:::i;:::-;1704:29;;1691:42;-1:-1:-1;1645:415:27;;;549:2;1754:9;:25;1750:310;;;1795:11;1809:28;549:2;1809:9;:13;;;;;;:28;;;;:::i;:::-;1795:42;;1864:44;;;;;;;;1878:29;1879:15;1890:3;1886:2;:7;1879:2;:6;;;;;;:15;;;;:::i;:::-;1878:27;;;;;:29;;:::i;:::-;1864:44;;;1851:57;;1750:310;;;;1939:11;1969:9;549:2;1953:25;1939:39;;2005:44;;;;;;;;2019:29;2020:15;2031:3;2027:2;:7;2020:2;:6;;;;;;:15;;;;:::i;2019:29::-;2005:44;;1992:57;-1:-1:-1;;1750:310:27;2077:10;-1:-1:-1;1493:601:27;;;;;:::o;623:104:46:-;710:10;623:104;:::o;439:162:29:-;492:6;-1:-1:-1;;;518:1:29;:10;510:57;;;;-1:-1:-1;;;510:57:29;;;;;;;;;-1:-1:-1;592:1:29;439:162::o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;;;:43;;:::i;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;:3;;;:39;;:::i;2237:459::-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;1780:217;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;3756:368::-;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o;234:1881:74:-;;;;;;;;;;;;;;:::o;146:263:-1:-;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;3962:54;;4469:35;;4459:2;;-1:-1;;4508:12;1915:310;;2062:2;;2083:17;2076:47;561:5;3589:12;3746:6;2062:2;2051:9;2047:18;3734:19;-1:-1;4101:101;4115:6;4112:1;4109:13;4101:101;;;4182:11;;;;;4176:18;4163:11;;;3774:14;4163:11;4156:39;4130:10;;4101:101;;;4217:6;4214:1;4211:13;4208:2;;;-1:-1;3774:14;4273:6;2051:9;4264:16;;4257:27;4208:2;-1:-1;4389:7;4373:14;-1:-1;;4369:28;719:39;;;;3774:14;719:39;;2033:192;-1:-1;;;2033:192;2232:416;2432:2;2446:47;;;995:2;2417:18;;;3734:19;1031:34;3774:14;;;1011:55;-1:-1;;;1086:12;;;1079:26;1124:12;;;2403:245;2655:416;2855:2;2869:47;;;1375:2;2840:18;;;3734:19;1411:34;3774:14;;;1391:55;-1:-1;;;1466:12;;;1459:25;1503:12;;;2826:245;3078:416;3278:2;3292:47;;;1754:2;3263:18;;;3734:19;1790:34;3774:14;;;1770:55;-1:-1;;;1845:12;;;1838:32;1889:12;;;3249:245;;234:1881:74;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063c73547e31161007c578063c73547e3146102b8578063cd43fbfb146102cb578063dc1b3f00146102ec578063e592301a146102ff578063e842063114610307578063f2fde38b1461031a5761014d565b80638da5cb5b1461024d578063958c3234146102555780639a783d1114610268578063a101bca11461027b578063a6c569071461028e578063b29d5ee8146102b05761014d565b80636ccb9506116101155780636ccb9506146101e2578063715018a6146101f55780637ad7f800146101ff5780637dc0d1d0146102125780637f519b72146102275780638aab8fa51461023a5761014d565b8063053fe57c146101525780630b0509fb1461017c578063463459001461019c57806347840930146101af57806347d438a5146101c2575b600080fd5b61016561016036600461365b565b61032d565b604051610173929190614419565b60405180910390f35b61018f61018a366004613528565b610368565b6040516101739190614429565b61018f6101aa3660046132d3565b6103e3565b61018f6101bd36600461329b565b61040d565b6101d56101d03660046132d3565b610544565b604051610173919061386e565b61018f6101f036600461329b565b6105bc565b6101fd6105d7565b005b6101fd61020d366004613448565b610656565b61021a610757565b60405161017391906137f2565b6101fd61023536600461332e565b610766565b6101fd6102483660046133e5565b610a3d565b61021a610af6565b61018f610263366004613772565b610b05565b6101fd610276366004613614565b610b79565b61018f6102893660046133e5565b610c25565b6102a161029c36600461369e565b610c78565b604051610173939291906138b2565b61018f610f21565b6101fd6102c63660046136f0565b610f27565b6102de6102d936600461365b565b610f9c565b604051610173929190614432565b61018f6102fa3660046133e5565b6110b6565b61018f6110eb565b61018f6103153660046135b6565b6110f1565b6101fd61032836600461329b565b611116565b610335612f71565b61033d612f71565b610345612f84565b61034f8585611373565b905061035b85826116be565b92509250505b9250929050565b6000806103778b8b8b86611b73565b9050610381612f71565b61038c8960086111cc565b9050610396612f71565b6103a18960086111cc565b90506103ab612f71565b6103b68960086111cc565b90506103d16103c9858584868d8c611bac565b886000611d32565b9e9d5050505050505050505050505050565b6000806103f286868686611b73565b6000908152600660205260409020549150505b949350505050565b60006001600160a01b03821661043e5760405162461bcd60e51b8152600401610435906139d8565b60405180910390fd5b60008060008060008061045088611e05565b9550955095509550955095508142101561047c5760405162461bcd60e51b815260040161043590613a1f565b610484612f71565b6104918686858786612157565b905061049b612f71565b6104a782878a876121b8565b90506000886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e457600080fd5b505afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c91906137d1565b60ff1690506105338282600163ffffffff611d3216565b99505050505050505050505b919050565b6060600061055486868686611b73565b60008181526004602090815260409182902080548351818402810184019094528084529394509192908301828280156105ac57602002820191906000526020600020905b815481526020019060010190808311610598575b5050505050915050949350505050565b6001600160a01b031660009081526003602052604090205490565b6105df612344565b6000546001600160a01b0390811691161461060c5760405162461bcd60e51b815260040161043590613fc8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61065e612344565b6000546001600160a01b0390811691161461068b5760405162461bcd60e51b815260040161043590613fc8565b600081116106ab5760405162461bcd60e51b815260040161043590613dd4565b60006106b987878787611b73565b6000818152600560209081526040808320878452909152902054909150806106f35760405162461bcd60e51b8152600401610435906141a2565b6000828152600560209081526040808320878452909152908190208490555182907f39bab32d3b88604bdfbf6e8c3b1aaaf9bb6013da4fd5206dee9e3b00ee6f2cf99061074590879085908890614450565b60405180910390a25050505050505050565b6007546001600160a01b031681565b61076e612344565b6000546001600160a01b0390811691161461079b5760405162461bcd60e51b815260040161043590613fc8565b826107b85760405162461bcd60e51b815260040161043590613aba565b8281146107d75760405162461bcd60e51b815260040161043590613c25565b60006107e589898989611b73565b6000818152600460205260409020805491925090158061084057508054819061081590600163ffffffff6112b516565b8154811061081f57fe5b90600052602060002001548686600081811061083757fe5b90506020020135115b61085c5760405162461bcd60e51b8152600401610435906141ef565b60005b85811015610a30578561087982600163ffffffff61234816565b10156108d257868661089283600163ffffffff61234816565b81811061089b57fe5b905060200201358787838181106108ae57fe5b90506020020135106108d25760405162461bcd60e51b8152600401610435906140ab565b60008585838181106108e057fe5b90506020020135116109045760405162461bcd60e51b815260040161043590613a67565b84848281811061091057fe5b9050602002013560056000858152602001908152602001600020600089898581811061093857fe5b905060200201358152602001908152602001600020819055508187878381811061095e57fe5b83546001810185556000948552602094859020919094029290920135919092015550827fcaae9881bd3ac6f531c9e6021f1f873b93a83648e348624eef8f9ba9757fcb628888848181106109ae57fe5b905060200201356040516109c29190614429565b60405180910390a2827fcbb8d688de73727385afee9d53a2771ae5fe45293ff6de0ba46b201ab29df1158888848181106109f857fe5b90506020020135878785818110610a0b57fe5b90506020020135604051610a20929190614442565b60405180910390a260010161085f565b5050505050505050505050565b610a45612344565b6000546001600160a01b03908116911614610a725760405162461bcd60e51b815260040161043590613fc8565b60008111610a925760405162461bcd60e51b8152600401610435906142d6565b6000610aa086868686611b73565b600081815260066020526040908190208490555190915081907f78d22b4a9e4e0e1db30e7762696456ca380dc80efc59f416a299b97213b6d31690610ae6908590614429565b60405180910390a2505050505050565b6000546001600160a01b031690565b6000610b0f612f71565b610b1989856111cc565b9050610b23612f71565b610b2e8960086111cc565b9050610b38612f71565b610b438960086111cc565b9050610b4d612f71565b610b588960086111cc565b9050610b69848484848c8c8c61236d565b9c9b505050505050505050505050565b610b81612344565b6000546001600160a01b03908116911614610bae5760405162461bcd60e51b815260040161043590613fc8565b60008111610bce5760405162461bcd60e51b815260040161043590613b4f565b6001600160a01b03821660008181526003602052604090819020839055517f8ef429e6cec4339c5f0187fb930764fb967114bf09bc8bb06a552ba32923fd8690610c19908490614429565b60405180910390a25050565b60008086868686604051602001610c3f9493929190613806565b604051602081830303815290604052805190602001209050610c6d610c6482856124b5565b601b6000611d32565b979650505050505050565b600080600085600114610c9d5760405162461bcd60e51b8152600401610435906140f4565b610ca5612f84565b610caf8888611373565b9050806102200151610ccb575060009250829150819050610f17565b8060e001514210610cee5760405162461bcd60e51b815260040161043590613f33565b6007548151604051631b85462d60e01b815260009283926001600160a01b0390911691631b85462d91610d25918b90600401613849565b604080518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d74919061374f565b91509150878111610d975760405162461bcd60e51b81526004016104359061396c565b610d9f613020565b6040518060600160405280610dcd8d60600151600081518110610dbe57fe5b602002602001015160086111cc565b8152602001610de18660c0015160086111cc565b8152602001610df18560086111cc565b81525090506000610e15856000015186602001518760400151886101c00151611b73565b9050610e1f612f71565b610e468d60a00151600081518110610e3357fe5b60200260200101518761018001516111cc565b9050610e50612f71565b610e73838560000151866040015187602001518b60e001518c6101c00151611bac565b9050610e85818363ffffffff61262016565b15610ea1575060009850889750879650610f1795505050505050565b610ea9612f71565b610ec1856020015186604001518a6101c00151612628565b90506000610ee68487600001518489604001518b8e61018001518f6101c0015161236d565b6040998a01516001600160a01b031660009081526003602052999099205460019c50989a5097985050505050505050505b9450945094915050565b60015490565b610f2f612344565b6000546001600160a01b03908116911614610f5c5760405162461bcd60e51b815260040161043590613fc8565b60018190556040517fe44c6dd1fc3826ad24b81f17cf04849cedd368e002a52e89a845d14d3474e20a90610f91908390614429565b60405180910390a150565b600080610fa7612f84565b610fb18585611373565b9050610fbd85826126af565b806102200151158015610fd35750806102000151155b15611013576000816102400151610feb576000611005565b8560a00151600081518110610ffc57fe5b60200260200101515b935060019250610361915050565b61101b612f71565b611023612f71565b61102d87846116be565b91509150611039612f71565b611049838363ffffffff6127e616565b6040805160208101909152600254815290915060009061107090839063ffffffff61281816565b9050600085610200015161108957856101000151611090565b8561016001515b905060006110a584838563ffffffff611d3216565b9b929a509198505050505050505050565b6000806110c587878787611b73565b600090815260056020908152604080832086845290915290205491505095945050505050565b610e1081565b600061110c6111038787878787612157565b60086001611d32565b9695505050505050565b61111e612344565b6000546001600160a01b0390811691161461114b5760405162461bcd60e51b815260040161043590613fc8565b6001600160a01b0381166111715760405162461bcd60e51b815260040161043590613b09565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111d4612f71565b6111dc612f71565b601b8314156112025760405180602001604052806111f98661128c565b90529050611283565b601b83111561125457600061121e84601b63ffffffff6112b516565b9050604051806020016040528061124961124484600a0a896112f790919063ffffffff16565b61128c565b815250915050611283565b6040805160208101909152601b849003908061127d61124488600a86900a63ffffffff61133916565b90529150505b90505b92915050565b6000600160ff1b82106112b15760405162461bcd60e51b815260040161043590613bac565b5090565b600061128383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612820565b600061128383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061284c565b60008261134857506000611286565b8282028284828161135557fe5b04146112835760405162461bcd60e51b815260040161043590613f87565b61137b612f84565b611383612f84565b50604080516102608101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082018190526102408201529084015161142890612883565b1515610200820152835161143b90612883565b1515610220820152604084015161145190612883565b15156102408201526101a081018390526102008101511561153f576000846020015160008151811061147f57fe5b6020026020010151905061149281611e05565b15156101e08801526101408701526101208601526001600160a01b03908116608086015290811660608501521660a083018190526040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153491906137d1565b60ff16610160830152505b8061022001511561161a576000846000015160008151811061155d57fe5b6020026020010151905061157081611e05565b15156101c088015260e087015260c08601526001600160a01b039081166020808701919091529181168552919091166040808501829052805163313ce56760e01b81529051919263313ce56792600480840193829003018186803b1580156115d757600080fd5b505afa1580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f91906137d1565b60ff16610100830152505b8061024001511561128357836040015160008151811061163657fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561167657600080fd5b505afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906137d1565b60ff166101808201529392505050565b6116c6612f71565b6116ce612f71565b6116d6612f71565b8361022001516116f55760408051602081019091526002548152611709565b6117098560600151600081518110610dbe57fe5b9050611713612f71565b8461020001516117325760408051602081019091526002548152611746565b6117468660800151600081518110610dbe57fe5b9050611750612f71565b85610240015161176f5760408051602081019091526002548152611783565b6117838760a00151600081518110610e3357fe5b905061178d612f71565b8661022001516117ac57604080516020810190915260025481526117bb565b6117bb8760c0015160086111cc565b90506117c5613052565b6040518060a001604052808961022001516117e45789606001516117e7565b89515b6001600160a01b03168152602001896102200151611809578960a0015161180f565b89604001515b6001600160a01b03168152602001896102200151611831578960800151611837565b89602001515b6001600160a01b0316815260200189610220015161185a57896101400151611860565b8960e001515b815260200189610220015161187a57896101e00151611881565b896101c001515b151581525090508060600151421015611aae57876101a0015160011415611a07576118aa612f71565b6040808a01516001600160a01b03166000908152600360205220546101808a01516118d591906111cc565b604080516020810190915260025481529091506118f990859063ffffffff6128c116565b1561192a5761190e848263ffffffff6128c116565b61192a5760405162461bcd60e51b815260040161043590613d51565b611932612f71565b6007548a516040516341976e0960e01b81526119bc926001600160a01b0316916341976e099161196591906004016137f2565b60206040518083038186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b59190613708565b60086111cc565b905060006119dd8b600001518c602001518d604001518e6101c00151611b73565b9050856119f6828a858989606001518a60800151611bac565b995099505050505050505050610361565b611a0f612f71565b886102000151611a2e5760408051602081019091526002548152611a3e565b611a3e89610120015160086111cc565b9050816080015115611a8457611a52612f71565b611a5e878786856128c8565b905084611a748285604001518660200151612915565b9850985050505050505050610361565b611a8c612f71565b611a9887878685612a70565b905084611a748285600001518660200151612915565b611ab6612f71565b886102200151611ad55760408051602081019091526002548152611af6565b611af689600001518a602001518b60e001518c60c001518660800151612157565b9050611b00612f71565b896102000151611b1f5760408051602081019091526002548152611b42565b611b428a606001518b608001518c61014001518d61012001518760800151612157565b9050611b4c612f71565b611b5888888585612b01565b9050856119f6828660400151876020015188606001516121b8565b600084848484604051602001611b8c9493929190613806565b604051602081830303815290604052805190602001209050949350505050565b611bb4612f71565b611bbc612f71565b611bc688856124b5565b9050611bd0612f71565b50604080516020808201835260008b8152600690915291909120548152611bf5612f71565b611bfd612f71565b611c05612f71565b8615611c9757611c2489611c1f868d63ffffffff612b2c16565b612b73565b9250611c5e611c49611c3c868d63ffffffff612b2c16565b8b9063ffffffff6127e616565b60408051602081019091526002548152612b91565b9150611c908b611c8484611c78898863ffffffff612b2c16565b9063ffffffff612ba816565b9063ffffffff612b2c16565b9050611d23565b611c9f612f71565b611cb66b033b2e3c9fd0803ce8000000601b6111cc565b9050611cdc81611c1f8d611cd08e8a63ffffffff612b2c16565b9063ffffffff612bd116565b9350611d05611c49611cf88d611cd08e8a63ffffffff612b2c16565b839063ffffffff6127e616565b9250611d1f8c611c8485611c788a8963ffffffff612b2c16565b9150505b9b9a5050505050505050505050565b600080601b841415611d50578451611d4990612c07565b9050611dfb565b601b841115611d89576000601b85039050611d8181600a0a611d758860000151612c07565b9063ffffffff61133916565b915050611dfb565b601b849003600084611dc6576000611db783600a0a611dab8a60000151612c07565b9063ffffffff612c2316565b90508015611dc457600191505b505b611df681611dea84600a0a611dde8b60000151612c07565b9063ffffffff6112f716565b9063ffffffff61234816565b925050505b90505b9392505050565b6000806000806000806000879050806001600160a01b031663af0968fc6040518163ffffffff1660e01b815260040160c06040518083038186803b158015611e4c57600080fd5b505afa925050508015611e7c575060408051601f3d908101601f19168201909252611e79918101906134b5565b60015b61213857806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb957600080fd5b505afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906132b7565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2a57600080fd5b505afa158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6291906132b7565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9b57600080fd5b505afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd391906132b7565b836001600160a01b031663c52987cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561200c57600080fd5b505afa158015612020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120449190613708565b846001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561207d57600080fd5b505afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190613708565b856001600160a01b031663f3c274a66040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ee57600080fd5b505afa158015612102573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612126919061363f565b9650965096509650965096505061214e565b949b5092995090975095509350915061214e9050565b91939550919395565b61215f612f71565b612167612f71565b6121728460086111cc565b905061217c612f71565b612188600160006111cc565b9050612192612f71565b61219e828a8a8a6121b8565b90506121ab838287612628565b9998505050505050505050565b6121c0612f71565b826001600160a01b0316846001600160a01b031614156121e1575083610405565b6007546040516301957f8160e01b815260009182916001600160a01b03909116906301957f81906122189089908890600401613830565b604080518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613720565b6007546040516301957f8160e01b815292945090925060009182916001600160a01b0316906301957f81906122a2908a908a90600401613830565b604080518083038186803b1580156122b957600080fd5b505afa1580156122cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f19190613720565b915091508280156122ff5750805b61231b5760405162461bcd60e51b815260040161043590613e83565b6121ab6123298360086111cc565b611cd06123378760086111cc565b8c9063ffffffff612b2c16565b3390565b6000828201838110156112835760405162461bcd60e51b815260040161043590613bee565b6000612377612f71565b61237f612f71565b61238f8a8a63ffffffff612bd116565b905060006123a3428863ffffffff6112b516565b9050610e1081106123b6578192506124a3565b6123be612f71565b6123c6612f71565b6123d3600154601b6111cc565b90508615612405576123fe611c496123f1838d63ffffffff612b2c16565b8d9063ffffffff6127e616565b915061242f565b61242c8a611cd0611c4961241f858463ffffffff612b2c16565b8f9063ffffffff6127e616565b91505b50612438612f71565b6124438360126111cc565b905061244d612f71565b61245a610e1060126111cc565b905061248461247782611cd085611c848a8963ffffffff6127e616565b849063ffffffff612ba816565b9550612496868663ffffffff6128c116565b1561249f578495505b5050505b611d238387600163ffffffff611d3216565b6124bd612f71565b60008381526004602090815260409182902080548351818402810184019094528084526060939283018282801561251357602002820191906000526020600020905b8154815260200190600101908083116124ff575b5050505050905080516000141561253c5760405162461bcd60e51b81526004016104359061391d565b600061254e844263ffffffff6112b516565b90508082612567600185516112b590919063ffffffff16565b8151811061257157fe5b602002602001015110156125975760405162461bcd60e51b8152600401610435906143c6565b60005b82518160ff1610156126175781838260ff16815181106125b657fe5b60200260200101511061260f57600086815260056020526040812084516126059290869060ff86169081106125e757fe5b6020026020010151815260200190815260200160002054601b6111cc565b9350505050611286565b60010161259a565b50505092915050565b519051131590565b612630612f71565b811561267657612646848463ffffffff6128c116565b61265f576040805160208101909152600254815261266f565b61266f848463ffffffff6127e616565b9050611dfe565b612686838563ffffffff6128c116565b61269f5760408051602081019091526002548152611dfb565b611dfb838563ffffffff6127e616565b815151600110156126d25760405162461bcd60e51b81526004016104359061423d565b600182602001515111156126f85760405162461bcd60e51b815260040161043590613c6b565b6001826040015151111561271e5760405162461bcd60e51b815260040161043590614145565b606082015151825151146127445760405162461bcd60e51b815260040161043590613d00565b8160800151518260200151511461276d5760405162461bcd60e51b815260040161043590614320565b8160a0015151826040015151146127965760405162461bcd60e51b815260040161043590614370565b6127a08282612c65565b6127bc5760405162461bcd60e51b815260040161043590613ed6565b6127c68282612d9f565b6127e25760405162461bcd60e51b815260040161043590614044565b5050565b6127ee612f71565b604080516020810190915282518451829161280f919063ffffffff612e3f16565b90529392505050565b519051121590565b600081848411156128445760405162461bcd60e51b815260040161043591906138ca565b505050900390565b6000818361286d5760405162461bcd60e51b815260040161043591906138ca565b50600083858161287957fe5b0495945050505050565b6000808251118015611286575060006001600160a01b0316826000815181106128a857fe5b60200260200101516001600160a01b0316141592915050565b5190511390565b6128d0612f71565b61290c611c496128f06128e38888612b73565b859063ffffffff612b2c16565b612900888763ffffffff612b2c16565b9063ffffffff6127e616565b95945050505050565b61291d612f71565b816001600160a01b0316836001600160a01b0316141561293e575082611dfe565b6007546040516341976e0960e01b81526000916001600160a01b0316906341976e099061296f9087906004016137f2565b60206040518083038186803b15801561298757600080fd5b505afa15801561299b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bf9190613708565b6007546040516341976e0960e01b81529192506000916001600160a01b03909116906341976e09906129f59087906004016137f2565b60206040518083038186803b158015612a0d57600080fd5b505afa158015612a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a459190613708565b905061110c612a558260086111cc565b611cd0612a638560086111cc565b899063ffffffff612b2c16565b612a78612f71565b60408051602081019091526002548152612a9990839063ffffffff612e8516565b15612ab857612ab1611c49868663ffffffff6127e616565b9050610405565b612ac0612f71565b612ad883611cd088611c84838963ffffffff6127e616565b9050612ae2612f71565b612af5611c49888863ffffffff6127e616565b9050610c6d8282612b91565b612b09612f71565b61290c612b1c838663ffffffff612b2c16565b612900858863ffffffff612b2c16565b612b34612f71565b60408051602081019091528251845182916b033b2e3c9fd0803ce800000091612b629163ffffffff612e8c16565b81612b6957fe5b0590529392505050565b612b7b612f71565b8151835112612b8a5781611283565b5090919050565b612b99612f71565b8151835113612b8a5781611283565b612bb0612f71565b604080516020810190915282518451829161280f919063ffffffff612ef716565b612bd9612f71565b604080516020810190915282518451829190612b62906b033b2e3c9fd0803ce800000063ffffffff612e8c16565b600080821215612c1c5781600003905061053f565b508061053f565b600061128383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612f3d565b6000816101a0015160011415612c985781610200015115612c985760405162461bcd60e51b815260040161043590613e26565b8161020001511580612cad5750816102200151155b15612cba57506001611286565b82518051600090612cc757fe5b60200260200101516001600160a01b03168360200151600081518110612ce957fe5b60200260200101516001600160a01b031614158015612d21575081600001516001600160a01b031682606001516001600160a01b0316145b8015612d46575081602001516001600160a01b031682608001516001600160a01b0316145b8015612d6b575081604001516001600160a01b03168260a001516001600160a01b0316145b8015612d7f57508160e00151826101400151145b80156112835750816101c001511515826101e00151151514905092915050565b610240810151600090600190612db6579050611286565b82610220015115612df9578360400151600081518110612dd257fe5b60200260200101516001600160a01b031683604001516001600160a01b0316149050611283565b82610200015115611283578360400151600081518110612e1557fe5b60200260200101516001600160a01b03168360a001516001600160a01b0316149050905092915050565b6000818303818312801590612e545750838113155b80612e695750600083128015612e6957508381135b6112835760405162461bcd60e51b815260040161043590614292565b5190511490565b600082612e9b57506000611286565b82600019148015612eaf5750600160ff1b82145b15612ecc5760405162461bcd60e51b815260040161043590613ffd565b82820282848281612ed957fe5b05146112835760405162461bcd60e51b815260040161043590613ffd565b6000828201818312801590612f0c5750838112155b80612f215750600083128015612f2157508381125b6112835760405162461bcd60e51b815260040161043590613cbf565b60008183612f5e5760405162461bcd60e51b815260040161043591906138ca565b50828481612f6857fe5b06949350505050565b6040518060200160405280600081525090565b6040805161026081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101829052610220810182905261024081019190915290565b6040518060600160405280613033612f71565b8152602001613040612f71565b815260200161304d612f71565b905290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b600082601f830112613090578081fd5b81356130a361309e8261448d565b614466565b8181529150602080830190848101818402860182018710156130c457600080fd5b60005b848110156130ec5781356130da816144ad565b845292820192908201906001016130c7565b505050505092915050565b60008083601f840112613108578081fd5b50813567ffffffffffffffff81111561311f578182fd5b602083019150836020808302850101111561036157600080fd5b600082601f830112613149578081fd5b813561315761309e8261448d565b81815291506020808301908481018184028601820187101561317857600080fd5b60005b848110156130ec5781358452928201929082019060010161317b565b600060c082840312156131a8578081fd5b6131b260c0614466565b9050813567ffffffffffffffff808211156131cc57600080fd5b6131d885838601613080565b835260208401359150808211156131ee57600080fd5b6131fa85838601613080565b6020840152604084013591508082111561321357600080fd5b61321f85838601613080565b6040840152606084013591508082111561323857600080fd5b61324485838601613139565b6060840152608084013591508082111561325d57600080fd5b61326985838601613139565b608084015260a084013591508082111561328257600080fd5b5061328f84828501613139565b60a08301525092915050565b6000602082840312156132ac578081fd5b8135611283816144ad565b6000602082840312156132c8578081fd5b8151611283816144ad565b600080600080608085870312156132e8578283fd5b84356132f3816144ad565b93506020850135613303816144ad565b92506040850135613313816144ad565b91506060850135613323816144c5565b939692955090935050565b60008060008060008060008060c0898b031215613349578384fd5b8835613354816144ad565b97506020890135613364816144ad565b96506040890135613374816144ad565b95506060890135613384816144c5565b9450608089013567ffffffffffffffff808211156133a0578586fd5b6133ac8c838d016130f7565b909650945060a08b01359150808211156133c4578384fd5b506133d18b828c016130f7565b999c989b5096995094979396929594505050565b600080600080600060a086880312156133fc578081fd5b8535613407816144ad565b94506020860135613417816144ad565b93506040860135613427816144ad565b92506060860135613437816144c5565b949793965091946080013592915050565b60008060008060008060c08789031215613460578182fd5b863561346b816144ad565b9550602087013561347b816144ad565b9450604087013561348b816144ad565b9350606087013561349b816144c5565b9598949750929560808101359460a0909101359350915050565b60008060008060008060c087890312156134cd578182fd5b86516134d8816144ad565b60208801519096506134e9816144ad565b60408801519095506134fa816144ad565b80945050606087015192506080870151915060a087015161351a816144c5565b809150509295509295509295565b60008060008060008060008060006101208a8c031215613546578283fd5b8935613551816144ad565b985060208a0135613561816144ad565b975060408a0135613571816144ad565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a01356135a5816144c5565b809150509295985092959850929598565b600080600080600060a086880312156135cd578283fd5b85356135d8816144ad565b945060208601356135e8816144ad565b935060408601359250606086013591506080860135613606816144c5565b809150509295509295909350565b60008060408385031215613626578182fd5b8235613631816144ad565b946020939093013593505050565b600060208284031215613650578081fd5b8151611283816144c5565b6000806040838503121561366d578182fd5b823567ffffffffffffffff811115613683578283fd5b61368f85828601613197565b95602094909401359450505050565b600080600080608085870312156136b3578182fd5b843567ffffffffffffffff8111156136c9578283fd5b6136d587828801613197565b97602087013597506040870135966060013595509350505050565b600060208284031215613701578081fd5b5035919050565b600060208284031215613719578081fd5b5051919050565b60008060408385031215613732578182fd5b825191506020830151613744816144c5565b809150509250929050565b60008060408385031215613761578182fd5b505080516020909101519092909150565b600080600080600080600060e0888a03121561378c578081fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c08801356137c1816144c5565b8091505092959891949750929550565b6000602082840312156137e2578081fd5b815160ff81168114611283578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152901515606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825269ffffffffffffffffffff16602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156138a65783518352928401929184019160010161388a565b50909695505050505050565b92151583526020830191909152604082015260600190565b6000602080835283518082850152825b818110156138f6578581018301518582016040015282016138da565b818111156139075783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602f908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e60408201526e6f206578706972792076616c75657360881b606082015260800190565b60208082526046908201527f4d617267696e43616c63756c61746f723a2061756374696f6e2074696d65737460408201527f616d702073686f756c6420626520706f7374207661756c74206c61746573742060608201526575706461746560d01b608082015260a00190565b60208082526027908201527f4d617267696e43616c63756c61746f723a20496e76616c696420746f6b656e206040820152666164647265737360c81b606082015260800190565b60208082526028908201527f4d617267696e43616c63756c61746f723a204f746f6b656e206e6f74206578706040820152671a5c9959081e595d60c21b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a206e6f2065787069727920757070656040820152721c88189bdd5b99081d985b1d5948199bdd5b99606a1b606082015260800190565b6020808252602f908201527f4d617267696e43616c63756c61746f723a20696e76616c69642074696d65732060408201526e746f2065787069727920617272617960881b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a206475737420616d6f756e7420736860408201527f6f756c642062652067726561746572207468616e207a65726f00000000000000606082015260800190565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f4d617267696e43616c63756c61746f723a20696e76616c69642076616c75657360408201526520617272617960d01b606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e79206c6f6e67206040820152731bdd1bdad95b9cc81a5b881d1a19481d985d5b1d60621b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a2053686f727420617373657420616e6040820152700c840c2dadeeadce840dad2e6dac2e8c6d607b1b606082015260800190565b6020808252605b908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742073686f756c64206861766520636f6c6c61746572616c20616d6f7560608201527f6e742067726561746572207468616e206475737420616d6f756e740000000000608082015260a00190565b60208082526032908201527f4d617267696e43616c63756c61746f723a20696e76616c6964206f7074696f6e60408201527120757070657220626f756e642076616c756560701b606082015260800190565b6020808252603c908201527f4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207660408201527f61756c742063616e6e6f742068617665206c6f6e67206f746f6b656e00000000606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726963652061742065787069726040820152721e481b9bdd08199a5b985b1a5e9959081e595d606a1b606082015260800190565b6020808252603b908201527f4d617267696e43616c63756c61746f723a206c6f6e67206173736574206e6f7460408201527f206d617267696e61626c6520666f722073686f72742061737365740000000000606082015260800190565b60208082526034908201527f4d617267696e43616c63756c61746f723a2063616e206e6f74206c697175696460408201527330ba329032bc3834b932b2103837b9b4ba34b7b760611b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526041908201527f4d617267696e43616c63756c61746f723a20636f6c6c61746572616c2061737360408201527f6574206e6f74206d617267696e61626c6520666f722073686f727420617373656060820152601d60fa1b608082015260a00190565b60208082526029908201527f4d617267696e43616c63756c61746f723a2074696d652073686f756c642062656040820152681034b71037b93232b960b91b606082015260800190565b60208082526031908201527f4d617267696e43616c63756c61746f723a20696e76616c6964207661756c74206040820152707479706520746f206c697175696461746560781b606082015260800190565b60208082526039908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e7920636f6c6c6160408201527f746572616c2061737365747320696e20746865207661756c7400000000000000606082015260800190565b6020808252602d908201527f4d617267696e43616c63756c61746f723a20757070657220626f756e6420766160408201526c1b1d59481b9bdd08199bdd5b99609a1b606082015260800190565b6020808252602e908201527f4d617267696e43616c63756c61746f723a20657870697279206172726179206960408201526d39903737ba1034b71037b93232b960911b606082015260800190565b60208082526035908201527f4d617267696e43616c63756c61746f723a20546f6f206d616e792073686f7274604082015274081bdd1bdad95b9cc81a5b881d1a19481d985d5b1d605a1b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252602a908201527f4d617267696e43616c63756c61746f723a20696e76616c69642073706f742073604082015269686f636b2076616c756560b01b606082015260800190565b60208082526030908201527f4d617267696e43616c63756c61746f723a204c6f6e6720617373657420616e6460408201526f040c2dadeeadce840dad2e6dac2e8c6d60831b606082015260800190565b60208082526036908201527f4d617267696e43616c63756c61746f723a20436f6c6c61746572616c206173736040820152750cae840c2dcc840c2dadeeadce840dad2e6dac2e8c6d60531b606082015260800190565b60208082526033908201527f4d617267696e43616c63756c61746f723a2070726f647563742068617665206e6040820152726f20757070657220626f756e642076616c756560681b606082015260800190565b9151825251602082015260400190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561448557600080fd5b604052919050565b600067ffffffffffffffff8211156144a3578081fd5b5060209081020190565b6001600160a01b03811681146144c257600080fd5b50565b80151581146144c257600080fdfea2646970667358221220c70ea1831b6f51b2b4c7f97dce8cd8d531cf97e725b7eab345585506696467c164736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x14D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xC73547E3 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xC73547E3 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xCD43FBFB EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0xDC1B3F00 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0xE592301A EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0xE8420631 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x31A JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x958C3234 EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0x9A783D11 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xA101BCA1 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0xA6C56907 EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0xB29D5EE8 EQ PUSH2 0x2B0 JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x6CCB9506 GT PUSH2 0x115 JUMPI DUP1 PUSH4 0x6CCB9506 EQ PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x7AD7F800 EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x7F519B72 EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x8AAB8FA5 EQ PUSH2 0x23A JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x53FE57C EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0xB0509FB EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x46345900 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x47840930 EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x47D438A5 EQ PUSH2 0x1C2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x165 PUSH2 0x160 CALLDATASIZE PUSH1 0x4 PUSH2 0x365B JUMP JUMPDEST PUSH2 0x32D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP3 SWAP2 SWAP1 PUSH2 0x4419 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18F PUSH2 0x18A CALLDATASIZE PUSH1 0x4 PUSH2 0x3528 JUMP JUMPDEST PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP2 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1AA CALLDATASIZE PUSH1 0x4 PUSH2 0x32D3 JUMP JUMPDEST PUSH2 0x3E3 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1BD CALLDATASIZE PUSH1 0x4 PUSH2 0x329B JUMP JUMPDEST PUSH2 0x40D JUMP JUMPDEST PUSH2 0x1D5 PUSH2 0x1D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x32D3 JUMP JUMPDEST PUSH2 0x544 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP2 SWAP1 PUSH2 0x386E JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x329B JUMP JUMPDEST PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x5D7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1FD PUSH2 0x20D CALLDATASIZE PUSH1 0x4 PUSH2 0x3448 JUMP JUMPDEST PUSH2 0x656 JUMP JUMPDEST PUSH2 0x21A PUSH2 0x757 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP2 SWAP1 PUSH2 0x37F2 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0x332E JUMP JUMPDEST PUSH2 0x766 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0x33E5 JUMP JUMPDEST PUSH2 0xA3D JUMP JUMPDEST PUSH2 0x21A PUSH2 0xAF6 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x263 CALLDATASIZE PUSH1 0x4 PUSH2 0x3772 JUMP JUMPDEST PUSH2 0xB05 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x276 CALLDATASIZE PUSH1 0x4 PUSH2 0x3614 JUMP JUMPDEST PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x33E5 JUMP JUMPDEST PUSH2 0xC25 JUMP JUMPDEST PUSH2 0x2A1 PUSH2 0x29C CALLDATASIZE PUSH1 0x4 PUSH2 0x369E JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x38B2 JUMP JUMPDEST PUSH2 0x18F PUSH2 0xF21 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x36F0 JUMP JUMPDEST PUSH2 0xF27 JUMP JUMPDEST PUSH2 0x2DE PUSH2 0x2D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x365B JUMP JUMPDEST PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x173 SWAP3 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x33E5 JUMP JUMPDEST PUSH2 0x10B6 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x10EB JUMP JUMPDEST PUSH2 0x18F PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x35B6 JUMP JUMPDEST PUSH2 0x10F1 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x328 CALLDATASIZE PUSH1 0x4 PUSH2 0x329B JUMP JUMPDEST PUSH2 0x1116 JUMP JUMPDEST PUSH2 0x335 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x33D PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x345 PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0x34F DUP6 DUP6 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH2 0x35B DUP6 DUP3 PUSH2 0x16BE JUMP JUMPDEST SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x377 DUP12 DUP12 DUP12 DUP7 PUSH2 0x1B73 JUMP JUMPDEST SWAP1 POP PUSH2 0x381 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x38C DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x396 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x3A1 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x3AB PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x3B6 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x3D1 PUSH2 0x3C9 DUP6 DUP6 DUP5 DUP7 DUP14 DUP13 PUSH2 0x1BAC JUMP JUMPDEST DUP9 PUSH1 0x0 PUSH2 0x1D32 JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3F2 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x43E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x450 DUP9 PUSH2 0x1E05 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP DUP2 TIMESTAMP LT ISZERO PUSH2 0x47C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3A1F JUMP JUMPDEST PUSH2 0x484 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x491 DUP7 DUP7 DUP6 DUP8 DUP7 PUSH2 0x2157 JUMP JUMPDEST SWAP1 POP PUSH2 0x49B PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x4A7 DUP3 DUP8 DUP11 DUP8 PUSH2 0x21B8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x51C SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH2 0x533 DUP3 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1D32 AND JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x554 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5AC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x598 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP 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 SWAP1 JUMP JUMPDEST PUSH2 0x5DF PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x60C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x65E PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x6AB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B9 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x41A2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x39BAB32D3B88604BDFBF6E8C3B1AAAF9BB6013DA4FD5206DEE9E3B00EE6F2CF9 SWAP1 PUSH2 0x745 SWAP1 DUP8 SWAP1 DUP6 SWAP1 DUP9 SWAP1 PUSH2 0x4450 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x76E PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x79B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST DUP3 PUSH2 0x7B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3ABA JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x7D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E5 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP SWAP1 ISZERO DUP1 PUSH2 0x840 JUMPI POP DUP1 SLOAD DUP2 SWAP1 PUSH2 0x815 SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x81F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x837 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT JUMPDEST PUSH2 0x85C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x41EF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0xA30 JUMPI DUP6 PUSH2 0x879 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2348 AND JUMP JUMPDEST LT ISZERO PUSH2 0x8D2 JUMPI DUP7 DUP7 PUSH2 0x892 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2348 AND JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x89B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x8AE JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD LT PUSH2 0x8D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x40AB JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x8E0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD GT PUSH2 0x904 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x910 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x5 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 DUP10 DUP6 DUP2 DUP2 LT PUSH2 0x938 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x95E JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP5 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 SWAP3 ADD SSTORE POP DUP3 PUSH32 0xCAAE9881BD3AC6F531C9E6021F1F873B93A83648E348624EEF8F9BA9757FCB62 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x9AE JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x9C2 SWAP2 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 PUSH32 0xCBB8D688DE73727385AFEE9D53A2771AE5FE45293FF6DE0BA46B201AB29DF115 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x9F8 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0xA0B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0xA20 SWAP3 SWAP2 SWAP1 PUSH2 0x4442 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x85F JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xA45 PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xA72 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xA92 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x42D6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAA0 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0x78D22B4A9E4E0E1DB30E7762696456CA380DC80EFC59F416A299B97213B6D316 SWAP1 PUSH2 0xAE6 SWAP1 DUP6 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB19 DUP10 DUP6 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB23 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB2E DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB38 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB43 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB4D PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xB58 DUP10 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xB69 DUP5 DUP5 DUP5 DUP5 DUP13 DUP13 DUP13 PUSH2 0x236D JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB81 PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xBAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xBCE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3B4F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x8EF429E6CEC4339C5F0187FB930764FB967114BF09BC8BB06A552BA32923FD86 SWAP1 PUSH2 0xC19 SWAP1 DUP5 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xC3F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0xC6D PUSH2 0xC64 DUP3 DUP6 PUSH2 0x24B5 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x0 PUSH2 0x1D32 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 PUSH1 0x1 EQ PUSH2 0xC9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x40F4 JUMP JUMPDEST PUSH2 0xCA5 PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0xCAF DUP9 DUP9 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x220 ADD MLOAD PUSH2 0xCCB JUMPI POP PUSH1 0x0 SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP PUSH2 0xF17 JUMP JUMPDEST DUP1 PUSH1 0xE0 ADD MLOAD TIMESTAMP LT PUSH2 0xCEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3F33 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1B85462D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x1B85462D SWAP2 PUSH2 0xD25 SWAP2 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x3849 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD74 SWAP2 SWAP1 PUSH2 0x374F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP8 DUP2 GT PUSH2 0xD97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x396C JUMP JUMPDEST PUSH2 0xD9F PUSH2 0x3020 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0xDCD DUP14 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDBE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDE1 DUP7 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF1 DUP6 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0xE15 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1B73 JUMP JUMPDEST SWAP1 POP PUSH2 0xE1F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xE46 DUP14 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE33 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH2 0x180 ADD MLOAD PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0xE50 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xE73 DUP4 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1BAC JUMP JUMPDEST SWAP1 POP PUSH2 0xE85 DUP2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2620 AND JUMP JUMPDEST ISZERO PUSH2 0xEA1 JUMPI POP PUSH1 0x0 SWAP9 POP DUP9 SWAP8 POP DUP8 SWAP7 POP PUSH2 0xF17 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEA9 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0xEC1 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP11 PUSH2 0x1C0 ADD MLOAD PUSH2 0x2628 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEE6 DUP5 DUP8 PUSH1 0x0 ADD MLOAD DUP5 DUP10 PUSH1 0x40 ADD MLOAD DUP12 DUP15 PUSH2 0x180 ADD MLOAD DUP16 PUSH2 0x1C0 ADD MLOAD PUSH2 0x236D JUMP JUMPDEST PUSH1 0x40 SWAP10 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE SWAP10 SWAP1 SWAP10 KECCAK256 SLOAD PUSH1 0x1 SWAP13 POP SWAP9 SWAP11 POP SWAP8 SWAP9 POP POP POP POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xF2F PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xF5C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE44C6DD1FC3826AD24B81F17CF04849CEDD368E002A52E89A845D14D3474E20A SWAP1 PUSH2 0xF91 SWAP1 DUP4 SWAP1 PUSH2 0x4429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFA7 PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0xFB1 DUP6 DUP6 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH2 0xFBD DUP6 DUP3 PUSH2 0x26AF JUMP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0xFD3 JUMPI POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x1013 JUMPI PUSH1 0x0 DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xFEB JUMPI PUSH1 0x0 PUSH2 0x1005 JUMP JUMPDEST DUP6 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xFFC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH2 0x361 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x101B PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1023 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x102D DUP8 DUP5 PUSH2 0x16BE JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1039 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1049 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1070 SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2818 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH2 0x200 ADD MLOAD PUSH2 0x1089 JUMPI DUP6 PUSH2 0x100 ADD MLOAD PUSH2 0x1090 JUMP JUMPDEST DUP6 PUSH2 0x160 ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x10A5 DUP5 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1D32 AND JUMP JUMPDEST SWAP12 SWAP3 SWAP11 POP SWAP2 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10C5 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1B73 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE10 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x110C PUSH2 0x1103 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x2157 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x1 PUSH2 0x1D32 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x111E PUSH2 0x2344 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x114B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FC8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3B09 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 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 PUSH2 0x11D4 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x11DC PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x1B DUP4 EQ ISZERO PUSH2 0x1202 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x11F9 DUP7 PUSH2 0x128C JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x1B DUP4 GT ISZERO PUSH2 0x1254 JUMPI PUSH1 0x0 PUSH2 0x121E DUP5 PUSH1 0x1B PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1249 PUSH2 0x1244 DUP5 PUSH1 0xA EXP DUP10 PUSH2 0x12F7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x128C JUMP JUMPDEST DUP2 MSTORE POP SWAP2 POP POP PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1B DUP5 SWAP1 SUB SWAP1 DUP1 PUSH2 0x127D PUSH2 0x1244 DUP9 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x1339 AND JUMP JUMPDEST SWAP1 MSTORE SWAP2 POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH2 0x12B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3BAC JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1283 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x2820 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1283 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x284C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1348 JUMPI POP PUSH1 0x0 PUSH2 0x1286 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1355 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3F87 JUMP JUMPDEST PUSH2 0x137B PUSH2 0x2F84 JUMP JUMPDEST PUSH2 0x1383 PUSH2 0x2F84 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1C0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1E0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x220 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x240 DUP3 ADD MSTORE SWAP1 DUP5 ADD MLOAD PUSH2 0x1428 SWAP1 PUSH2 0x2883 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x200 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x143B SWAP1 PUSH2 0x2883 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1451 SWAP1 PUSH2 0x2883 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP4 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO PUSH2 0x153F JUMPI PUSH1 0x0 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x147F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x1492 DUP2 PUSH2 0x1E05 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1E0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD MSTORE PUSH2 0x120 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP7 ADD MSTORE SWAP1 DUP2 AND PUSH1 0x60 DUP6 ADD MSTORE AND PUSH1 0xA0 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1510 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1534 SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x160 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x161A JUMPI PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x155D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x1570 DUP2 PUSH2 0x1E05 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP2 AND DUP6 MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x40 DUP1 DUP6 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x160F SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x100 DUP4 ADD MSTORE POP JUMPDEST DUP1 PUSH2 0x240 ADD MLOAD ISZERO PUSH2 0x1283 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1636 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x168A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16AE SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x180 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x16C6 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x16CE PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x16D6 PUSH2 0x2F71 JUMP JUMPDEST DUP4 PUSH2 0x220 ADD MLOAD PUSH2 0x16F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1709 JUMP JUMPDEST PUSH2 0x1709 DUP6 PUSH1 0x60 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDBE JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1713 PUSH2 0x2F71 JUMP JUMPDEST DUP5 PUSH2 0x200 ADD MLOAD PUSH2 0x1732 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1746 JUMP JUMPDEST PUSH2 0x1746 DUP7 PUSH1 0x80 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDBE JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1750 PUSH2 0x2F71 JUMP JUMPDEST DUP6 PUSH2 0x240 ADD MLOAD PUSH2 0x176F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1783 JUMP JUMPDEST PUSH2 0x1783 DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE33 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x178D PUSH2 0x2F71 JUMP JUMPDEST DUP7 PUSH2 0x220 ADD MLOAD PUSH2 0x17AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x17BB JUMP JUMPDEST PUSH2 0x17BB DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x17C5 PUSH2 0x3052 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x17E4 JUMPI DUP10 PUSH1 0x60 ADD MLOAD PUSH2 0x17E7 JUMP JUMPDEST DUP10 MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1809 JUMPI DUP10 PUSH1 0xA0 ADD MLOAD PUSH2 0x180F JUMP JUMPDEST DUP10 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x1831 JUMPI DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x1837 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x185A JUMPI DUP10 PUSH2 0x140 ADD MLOAD PUSH2 0x1860 JUMP JUMPDEST DUP10 PUSH1 0xE0 ADD MLOAD JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x220 ADD MLOAD PUSH2 0x187A JUMPI DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1881 JUMP JUMPDEST DUP10 PUSH2 0x1C0 ADD MLOAD JUMPDEST ISZERO ISZERO DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x60 ADD MLOAD TIMESTAMP LT ISZERO PUSH2 0x1AAE JUMPI DUP8 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x1A07 JUMPI PUSH2 0x18AA PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP11 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x18D5 SWAP2 SWAP1 PUSH2 0x11CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH2 0x18F9 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST ISZERO PUSH2 0x192A JUMPI PUSH2 0x190E DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST PUSH2 0x192A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3D51 JUMP JUMPDEST PUSH2 0x1932 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP11 MLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x19BC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x41976E09 SWAP2 PUSH2 0x1965 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x37F2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19B5 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x19DD DUP12 PUSH1 0x0 ADD MLOAD DUP13 PUSH1 0x20 ADD MLOAD DUP14 PUSH1 0x40 ADD MLOAD DUP15 PUSH2 0x1C0 ADD MLOAD PUSH2 0x1B73 JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x19F6 DUP3 DUP11 DUP6 DUP10 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD PUSH2 0x1BAC JUMP JUMPDEST SWAP10 POP SWAP10 POP POP POP POP POP POP POP POP POP PUSH2 0x361 JUMP JUMPDEST PUSH2 0x1A0F PUSH2 0x2F71 JUMP JUMPDEST DUP9 PUSH2 0x200 ADD MLOAD PUSH2 0x1A2E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x1A3E DUP10 PUSH2 0x120 ADD MLOAD PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0x1A84 JUMPI PUSH2 0x1A52 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1A5E DUP8 DUP8 DUP7 DUP6 PUSH2 0x28C8 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x1A74 DUP3 DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2915 JUMP JUMPDEST SWAP9 POP SWAP9 POP POP POP POP POP POP POP POP PUSH2 0x361 JUMP JUMPDEST PUSH2 0x1A8C PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1A98 DUP8 DUP8 DUP7 DUP6 PUSH2 0x2A70 JUMP JUMPDEST SWAP1 POP DUP5 PUSH2 0x1A74 DUP3 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2915 JUMP JUMPDEST PUSH2 0x1AB6 PUSH2 0x2F71 JUMP JUMPDEST DUP9 PUSH2 0x220 ADD MLOAD PUSH2 0x1AD5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x1AF6 DUP10 PUSH1 0x0 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH1 0xC0 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0x2157 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B00 PUSH2 0x2F71 JUMP JUMPDEST DUP10 PUSH2 0x200 ADD MLOAD PUSH2 0x1B1F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1B42 JUMP JUMPDEST PUSH2 0x1B42 DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0x80 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2157 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B4C PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1B58 DUP9 DUP9 DUP6 DUP6 PUSH2 0x2B01 JUMP JUMPDEST SWAP1 POP DUP6 PUSH2 0x19F6 DUP3 DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x21B8 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B8C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1BB4 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1BBC PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1BC6 DUP9 DUP6 PUSH2 0x24B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x1BD0 PUSH2 0x2F71 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 MSTORE PUSH2 0x1BF5 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1BFD PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1C05 PUSH2 0x2F71 JUMP JUMPDEST DUP7 ISZERO PUSH2 0x1C97 JUMPI PUSH2 0x1C24 DUP10 PUSH2 0x1C1F DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2B73 JUMP JUMPDEST SWAP3 POP PUSH2 0x1C5E PUSH2 0x1C49 PUSH2 0x1C3C DUP7 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP12 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2B91 JUMP JUMPDEST SWAP2 POP PUSH2 0x1C90 DUP12 PUSH2 0x1C84 DUP5 PUSH2 0x1C78 DUP10 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2BA8 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1D23 JUMP JUMPDEST PUSH2 0x1C9F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x1CB6 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x1B PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x1CDC DUP2 PUSH2 0x1C1F DUP14 PUSH2 0x1CD0 DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2BD1 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1D05 PUSH2 0x1C49 PUSH2 0x1CF8 DUP14 PUSH2 0x1CD0 DUP15 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP3 POP PUSH2 0x1D1F DUP13 PUSH2 0x1C84 DUP6 PUSH2 0x1C78 DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1B DUP5 EQ ISZERO PUSH2 0x1D50 JUMPI DUP5 MLOAD PUSH2 0x1D49 SWAP1 PUSH2 0x2C07 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DFB JUMP JUMPDEST PUSH1 0x1B DUP5 GT ISZERO PUSH2 0x1D89 JUMPI PUSH1 0x0 PUSH1 0x1B DUP6 SUB SWAP1 POP PUSH2 0x1D81 DUP2 PUSH1 0xA EXP PUSH2 0x1D75 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1339 AND JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1DFB JUMP JUMPDEST PUSH1 0x1B DUP5 SWAP1 SUB PUSH1 0x0 DUP5 PUSH2 0x1DC6 JUMPI PUSH1 0x0 PUSH2 0x1DB7 DUP4 PUSH1 0xA EXP PUSH2 0x1DAB DUP11 PUSH1 0x0 ADD MLOAD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2C23 AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1DC4 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x1DF6 DUP2 PUSH2 0x1DEA DUP5 PUSH1 0xA EXP PUSH2 0x1DDE DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x12F7 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2348 AND JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAF0968FC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1E7C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1E79 SWAP2 DUP2 ADD SWAP1 PUSH2 0x34B5 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x2138 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAABAECD6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ECD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EF1 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7158DA7C 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F62 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D69BC8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FD3 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC52987CF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x200C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2020 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2044 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xADE6E2AA 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x207D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2091 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20B5 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF3C274A6 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2102 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2126 SWAP2 SWAP1 PUSH2 0x363F JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP POP PUSH2 0x214E JUMP JUMPDEST SWAP5 SWAP12 POP SWAP3 SWAP10 POP SWAP1 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH2 0x214E SWAP1 POP JUMP JUMPDEST SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x215F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2167 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2172 DUP5 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x217C PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2188 PUSH1 0x1 PUSH1 0x0 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x2192 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x219E DUP3 DUP11 DUP11 DUP11 PUSH2 0x21B8 JUMP JUMPDEST SWAP1 POP PUSH2 0x21AB DUP4 DUP3 DUP8 PUSH2 0x2628 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x21C0 PUSH2 0x2F71 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x21E1 JUMPI POP DUP4 PUSH2 0x405 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x2218 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x3830 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x222F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2243 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2267 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1957F81 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1957F81 SWAP1 PUSH2 0x22A2 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x3830 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22F1 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 DUP1 ISZERO PUSH2 0x22FF JUMPI POP DUP1 JUMPDEST PUSH2 0x231B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3E83 JUMP JUMPDEST PUSH2 0x21AB PUSH2 0x2329 DUP4 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST PUSH2 0x1CD0 PUSH2 0x2337 DUP8 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP13 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3BEE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2377 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x237F PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x238F DUP11 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x2BD1 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23A3 TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xE10 DUP2 LT PUSH2 0x23B6 JUMPI DUP2 SWAP3 POP PUSH2 0x24A3 JUMP JUMPDEST PUSH2 0x23BE PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x23C6 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x23D3 PUSH1 0x1 SLOAD PUSH1 0x1B PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP DUP7 ISZERO PUSH2 0x2405 JUMPI PUSH2 0x23FE PUSH2 0x1C49 PUSH2 0x23F1 DUP4 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP14 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP2 POP PUSH2 0x242F JUMP JUMPDEST PUSH2 0x242C DUP11 PUSH2 0x1CD0 PUSH2 0x1C49 PUSH2 0x241F DUP6 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST DUP16 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x2438 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2443 DUP4 PUSH1 0x12 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x244D PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x245A PUSH2 0xE10 PUSH1 0x12 PUSH2 0x11CC JUMP JUMPDEST SWAP1 POP PUSH2 0x2484 PUSH2 0x2477 DUP3 PUSH2 0x1CD0 DUP6 PUSH2 0x1C84 DUP11 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2BA8 AND JUMP JUMPDEST SWAP6 POP PUSH2 0x2496 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST ISZERO PUSH2 0x249F JUMPI DUP5 SWAP6 POP JUMPDEST POP POP POP JUMPDEST PUSH2 0x1D23 DUP4 DUP8 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1D32 AND JUMP JUMPDEST PUSH2 0x24BD PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2513 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x24FF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x253C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x391D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x254E DUP5 TIMESTAMP PUSH4 0xFFFFFFFF PUSH2 0x12B5 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 PUSH2 0x2567 PUSH1 0x1 DUP6 MLOAD PUSH2 0x12B5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2571 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x2597 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x43C6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 PUSH1 0xFF AND LT ISZERO PUSH2 0x2617 JUMPI DUP2 DUP4 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x25B6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT PUSH2 0x260F JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 MLOAD PUSH2 0x2605 SWAP3 SWAP1 DUP7 SWAP1 PUSH1 0xFF DUP7 AND SWAP1 DUP2 LT PUSH2 0x25E7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1B PUSH2 0x11CC JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x259A JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2630 PUSH2 0x2F71 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2676 JUMPI PUSH2 0x2646 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST PUSH2 0x265F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x266F JUMP JUMPDEST PUSH2 0x266F DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1DFE JUMP JUMPDEST PUSH2 0x2686 DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x28C1 AND JUMP JUMPDEST PUSH2 0x269F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x1DFB JUMP JUMPDEST PUSH2 0x1DFB DUP4 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST DUP2 MLOAD MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x26D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x423D JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x20 ADD MLOAD MLOAD GT ISZERO PUSH2 0x26F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3C6B JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x40 ADD MLOAD MLOAD GT ISZERO PUSH2 0x271E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4145 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD MLOAD DUP3 MLOAD MLOAD EQ PUSH2 0x2744 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3D00 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD MLOAD DUP3 PUSH1 0x20 ADD MLOAD MLOAD EQ PUSH2 0x276D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4320 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD MLOAD DUP3 PUSH1 0x40 ADD MLOAD MLOAD EQ PUSH2 0x2796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4370 JUMP JUMPDEST PUSH2 0x27A0 DUP3 DUP3 PUSH2 0x2C65 JUMP JUMPDEST PUSH2 0x27BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3ED6 JUMP JUMPDEST PUSH2 0x27C6 DUP3 DUP3 PUSH2 0x2D9F JUMP JUMPDEST PUSH2 0x27E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4044 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x27EE PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x280F SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2E3F AND JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x2844 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP2 SWAP1 PUSH2 0x38CA JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x286D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP2 SWAP1 PUSH2 0x38CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2879 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x1286 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x28A8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT SWAP1 JUMP JUMPDEST PUSH2 0x28D0 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x290C PUSH2 0x1C49 PUSH2 0x28F0 PUSH2 0x28E3 DUP9 DUP9 PUSH2 0x2B73 JUMP JUMPDEST DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2900 DUP9 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x291D PUSH2 0x2F71 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x293E JUMPI POP DUP3 PUSH2 0x1DFE JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x296F SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x37F2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x299B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29BF SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41976E09 SWAP1 PUSH2 0x29F5 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x37F2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A21 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A45 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST SWAP1 POP PUSH2 0x110C PUSH2 0x2A55 DUP3 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST PUSH2 0x1CD0 PUSH2 0x2A63 DUP6 PUSH1 0x8 PUSH2 0x11CC JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2A78 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 SLOAD DUP2 MSTORE PUSH2 0x2A99 SWAP1 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2E85 AND JUMP JUMPDEST ISZERO PUSH2 0x2AB8 JUMPI PUSH2 0x2AB1 PUSH2 0x1C49 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x405 JUMP JUMPDEST PUSH2 0x2AC0 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2AD8 DUP4 PUSH2 0x1CD0 DUP9 PUSH2 0x1C84 DUP4 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x2AE2 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x2AF5 PUSH2 0x1C49 DUP9 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x27E6 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xC6D DUP3 DUP3 PUSH2 0x2B91 JUMP JUMPDEST PUSH2 0x2B09 PUSH2 0x2F71 JUMP JUMPDEST PUSH2 0x290C PUSH2 0x2B1C DUP4 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2900 DUP6 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x2B2C AND JUMP JUMPDEST PUSH2 0x2B34 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 PUSH2 0x2B62 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x2E8C AND JUMP JUMPDEST DUP2 PUSH2 0x2B69 JUMPI INVALID JUMPDEST SDIV SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2B7B PUSH2 0x2F71 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SLT PUSH2 0x2B8A JUMPI DUP2 PUSH2 0x1283 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B99 PUSH2 0x2F71 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SGT PUSH2 0x2B8A JUMPI DUP2 PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x2BB0 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x280F SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2EF7 AND JUMP JUMPDEST PUSH2 0x2BD9 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 SWAP1 PUSH2 0x2B62 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x2E8C AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x2C1C JUMPI DUP2 PUSH1 0x0 SUB SWAP1 POP PUSH2 0x53F JUMP JUMPDEST POP DUP1 PUSH2 0x53F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1283 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206D6F64756C6F206279207A65726F0000000000000000 DUP2 MSTORE POP PUSH2 0x2F3D JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1A0 ADD MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x2C98 JUMPI DUP2 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x2C98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3E26 JUMP JUMPDEST DUP2 PUSH2 0x200 ADD MLOAD ISZERO DUP1 PUSH2 0x2CAD JUMPI POP DUP2 PUSH2 0x220 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2CBA JUMPI POP PUSH1 0x1 PUSH2 0x1286 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2CC7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CE9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2D21 JUMPI POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2D46 JUMPI POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2D6B JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x2D7F JUMPI POP DUP2 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x140 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0x1283 JUMPI POP DUP2 PUSH2 0x1C0 ADD MLOAD ISZERO ISZERO DUP3 PUSH2 0x1E0 ADD MLOAD ISZERO ISZERO EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x240 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2DB6 JUMPI SWAP1 POP PUSH2 0x1286 JUMP JUMPDEST DUP3 PUSH2 0x220 ADD MLOAD ISZERO PUSH2 0x2DF9 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2DD2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x1283 JUMP JUMPDEST DUP3 PUSH2 0x200 ADD MLOAD ISZERO PUSH2 0x1283 JUMPI DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E15 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2E54 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x2E69 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2E69 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x4292 JUMP JUMPDEST MLOAD SWAP1 MLOAD EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E9B JUMPI POP PUSH1 0x0 PUSH2 0x1286 JUMP JUMPDEST DUP3 PUSH1 0x0 NOT EQ DUP1 ISZERO PUSH2 0x2EAF JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ JUMPDEST ISZERO PUSH2 0x2ECC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FFD JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2ED9 JUMPI INVALID JUMPDEST SDIV EQ PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3FFD JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x2F0C JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x2F21 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2F21 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x1283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP1 PUSH2 0x3CBF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2F5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x435 SWAP2 SWAP1 PUSH2 0x38CA JUMP JUMPDEST POP DUP3 DUP5 DUP2 PUSH2 0x2F68 JUMPI INVALID JUMPDEST MOD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x260 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 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 SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x3033 PUSH2 0x2F71 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3040 PUSH2 0x2F71 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x304D PUSH2 0x2F71 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 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 DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3090 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x30A3 PUSH2 0x309E DUP3 PUSH2 0x448D JUMP JUMPDEST PUSH2 0x4466 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x30C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x30EC JUMPI DUP2 CALLDATALOAD PUSH2 0x30DA DUP2 PUSH2 0x44AD JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x30C7 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3108 JUMPI DUP1 DUP2 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x311F JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3149 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3157 PUSH2 0x309E DUP3 PUSH2 0x448D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x3178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x30EC JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x317B JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31A8 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x31B2 PUSH1 0xC0 PUSH2 0x4466 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x31CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31D8 DUP6 DUP4 DUP7 ADD PUSH2 0x3080 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x31EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31FA DUP6 DUP4 DUP7 ADD PUSH2 0x3080 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321F DUP6 DUP4 DUP7 ADD PUSH2 0x3080 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3244 DUP6 DUP4 DUP7 ADD PUSH2 0x3139 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x325D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3269 DUP6 DUP4 DUP7 ADD PUSH2 0x3139 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x328F DUP5 DUP3 DUP6 ADD PUSH2 0x3139 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32AC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1283 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32C8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1283 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x32E8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32F3 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3303 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3313 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3323 DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3349 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3354 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x3364 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3374 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3384 DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x33A0 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x33AC DUP13 DUP4 DUP14 ADD PUSH2 0x30F7 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x33C4 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x33D1 DUP12 DUP3 DUP13 ADD PUSH2 0x30F7 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x33FC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3407 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3417 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3427 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3437 DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3460 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x346B DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x347B DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x348B DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x349B DUP2 PUSH2 0x44C5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x34CD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH2 0x34D8 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x34E9 DUP2 PUSH2 0x44AD JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH2 0x34FA DUP2 PUSH2 0x44AD JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x351A DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x3546 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH2 0x3551 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD PUSH2 0x3561 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH2 0x3571 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x100 DUP11 ADD CALLDATALOAD PUSH2 0x35A5 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x35CD JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x35D8 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x35E8 DUP2 PUSH2 0x44AD JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3606 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3626 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3631 DUP2 PUSH2 0x44AD 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 0x3650 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1283 DUP2 PUSH2 0x44C5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x366D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3683 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x368F DUP6 DUP3 DUP7 ADD PUSH2 0x3197 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x36B3 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x36C9 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x36D5 DUP8 DUP3 DUP9 ADD PUSH2 0x3197 JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3701 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3719 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3732 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3744 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3761 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x378C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0x37C1 DUP2 PUSH2 0x44C5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37E2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1283 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x40 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 0x38A6 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x388A JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x38F6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x38DA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3907 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x6F206578706972792076616C756573 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x46 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2061756374696F6E2074696D657374 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x616D702073686F756C6420626520706F7374207661756C74206C617465737420 PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x757064617465 PUSH1 0xD0 SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20496E76616C696420746F6B656E20 PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x61646472657373 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204F746F6B656E206E6F7420657870 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1A5C9959081E595D PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E6F206578706972792075707065 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1C88189BDD5B99081D985B1D5948199BDD5B99 PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642074696D657320 PUSH1 0x40 DUP3 ADD MSTORE PUSH15 0x746F20657870697279206172726179 PUSH1 0x88 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206475737420616D6F756E74207368 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6F756C642062652067726561746572207468616E207A65726F00000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642076616C756573 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x206172726179 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E79206C6F6E6720 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x1BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x62 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2053686F727420617373657420616E PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0xC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x7B SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742073686F756C64206861766520636F6C6C61746572616C20616D6F75 PUSH1 0x60 DUP3 ADD MSTORE PUSH32 0x6E742067726561746572207468616E206475737420616D6F756E740000000000 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964206F7074696F6E PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x20757070657220626F756E642076616C7565 PUSH1 0x70 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3C SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206E616B6564206D617267696E2076 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61756C742063616E6E6F742068617665206C6F6E67206F746F6B656E00000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A207072696365206174206578706972 PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x1E481B9BDD08199A5B985B1A5E9959081E595D PUSH1 0x6A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3B SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206C6F6E67206173736574206E6F74 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x206D617267696E61626C6520666F722073686F72742061737365740000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2063616E206E6F74206C6971756964 PUSH1 0x40 DUP3 ADD MSTORE PUSH20 0x30BA329032BC3834B932B2103837B9B4BA34B7B7 PUSH1 0x61 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206D756C7469706C69636174696F6E206F PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x766572666C6F77 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x41 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20636F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6574206E6F74206D617267696E61626C6520666F722073686F72742061737365 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2074696D652073686F756C64206265 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x1034B71037B93232B9 PUSH1 0xB9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C6964207661756C7420 PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0x7479706520746F206C6971756964617465 PUSH1 0x78 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x39 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E7920636F6C6C61 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746572616C2061737365747320696E20746865207661756C7400000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20757070657220626F756E64207661 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1B1D59481B9BDD08199BDD5B99 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A206578706972792061727261792069 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x39903737BA1034B71037B93232B9 PUSH1 0x91 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x35 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20546F6F206D616E792073686F7274 PUSH1 0x40 DUP3 ADD MSTORE PUSH21 0x81BDD1BDAD95B9CC81A5B881D1A19481D985D5B1D PUSH1 0x5A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20696E76616C69642073706F742073 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x686F636B2076616C7565 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x30 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A204C6F6E6720617373657420616E64 PUSH1 0x40 DUP3 ADD MSTORE PUSH16 0x40C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x83 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x36 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A20436F6C6C61746572616C20617373 PUSH1 0x40 DUP3 ADD MSTORE PUSH22 0xCAE840C2DCC840C2DADEEADCE840DAD2E6DAC2E8C6D PUSH1 0x53 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x33 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D617267696E43616C63756C61746F723A2070726F647563742068617665206E PUSH1 0x40 DUP3 ADD MSTORE PUSH19 0x6F20757070657220626F756E642076616C7565 PUSH1 0x68 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP2 MLOAD DUP3 MSTORE MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4485 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x44A3 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x44C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x44C2 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 0xE LOG1 DUP4 SHL PUSH16 0x51B2B4C7F97DCE8CD8D531CF97E725B7 0xEA 0xB3 GASLIMIT PC SSTORE MOD PUSH10 0x6467C164736F6C634300 MOD EXP STOP CALLER ",
+ "sourceMap": "234:1881:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19475:326:2;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12157:1378;;;;;;;;;:::i;:::-;;;;;;;;10899:301;;;;;;;;;:::i;13830:1244::-;;;;;;;;;:::i;9553:327::-;;;;;;;;;:::i;:::-;;;;;;;;9137:121;;;;;;;;;:::i;1717:145:48:-;;;:::i;:::-;;7110:772:2;;;;;;;;;:::i;2683:29::-;;;:::i;:::-;;;;;;;;4884:1811;;;;;;;;;:::i;8214:463::-;;;;;;;;;:::i;1094:77:48:-;;;:::i;1226:887:74:-;;;;;;;;;:::i;4219:271:2:-;;;;;;;;;:::i;801:419:74:-;;;;;;;;;:::i;15936:3223:2:-;;;;;;;;;:::i;:::-;;;;;;;;;;11303:101;;;:::i;8823:162::-;;;;;;;;;:::i;20544:1453::-;;;;;;;;;:::i;:::-;;;;;;;;;10256:359;;;;;;;;;:::i;1088:43::-;;;:::i;366:429:74:-;;;;;;;;;:::i;2011:240:48:-;;;;;;;;;:::i;19475:326:2:-;19602:24;;:::i;:::-;19628;;:::i;:::-;19668:31;;:::i;:::-;19702:36;19719:6;19727:10;19702:16;:36::i;:::-;19668:70;;19755:39;19774:6;19782:11;19755:18;:39::i;:::-;19748:46;;;;;19475:326;;;;;;:::o;12157:1378::-;12492:7;12511:19;12533:58;12549:11;12562:7;12571:11;12584:6;12533:15;:58::i;:::-;12511:80;;12675:36;;:::i;:::-;12714:38;12733:12;1049:1;12714:18;:38::i;:::-;12675:77;;12809:36;;:::i;:::-;12848:38;12867:12;1049:1;12848:18;:38::i;:::-;12809:77;;12953:45;;:::i;:::-;13001:42;13020:16;1049:1;13001:18;:42::i;:::-;12953:90;;13167:361;13201:253;13246:11;13279;13312:20;13354:11;13387:21;13430:6;13201:23;:253::i;:::-;13472:19;13509:5;13167:16;:361::i;:::-;13148:380;12157:1378;-1:-1:-1;;;;;;;;;;;;;;12157:1378:2:o;10899:301::-;11054:7;11073:19;11095:58;11111:11;11124:7;11133:11;11146:6;11095:15;:58::i;:::-;11171:22;;;;:9;:22;;;;;;;-1:-1:-1;;10899:301:2;;;;;;;:::o;13830:1244::-;13900:7;-1:-1:-1;;;;;13927:21:2;;13919:73;;;;-1:-1:-1;;;13919:73:2;;;;;;;;;;;;;;;;;14017:18;14049;14081:19;14114;14147:14;14175:10;14198:26;14216:7;14198:17;:26::i;:::-;14003:221;;;;;;;;;;;;14250:6;14243:3;:13;;14235:66;;;;-1:-1:-1;;;14235:66:2;;;;;;;;;14312:42;;:::i;:::-;14357:143;14391:10;14415:11;14440:6;14460:11;14485:5;14357:20;:143::i;:::-;14312:188;;14511:46;;:::i;:::-;14560:137;14601:17;14632:11;14657:10;14681:6;14560:27;:137::i;:::-;14511:186;;14915:26;14967:10;-1:-1:-1;;;;;14952:35:2;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14944:46;;;-1:-1:-1;15007:60:2;:21;14944:46;15062:4;15007:60;:34;:60;:::i;:::-;15000:67;;;;;;;;;;;13830:1244;;;;:::o;9553:327::-;9712:16;9740:19;9762:58;9778:11;9791:7;9800:11;9813:6;9762:15;:58::i;:::-;9837:36;;;;:23;:36;;;;;;;;;9830:43;;;;;;;;;;;;;;;;;9740:80;;-1:-1:-1;9830:43:2;;;;;9837:36;9830:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9553:327;;;;;;:::o;9137:121::-;-1:-1:-1;;;;;9234:17:2;9208:7;9234:17;;;:4;:17;;;;;;;9137:121::o;1717:145:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:48;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;-1:-1:-1;;;;;;1836:19:48::1;::::0;;1717:145::o;7110:772:2:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;7352:1:2::1;7343:6;:10;7335:73;;;;-1:-1:-1::0;;;7335:73:2::1;;;;;;;;;7419:19;7441:58;7457:11;7470:7;7479:11;7492:6;7441:15;:58::i;:::-;7509:19;7531:35:::0;;;:22:::1;:35;::::0;;;;;;;:50;;;;;;;;;7419:80;;-1:-1:-1;7600:16:2;7592:74:::1;;;;-1:-1:-1::0;;;7592:74:2::1;;;;;;;;;7736:35;::::0;;;:22:::1;:35;::::0;;;;;;;:50;;;;;;;;;;:59;;;7811:64;7759:11;;7811:64:::1;::::0;::::1;::::0;7772:13;;7855:11;;7789:6;;7811:64:::1;;;;;;;;;;1367:1:48;;7110:772:2::0;;;;;;:::o;2683:29::-;;;-1:-1:-1;;;;;2683:29:2;;:::o;4884:1811::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;5139:25:2;5131:85:::1;;;;-1:-1:-1::0;;;5131:85:2::1;;;;;;;;;5234:39:::0;;::::1;5226:90;;;;-1:-1:-1::0;;;5226:90:2::1;;;;;;;;;5355:19;5377:58;5393:11;5406:7;5415:11;5428:6;5377:15;:58::i;:::-;5446:29;5478:36:::0;;;:23:::1;:36;::::0;;;;5717:18;;5355:80;;-1:-1:-1;5478:36:2;5717:23;;5716:89:::1;;-1:-1:-1::0;5778:18:2;;5766:11;;5778:25:::1;::::0;5801:1:::1;5778:25;:22;:25;:::i;:::-;5766:38;;;;;;;;;;;;;;;;5746:14;;5761:1;5746:17;;;;;;;;;;;;;:58;5716:89;5695:182;;;;-1:-1:-1::0;;;5695:182:2::1;;;;;;;;;5893:9;5888:801;5908:25:::0;;::::1;5888:801;;;6023:14:::0;6012:8:::1;:1:::0;6018::::1;6012:8;:5;:8;:::i;:::-;:32;6008:169;;;6092:14:::0;;6107:8:::1;:1:::0;6113::::1;6107:8;:5;:8;:::i;:::-;6092:24;;;;;;;;;;;;;6072:14;;6087:1;6072:17;;;;;;;;;;;;;:44;6064:98;;;;-1:-1:-1::0;;;6064:98:2::1;;;;;;;;;6212:1;6199:7;;6207:1;6199:10;;;;;;;;;;;;;:14;6191:78;;;;-1:-1:-1::0;;;6191:78:2::1;;;;;;;;;6426:7;;6434:1;6426:10;;;;;;;;;;;;;6369:22;:35;6392:11;6369:35;;;;;;;;;;;:54;6405:14;;6420:1;6405:17;;;;;;;;;;;;;6369:54;;;;;;;;;;;:67;;;;6498:11;6515:14;;6530:1;6515:17;;;;;;;6498:35:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;6498:35:2;;;6515:17:::1;6498:35:::0;;;;6515:17;;;::::1;::::0;;;::::1;;6498:35:::0;;;::::1;::::0;-1:-1:-1;6571:11:2;6553:49:::1;6584:14:::0;;6599:1;6584:17;;::::1;;;;;;;;;;;6553:49;;;;;;;;;;;;;;;6635:11;6621:57;6648:14;;6663:1;6648:17;;;;;;;;;;;;;6667:7;;6675:1;6667:10;;;;;;;;;;;;;6621:57;;;;;;;;;;;;;;;;5935:3;;5888:801;;;;1367:1:48;;4884:1811:2::0;;;;;;;;:::o;8214:463::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;8426:1:2::1;8412:11;:15;8404:70;;;;-1:-1:-1::0;;;8404:70:2::1;;;;;;;;;8485:19;8507:58;8523:11;8536:7;8545:11;8558:6;8507:15;:58::i;:::-;8576:22;::::0;;;:9:::1;:22;::::0;;;;;;:36;;;8628:42;8485:80;;-1:-1:-1;8485:80:2;;8628:42:::1;::::0;::::1;::::0;8601:11;;8628:42:::1;;;;;;;;;;1367:1:48;8214:463:2::0;;;;;:::o;1094:77:48:-;1132:7;1158:6;-1:-1:-1;;;;;1158:6:48;1094:77;:::o;1226:887:74:-;1477:7;1496:53;;:::i;:::-;1552:104;1597:16;1627:19;1552:31;:104::i;:::-;1496:160;;1666:47;;:::i;:::-;1716:49;1748:10;1049:1:2;1716:31:74;:49::i;:::-;1666:99;;1775:40;;:::i;:::-;1818:42;1850:3;1049:1:2;1818:31:74;:42::i;:::-;1775:85;;1870:47;;:::i;:::-;1920:49;1952:10;1049:1:2;1920:31:74;:49::i;:::-;1870:99;;1999:107;2013:15;2030:9;2041:2;2045:9;2056:20;2078:19;2099:6;1999:13;:107::i;:::-;1980:126;1226:887;-1:-1:-1;;;;;;;;;;;;1226:887:74:o;4219:271:2:-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;4327:1:2::1;4319:5;:9;4311:79;;;;-1:-1:-1::0;;;4311:79:2::1;;;;;;;;;-1:-1:-1::0;;;;;4401:17:2;::::1;;::::0;;;:4:::1;:17;::::0;;;;;;:25;;;4442:41;::::1;::::0;::::1;::::0;4421:5;;4442:41:::1;;;;;;;;;;4219:271:::0;;:::o;801:419:74:-;997:7;1016:19;1059:11;1072:7;1081:11;1094:6;1048:53;;;;;;;;;;;;;;;;;;;;;;;;;1038:64;;;;;;1016:86;;1120:93;1150:51;1171:11;1184:16;1150:20;:51::i;:::-;1203:2;1207:5;1120:29;:93::i;:::-;1113:100;801:419;-1:-1:-1;;;;;;;801:419:74:o;15936:3223:2:-;16157:4;16175:7;16196;16300:10;16314:1;16300:15;16292:77;;;;-1:-1:-1;;;16292:77:2;;;;;;;;;16380:32;;:::i;:::-;16415:36;16432:6;16440:10;16415:16;:36::i;:::-;16380:71;;16530:12;:21;;;16525:48;;-1:-1:-1;16561:5:2;;-1:-1:-1;16561:5:2;;-1:-1:-1;16561:5:2;;-1:-1:-1;16553:20:2;;16525:48;16598:12;:33;;;16592:3;:39;16584:104;;;;-1:-1:-1;;;16584:104:2;;;;;;;;;16736:6;;16778:33;;16736:115;;-1:-1:-1;;;16736:115:2;;16700:13;;;;-1:-1:-1;;;;;16736:6:2;;;;:28;;:115;;16832:8;;16736:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16699:152;;;;16984:18;16972:9;:30;16951:147;;;;-1:-1:-1;;;16951:147:2;;;;;;;;;17207:38;;:::i;:::-;17248:254;;;;;;;;17294:48;17313:6;:19;;;17333:1;17313:22;;;;;;;;;;;;;;1049:1;17294:18;:48::i;:::-;17248:254;;;;17369:55;17388:12;:29;;;1049:1;17369:18;:55::i;:::-;17248:254;;;;17460:31;17479:5;1049:1;17460:18;:31::i;:::-;17248:254;;;17207:295;;17513:19;17535:199;17564:12;:33;;;17611:12;:29;;;17654:12;:33;;;17701:12;:23;;;17535:15;:199::i;:::-;17513:221;;17830:44;;:::i;:::-;17877:114;17909:6;:24;;;17934:1;17909:27;;;;;;;;;;;;;;17950:12;:31;;;17877:18;:114::i;:::-;17830:161;;18002:43;;:::i;:::-;18048:265;18085:11;18110:12;:24;;;18148:12;:33;;;18195:12;:24;;;18233:12;:33;;;18280:12;:23;;;18048;:265::i;:::-;18002:311;-1:-1:-1;18420:57:2;18002:311;18457:19;18420:57;:36;:57;:::i;:::-;18416:108;;;-1:-1:-1;18501:5:2;;-1:-1:-1;18501:5:2;;-1:-1:-1;18501:5:2;;-1:-1:-1;18493:20:2;;-1:-1:-1;;;;;;18493:20:2;18416:108;18534:34;;:::i;:::-;18571:145;18598:12;:24;;;18636:12;:33;;;18683:12;:23;;;18571:13;:145::i;:::-;18534:182;;18787:17;18807:269;18834:19;18867:12;:24;;;18905:9;18928:12;:33;;;18975:9;18998:12;:31;;;19043:12;:23;;;18807:13;:269::i;:::-;19117:33;;;;;-1:-1:-1;;;;;19112:39:2;;;;;:4;:39;;;;;;;19095:4;;-1:-1:-1;18787:289:2;;-1:-1:-1;19112:39:2;;-1:-1:-1;;;;;;;;;15936:3223:2;;;;;;;;;:::o;11303:101::-;11382:15;;11303:101;:::o;8823:162::-;1308:12:48;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;8900:15:2::1;:28:::0;;;8944:34:::1;::::0;::::1;::::0;::::1;::::0;8918:10;;8944:34:::1;;;;;;;;;;8823:162:::0;:::o;20544:1453::-;20671:7;20680:4;20700:32;;:::i;:::-;20735:36;20752:6;20760:10;20735:16;:36::i;:::-;20700:71;;20849:40;20868:6;20876:12;20849:18;:40::i;:::-;20982:12;:21;;;20981:22;:47;;;;;21008:12;:20;;;21007:21;20981:47;20977:190;;;21044:14;21061:12;:26;;;:60;;21120:1;21061:60;;;21090:6;:24;;;21115:1;21090:27;;;;;;;;;;;;;;21061:60;21044:77;-1:-1:-1;21151:4:2;;-1:-1:-1;21135:21:2;;-1:-1:-1;;21135:21:2;20977:190;21252:41;;:::i;:::-;21295:43;;:::i;:::-;21342:74;21374:6;21394:12;21342:18;:74::i;:::-;21251:165;;;;21426:41;;:::i;:::-;21470:40;:16;21491:18;21470:40;:20;:40;:::i;:::-;21537:43;;;;;;;;;21575:4;21537:43;;;21426:84;;-1:-1:-1;21521:13:2;;21537:43;;21426:84;;21537:43;:37;:43;:::i;:::-;21521:59;;21590:26;21619:12;:20;;;:121;;21704:12;:36;;;21619:121;;;21654:12;:35;;;21619:121;21590:150;-1:-1:-1;21843:32:2;21878:59;:16;21590:150;21928:8;21878:59;:29;:59;:::i;:::-;21843:94;21981:8;;-1:-1:-1;20544:1453:2;;-1:-1:-1;;;;;;;;;20544:1453:2:o;10256:359::-;10441:7;10460:19;10482:58;10498:11;10511:7;10520:11;10533:6;10482:15;:58::i;:::-;10558:35;;;;:22;:35;;;;;;;;:50;;;;;;;;;;-1:-1:-1;;10256:359:2;;;;;;;:::o;1088:43::-;1127:4;1088:43;:::o;366:429:74:-;563:7;601:187;648:82;669:11;682:7;691:16;709:12;723:6;648:20;:82::i;:::-;1049:1:2;770:4:74;601:29;:187::i;:::-;582:206;366:429;-1:-1:-1;;;;;;366:429:74:o;2011:240:48:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:48;;;:22;;;1290:67;;;;-1:-1:-1;;;1290:67:48;;;;;;;;;-1:-1:-1;;;;;2099:22:48;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:48::1;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:48;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;-1:-1:-1;;;;;;2227:17:48::1;-1:-1:-1::0;;;;;2227:17:48;;;::::1;::::0;;;::::1;::::0;;2011:240::o;1493:601:27:-;1571:20;;:::i;:::-;1603:31;;:::i;:::-;549:2;1649:9;:26;1645:415;;;1704:29;;;;;;;;1718:14;:2;:12;:14::i;:::-;1704:29;;1691:42;-1:-1:-1;1645:415:27;;;549:2;1754:9;:25;1750:310;;;1795:11;1809:28;:9;549:2;1809:28;:13;:28;:::i;:::-;1795:42;;1864:44;;;;;;;;1878:29;1879:15;1890:3;1886:2;:7;1879:2;:6;;:15;;;;:::i;:::-;1878:27;:29::i;:::-;1864:44;;;1851:57;;1750:310;;;;2005:44;;;;;;;;;549:2;1953:25;;;;2005:44;2019:29;2020:15;:2;2027;:7;;;2020:15;:6;:15;:::i;2019:29::-;2005:44;;1992:57;-1:-1:-1;;1750:310:27;2077:10;-1:-1:-1;1493:601:27;;;;;:::o;439:162:29:-;492:6;-1:-1:-1;;;518:1:29;:10;510:57;;;;-1:-1:-1;;;510:57:29;;;;;;;;;-1:-1:-1;592:1:29;439:162::o;1362:134:51:-;1420:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;3151:130::-;3209:7;3235:39;3239:1;3242;3235:39;;;;;;;;;;;;;;;;;:3;:39::i;2237:459::-;2295:7;2536:6;2532:45;;-1:-1:-1;2565:1:51;2558:8;;2532:45;2599:5;;;2603:1;2599;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:51;;;;;;;;43398:2408:2;43524:19;;:::i;:::-;43559:32;;:::i;:::-;-1:-1:-1;43594:381:2;;;;;;;;-1:-1:-1;43594:381:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44091:18;;;;44079:31;;:11;:31::i;:::-;44056:54;;:20;;;:54;44156:19;;44144:32;;:11;:32::i;:::-;44120:56;;:21;;;:56;44227:23;;;;44215:36;;:11;:36::i;:::-;44186:65;;:26;;;:65;44262:22;;;:35;;;44358:20;;;;44354:577;;;44394:20;44433:6;:18;;;44452:1;44433:21;;;;;;;;;;;;;;44394:61;;44768:32;44794:4;44768:17;:32::i;:::-;44469:331;;44729:22;;;44469:331;44679:32;;;44469:331;44633:28;;;44469:331;-1:-1:-1;;;;;44469:331:2;;;44587:28;;;44469:331;;;;44537:32;;;44469:331;;44487:32;;;44469:331;;;44860:59;;;-1:-1:-1;;;44860:59:2;;;;:57;;:59;;;;;-1:-1:-1;;44860:59:2;;;;;;;;44469:331;44860:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44852:68;;44814:35;;;:106;-1:-1:-1;44354:577:2;44992:12;:21;;;44988:619;;;45029:21;45069:6;:19;;;45089:1;45069:22;;;;;;;;;;;;;;45029:63;;45411:33;45437:5;45411:17;:33::i;:::-;45106:338;;45371:23;;;45106:338;45320:33;;;45106:338;45273:29;;;45106:338;-1:-1:-1;;;;;45106:338:2;;;45226:29;;;;45106:338;;;;;;;;;;;;;45124:33;;;;45106:338;;;45522:60;;-1:-1:-1;;;45522:60:2;;;;45106:338;;45522:58;;:60;;;;;;;;;;45106:338;45522:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45497:99;;45458:36;;;:138;-1:-1:-1;44988:619:2;45621:12;:26;;;45617:153;;;45720:6;:23;;;45744:1;45720:26;;;;;;;;;;;;;;-1:-1:-1;;;;;45705:51:2;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45697:62;;45663:31;;;:96;:31;43398:2408;-1:-1:-1;;;43398:2408:2:o;24086:6874::-;24229:24;;:::i;:::-;24255;;:::i;:::-;24295:36;;:::i;:::-;24334:13;:22;;;:104;;;;;;;;;;;24434:4;24334:104;;;;;;24371:48;24390:6;:19;;;24410:1;24390:22;;;;;;;24371:48;24295:143;;24448:35;;:::i;:::-;24486:13;:21;;;:102;;;;;;;;;;;24584:4;24486:102;;;;;;24522:47;24541:6;:18;;;24560:1;24541:21;;;;;;;24522:47;24448:140;;24598:41;;:::i;:::-;24642:13;:27;;;:142;;;;;;;;;;;24780:4;24642:142;;;;;;24684:81;24703:6;:24;;;24728:1;24703:27;;;;;;;24684:81;24598:186;;24794:36;;:::i;:::-;24833:13;:22;;;:112;;;;;;;;;;;24941:4;24833:112;;;;;;24870:56;24889:13;:30;;;1049:1;24870:18;:56::i;:::-;24794:151;;25004:34;;:::i;:::-;25041:540;;;;;;;;25068:13;:22;;;:95;;25130:13;:33;;;25068:95;;;25093:34;;25068:95;-1:-1:-1;;;;;25041:540:2;;;;;25177:13;:22;;;:95;;25239:13;:33;;;25177:95;;;25202:13;:34;;;25177:95;-1:-1:-1;;;;;25041:540:2;;;;;25286:13;:22;;;:87;;25344:13;:29;;;25286:87;;;25311:13;:30;;;25286:87;-1:-1:-1;;;;;25041:540:2;;;;;25387:13;:22;;;:95;;25449:13;:33;;;25387:95;;;25412:13;:34;;;25387:95;25041:540;;;;25496:13;:22;;;:75;;25548:13;:23;;;25496:75;;;25521:13;:24;;;25496:75;25041:540;;;;;25004:577;;25602:13;:26;;;25596:3;:32;25592:5362;;;25734:13;:23;;;25761:1;25734:28;25730:3674;;;25968:35;;:::i;:::-;26051:34;;;;;-1:-1:-1;;;;;26046:40:2;;;;;:4;:40;;;;26108:32;;;;26006:152;;26046:40;26006:18;:152::i;:::-;26319:36;;;;;;;;;26350:4;26319:36;;;25968:190;;-1:-1:-1;26319:36:2;;:16;;:36;:30;:36;:::i;:::-;26315:299;;;26412:42;:16;26443:10;26412:42;:30;:42;:::i;:::-;26379:216;;;;-1:-1:-1;;;26379:216:2;;;;;;;;;26695:45;;:::i;:::-;26783:6;;26799:34;;26783:51;;-1:-1:-1;;;26783:51:2;;26743:135;;-1:-1:-1;;;;;26783:6:2;;:15;;:51;;26799:34;26783:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:1;26743:18;:135::i;:::-;26695:183;;26936:19;26958:243;26995:13;:34;;;27051:13;:30;;;27103:13;:34;;;27159:13;:24;;;26958:15;:243::i;:::-;26936:265;;27345:16;27383:299;27432:11;27469;27506:20;27552:11;27589:13;:26;;;27641:13;:19;;;27383:23;:299::i;:::-;27316:384;;;;;;;;;;;;;;25730:3674;27795:35;;:::i;:::-;27833:13;:21;;;:126;;;;;;;;;;;27955:4;27833:126;;;;;;27877:55;27896:13;:29;;;1049:1;27877:18;:55::i;:::-;27795:164;;27982:13;:19;;;27978:1412;;;28025:37;;:::i;:::-;28065:195;28118:11;28155:10;28191:11;28228:10;28065:27;:195::i;:::-;28025:235;;28385:16;28427:219;28482:12;28524:13;:31;;;28585:13;:35;;;28427:25;:219::i;:::-;28352:316;;;;;;;;;;;;;27978:1412;28715:41;;:::i;:::-;28759:196;28813:11;28850:10;28886:11;28923:10;28759:28;:196::i;:::-;28715:240;;29080:16;29122:227;29177:16;29223:13;:35;;;29288:13;:35;;;29122:25;:227::i;25592:5362::-;29529:39;;:::i;:::-;29571:13;:22;;;:359;;;;;;;;;;;29926:4;29571:359;;;;;;29612:295;29654:13;:34;;;29710:13;:30;;;29762:13;:34;;;29818:13;:30;;;29870:13;:19;;;29612:20;:295::i;:::-;29529:401;;29944:38;;:::i;:::-;29985:13;:21;;;:354;;;;;;;;;;;30335:4;29985:354;;;;;;30025:291;30067:13;:33;;;30122:13;:29;;;30173:13;:33;;;30228:13;:29;;;30279:13;:19;;;30025:20;:291::i;:::-;29944:395;;30354:38;;:::i;:::-;30395:160;30439:11;30468:10;30496:14;30528:13;30395:26;:160::i;:::-;30354:201;;30657:16;30691:238;30740:13;30775;:31;;;30828:13;:35;;;30885:13;:26;;;30691:27;:238::i;51056:255::-;51214:7;51261:11;51274:7;51283:11;51296:6;51250:53;;;;;;;;;;;;;;;;;;;;;;;;;51240:64;;;;;;51233:71;;51056:255;;;;;;:::o;32029:1486::-;32326:24;;:::i;:::-;32403:46;;:::i;:::-;32452:57;32473:12;32487:21;32452:20;:57::i;:::-;32403:106;;32613:39;;:::i;:::-;-1:-1:-1;32655:50:2;;;;;;;;;-1:-1:-1;32680:23:2;;;:9;:23;;;;;;;;32655:50;;32716:26;;:::i;:::-;32752;;:::i;:::-;32788:39;;:::i;:::-;32842:6;32838:639;;;32868:59;32876:12;32890:36;:14;32909:16;32890:36;:18;:36;:::i;:::-;32868:7;:59::i;:::-;32864:63;-1:-1:-1;32945:69:2;32953:54;32970:36;:14;32989:16;32970:36;:18;:36;:::i;:::-;32953:12;;:54;:16;:54;:::i;:::-;32945:69;;;;;;;;;33009:4;32945:69;;;:7;:69::i;:::-;32941:73;-1:-1:-1;33045:53:2;33085:12;33045:35;32941:73;33045:28;:21;33071:1;33045:28;:25;:28;:::i;:::-;:32;:35;:32;:35;:::i;:::-;:39;:53;:39;:53;:::i;:::-;33028:70;;32838:639;;;33129:28;;:::i;:::-;33160:40;33179:4;947:2;33160:18;:40::i;:::-;33129:71;-1:-1:-1;33218:68:2;33129:71;33231:54;33268:16;33231:32;:12;33248:14;33231:32;:16;:32;:::i;:::-;:36;:54;:36;:54;:::i;33218:68::-;33214:72;-1:-1:-1;33304:78:2;33312:63;33320:54;33357:16;33320:32;:12;33337:14;33320:32;:16;:32;:::i;:54::-;33312:3;;:63;:7;:63;:::i;33304:78::-;33300:82;-1:-1:-1;33413:53:2;33453:12;33413:35;33300:82;33413:28;:21;33439:1;33413:28;:25;:28;:::i;:53::-;33396:70;;32838:639;;33494:14;32029:1486;-1:-1:-1;;;;;;;;;;;32029:1486:2:o;2444:809:27:-;2580:7;2599:18;549:2;2632:9;:26;2628:591;;;2687:8;;:20;;:18;:20::i;:::-;2674:33;;2628:591;;;549:2;2728:9;:25;2724:495;;;2769:11;549:2;2783:9;:25;2769:39;;2835:35;2866:3;2862:2;:7;2835:22;2836:2;:8;;;2835:20;:22::i;:::-;:26;:35;:26;:35;:::i;:::-;2822:48;;2724:495;;;;549:2;2915:25;;;2901:11;2988:10;2983:151;;3018:16;3037:35;3068:3;3064:2;:7;3037:22;3038:2;:8;;;3037:20;:22::i;:::-;:26;:35;:26;:35;:::i;:::-;3018:54;-1:-1:-1;3094:12:27;;3090:29;;3118:1;3108:11;;3090:29;2983:151;;3160:48;3200:7;3160:35;3191:3;3187:2;:7;3160:22;3161:2;:8;;;3160:20;:22::i;:::-;:26;:35;:26;:35;:::i;:::-;:39;:48;:39;:48;:::i;:::-;3147:61;;2724:495;;;3236:10;-1:-1:-1;2444:809:27;;;;;;:::o;52192:933:2:-;52296:7;52317;52338;52359;52380;52401:4;52430:22;52471:7;52430:49;;52493:6;-1:-1:-1;;;;;52493:23:2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52493:25:2;;;;;;;;-1:-1:-1;;52493:25:2;;;;;;;;;;;;;;;;52489:630;;52878:6;-1:-1:-1;;;;;52878:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52920:6;-1:-1:-1;;;;;52920:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52962:6;-1:-1:-1;;;;;52962:18:2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53000:6;-1:-1:-1;;;;;53000:18:2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53038:6;-1:-1:-1;;;;;53038:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53080:6;-1:-1:-1;;;;;53080:12:2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52853:255;;;;;;;;;;;;;;;52489:630;52737:10;;-1:-1:-1;52749:10:2;;-1:-1:-1;52761:6:2;;-1:-1:-1;52769:11:2;-1:-1:-1;52782:6:2;-1:-1:-1;52790:5:2;-1:-1:-1;52729:67:2;;-1:-1:-1;52729:67:2;52192:933;;;;;;;;:::o;22613:845::-;22811:24;;:::i;:::-;22902:36;;:::i;:::-;22941:38;22960:12;1049:1;22941:18;:38::i;:::-;22902:77;;22989:28;;:::i;:::-;23020:24;23039:1;23042;23020:18;:24::i;:::-;22989:55;;23139:48;;:::i;:::-;23190:184;23231:3;23302:11;23327:7;23348:16;23190:27;:184::i;:::-;23139:235;;23392:59;23406:11;23419:23;23444:6;23392:13;:59::i;:::-;23385:66;22613:845;-1:-1:-1;;;;;;;;;22613:845:2:o;38646:792::-;38829:24;;:::i;:::-;38880:7;-1:-1:-1;;;;;38869:18:2;:7;-1:-1:-1;;;;;38869:18:2;;38865:63;;;-1:-1:-1;38910:7:2;38903:14;;38865:63;38978:6;;:39;;-1:-1:-1;;;38978:39:2;;38938:14;;;;-1:-1:-1;;;;;38978:6:2;;;;:21;;:39;;39000:7;;39009;;38978:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39068:6;;:39;;-1:-1:-1;;;39068:39:2;;38937:80;;-1:-1:-1;38937:80:2;;-1:-1:-1;39028:14:2;;;;-1:-1:-1;;;;;39068:6:2;;:21;;:39;;39090:7;;39099;;39068:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39027:80;;;;39125:15;:34;;;;;39144:15;39125:34;39117:98;;;;-1:-1:-1;;;39117:98:2;;;;;;;;;39348:83;39398:32;39417:6;1049:1;39398:18;:32::i;:::-;39348:45;39360:32;39379:6;1049:1;39360:18;:32::i;:::-;39348:7;;:45;:11;:45;:::i;623:104:46:-;710:10;623:104;:::o;922:176:51:-;980:7;1011:5;;;1034:6;;;;1026:46;;;;-1:-1:-1;;;1026:46:51;;;;;;;;40864:2257:2;41198:7;41289:30;;:::i;:::-;41361:36;;:::i;:::-;41400:32;:16;41421:10;41400:32;:20;:32;:::i;:::-;41361:71;-1:-1:-1;41475:26:2;41504:29;:3;41512:20;41504:29;:7;:29;:::i;:::-;41475:58;;1127:4;41597:18;:34;41593:1459;;41655:11;41647:19;;41593:1459;;;41727:38;;:::i;:::-;41884:45;;:::i;:::-;41932:51;41951:15;;947:2;41932:18;:51::i;:::-;41884:99;;42006:6;42002:282;;;42052:67;42060:52;42075:36;:20;42100:10;42075:36;:24;:36;:::i;:::-;42060:10;;:52;:14;:52;:::i;42052:67::-;42036:83;;42002:282;;;42182:83;42254:10;42182:67;42190:52;42205:36;:20;42254:10;42205:36;:24;:36;:::i;:::-;42190:10;;:52;:14;:52;:::i;42182:83::-;42166:99;;42002:282;41593:1459;42386:53;;:::i;:::-;42442:42;42461:18;42481:2;42442:18;:42::i;:::-;42386:98;;42576:36;;:::i;:::-;42615;1127:4;42648:2;42615:18;:36::i;:::-;42576:75;-1:-1:-1;42784:132:2;42819:83;42576:75;42819:66;42856:28;42820:30;:11;42836:13;42820:30;:15;:30;:::i;42819:83::-;42784:13;;:132;:17;:132;:::i;:::-;42776:140;-1:-1:-1;42988:32:2;42776:140;43008:11;42988:32;:19;:32;:::i;:::-;42984:57;;;43030:11;43022:19;;42984:57;41593:1459;;;;43069:45;:5;43088:19;43109:4;43069:45;:18;:45;:::i;33911:1125::-;34036:24;;:::i;:::-;34166:37;;;;:23;:37;;;;;;;;;34133:70;;;;;;;;;;;;;;;;;:30;;:70;;;34166:37;34133:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34288:13;:20;34312:1;34288:25;;34280:85;;;;-1:-1:-1;;;34280:85:2;;;;;;;;;34376:26;34405:25;:16;34426:3;34405:25;:20;:25;:::i;:::-;34376:54;;34579:18;34533:13;34547:27;34572:1;34547:13;:20;:24;;:27;;;;:::i;:::-;34533:42;;;;;;;;;;;;;;:64;;34512:162;;;;-1:-1:-1;;;34512:162:2;;;;;;;;;34804:7;34799:231;34821:13;:20;34817:1;:24;;;34799:231;;;34886:18;34866:13;34880:1;34866:16;;;;;;;;;;;;;;;;:38;34862:157;;34948:36;;;;:22;:36;;;;;34985:16;;34929:90;;34948:36;34985:13;;:16;;;;;;;;;;;;;;;;34948:54;;;;;;;;;;;;947:2;34929:18;:90::i;:::-;34922:97;;;;;;;34862:157;34843:3;;34799:231;;;;33911:1125;;;;;;:::o;6719:146:27:-;6851:7;6840;;:18;;;6719:146::o;51686:427:2:-;51857:24;;:::i;:::-;51897:6;51893:107;;;51912:44;:12;51939:16;51912:44;:26;:44;:::i;:::-;:88;;;;;;;;;;;51996:4;51912:88;;;;;;51959:34;:12;51976:16;51959:34;:16;:34;:::i;:::-;51905:95;;;;51893:107;52018:44;:16;52049:12;52018:44;:30;:44;:::i;:::-;:88;;;;;;;;;;;52102:4;52018:88;;;;;;52065:34;:16;52086:12;52065:34;:20;:34;:::i;47223:1459::-;47407:19;;:26;47437:1;-1:-1:-1;47407:31:2;47399:97;;;;-1:-1:-1;;;47399:97:2;;;;;;;;;47543:1;47514:6;:18;;;:25;:30;;47506:95;;;;-1:-1:-1;;;47506:95:2;;;;;;;;;47653:1;47619:6;:23;;;:30;:35;;47611:105;;;;-1:-1:-1;;;47611:105:2;;;;;;;;;47778:19;;;;:26;47748:19;;:26;:56;47727:152;;;;-1:-1:-1;;;47727:152:2;;;;;;;;;47939:6;:18;;;:25;47910:6;:18;;;:25;:54;47889:149;;;;-1:-1:-1;;;47889:149:2;;;;;;;;;48103:6;:24;;;:31;48069:6;:23;;;:30;:65;48048:166;;;;-1:-1:-1;;;48048:166:2;;;;;;;;;48308:40;48326:6;48334:13;48308:17;:40::i;:::-;48287:146;;;;-1:-1:-1;;;48287:146:2;;;;;;;;;48538:46;48562:6;48570:13;48538:23;:46::i;:::-;48517:158;;;;-1:-1:-1;;;48517:158:2;;;;;;;;;47223:1459;;:::o;3772:165:27:-;3856:20;;:::i;:::-;3895:35;;;;;;;;;3921:7;;3909;;3895:35;;3909:20;;:7;:20;:11;:20;:::i;:::-;3895:35;;3888:42;3772:165;-1:-1:-1;;;3772:165:27:o;6102:149::-;6237:7;6226;;:18;;;6102:149::o;1780:217:51:-;1896:7;1931:12;1923:6;;;;1915:29;;;;-1:-1:-1;;;1915:29:51;;;;;;;;;;-1:-1:-1;;;1966:5:51;;;1780:217::o;3756:368::-;3872:7;3972:12;3965:5;3957:28;;;;-1:-1:-1;;;3957:28:51;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;;3756:368;-1:-1:-1;;;;;3756:368:51:o;46616:146:2:-;46686:4;46726:1;46709:7;:14;:18;:46;;;;;46753:1;-1:-1:-1;;;;;46731:24:2;:7;46739:1;46731:10;;;;;;;;;;;;;;-1:-1:-1;;;;;46731:24:2;;;46702:53;46616:146;-1:-1:-1;;46616:146:2:o;5788:141:27:-;5915:7;5905;;:17;;5788:141::o;35395:404:2:-;35647:24;;:::i;:::-;35690:102;35698:87;35733:51;35749:34;35757:12;35771:11;35749:7;:34::i;:::-;35733:11;;:51;:15;:51;:::i;:::-;35698:30;:12;35715;35698:30;:16;:30;:::i;:::-;:34;:87;:34;:87;:::i;35690:102::-;35683:109;35395:404;-1:-1:-1;;;;;35395:404:2:o;37720:579::-;37876:24;;:::i;:::-;37927:7;-1:-1:-1;;;;;37916:18:2;:7;-1:-1:-1;;;;;37916:18:2;;37912:63;;;-1:-1:-1;37957:7:2;37950:14;;37912:63;38001:6;;:24;;-1:-1:-1;;;38001:24:2;;37984:14;;-1:-1:-1;;;;;38001:6:2;;:15;;:24;;38017:7;;38001:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38052:6;;:24;;-1:-1:-1;;;38052:24:2;;37984:41;;-1:-1:-1;38035:14:2;;-1:-1:-1;;;;;38052:6:2;;;;:15;;:24;;38068:7;;38052:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38035:41;;38209:83;38259:32;38278:6;1049:1;38259:18;:32::i;:::-;38209:45;38221:32;38240:6;1049:1;38221:18;:32::i;:::-;38209:7;;:45;:11;:45;:::i;36377:997::-;36630:24;;:::i;:::-;36718:25;;;;;;;;;36738:4;36718:25;;;;;:11;;:25;:19;:25;:::i;:::-;36714:107;;;36766:44;36774:29;:12;36791:11;36774:29;:16;:29;:::i;36766:44::-;36759:51;;;;36714:107;37042:34;;:::i;:::-;37079:64;37131:11;37079:47;37113:12;37079:29;37131:11;37095:12;37079:29;:15;:29;:::i;:64::-;37042:101;;37237:35;;:::i;:::-;37275:44;37283:29;:12;37300:11;37283:29;:16;:29;:::i;37275:44::-;37237:82;;37337:30;37345:9;37356:10;37337:7;:30::i;46114:377::-;46371:24;;:::i;:::-;46414:70;46452:31;:14;46471:11;46452:31;:18;:31;:::i;:::-;46414:33;:15;46434:12;46414:33;:19;:33;:::i;4113:184:27:-;4197:20;;:::i;:::-;4236:54;;;;;;;;;4263:7;;4251;;4236:54;;498:4;;4251:20;;;:11;:20;:::i;:::-;4250:39;;;;;;4236:54;;4229:61;4113:184;-1:-1:-1;;;4113:184:27:o;4839:155::-;4923:20;;:::i;:::-;4972:7;;4962;;:17;:25;;4986:1;4962:25;;;-1:-1:-1;4982:1:27;;4839:155;-1:-1:-1;4839:155:27:o;5178:::-;5262:20;;:::i;:::-;5311:7;;5301;;:17;:25;;5325:1;5301:25;;3427:165;3511:20;;:::i;:::-;3550:35;;;;;;;;;3576:7;;3564;;3550:35;;3564:20;;:7;:20;:11;:20;:::i;4471:184::-;4555:20;;:::i;:::-;4594:54;;;;;;;;;4640:7;;4609;;4594:54;;4640:7;4609:27;;498:4;4609:27;:11;:27;:::i;784:179:29:-;836:7;863:1;859;:5;855:102;;;896:1;895:2;;880:18;;;;855:102;-1:-1:-1;944:1:29;929:17;;4568:128:51;4626:7;4652:37;4656:1;4659;4652:37;;;;;;;;;;;;;;;;;:3;:37::i;49004:933:2:-;49146:4;49170:13;:23;;;49197:1;49170:28;49166:141;;;49221:13;:21;;;49220:22;49212:95;;;;-1:-1:-1;;;49212:95:2;;;;;;;;;49385:13;:21;;;49384:22;:49;;;;49411:13;:22;;;49410:23;49384:49;49380:66;;;-1:-1:-1;49442:4:2;49435:11;;49380:66;49501:19;;:22;;:19;;:22;;;;;;;;;;-1:-1:-1;;;;;49476:47:2;:6;:18;;;49495:1;49476:21;;;;;;;;;;;;;;-1:-1:-1;;;;;49476:47:2;;;:134;;;;;49576:13;:34;;;-1:-1:-1;;;;;49539:71:2;:13;:33;;;-1:-1:-1;;;;;49539:71:2;;49476:134;:213;;;;;49659:13;:30;;;-1:-1:-1;;;;;49626:63:2;:13;:29;;;-1:-1:-1;;;;;49626:63:2;;49476:213;:300;;;;;49742:13;:34;;;-1:-1:-1;;;;;49705:71:2;:13;:33;;;-1:-1:-1;;;;;49705:71:2;;49476:300;:387;;;;;49829:13;:34;;;49792:13;:33;;;:71;49476:387;:454;;;;;49906:13;:24;;;49879:51;;:13;:23;;;:51;;;49457:473;;49004:933;;;;:::o;50226:571::-;50434:27;;;;50374:4;;50414;;50429:53;;50470:12;-1:-1:-1;50463:19:2;;50429:53;50497:13;:22;;;50493:268;;;50588:6;:23;;;50612:1;50588:26;;;;;;;;;;;;;;-1:-1:-1;;;;;50550:64:2;:13;:34;;;-1:-1:-1;;;;;50550:64:2;;50535:79;;50493:268;;;50635:13;:21;;;50631:130;;;50724:6;:23;;;50748:1;50724:26;;;;;;;;;;;;;;-1:-1:-1;;;;;50687:63:2;:13;:33;;;-1:-1:-1;;;;;50687:63:2;;50672:78;;50778:12;-1:-1:-1;50226:571:2;;;;:::o;2055:213:52:-;2111:6;2140:5;;;2164:6;;;;;;:16;;;2179:1;2174;:6;;2164:16;2163:38;;;;2190:1;2186;:5;:14;;;;;2199:1;2195;:5;2186:14;2155:87;;;;-1:-1:-1;;;2155:87:52;;;;;;;;5492:136:27;5614:7;5603;;:18;;5492:136::o;538:554:52:-;594:6;834;830:45;;-1:-1:-1;863:1:52;856:8;;830:45;895:1;-1:-1:-1;;895:7:52;:27;;;;;-1:-1:-1;;;906:1:52;:16;895:27;893:30;885:82;;;;-1:-1:-1;;;885:82:52;;;;;;;;;989:5;;;993:1;989;:5;:1;1012:5;;;;;:10;1004:62;;;;-1:-1:-1;;;1004:62:52;;;;;;;;2501:210;2557:6;2586:5;;;2610:6;;;;;;:16;;;2625:1;2620;:6;;2610:16;2609:38;;;;2636:1;2632;:5;:14;;;;;2645:1;2641;:5;2632:14;2601:84;;;;-1:-1:-1;;;2601:84:52;;;;;;;;5160:193:51;5276:7;5311:12;5303:6;5295:29;;;;-1:-1:-1;;;5295:29:51;;;;;;;;;;;5345:1;5341;:5;;;;;;;5160:193;-1:-1:-1;;;;5160:193:51:o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;301:707::-;;418:3;411:4;403:6;399:17;395:27;385:2;;-1:-1;;426:12;385:2;473:6;460:20;495:80;510:64;567:6;510:64;;;495:80;;;603:21;;;486:89;-1:-1;647:4;660:14;;;;635:17;;;749;;;740:27;;;;737:36;-1:-1;734:2;;;786:1;;776:12;734:2;811:1;796:206;821:6;818:1;815:13;796:206;;;85:6;72:20;97:33;124:5;97:33;;;889:50;;953:14;;;;981;;;;843:1;836:9;796:206;;;800:14;;;;;378:630;;;;;1034:352;;;1164:3;1157:4;1149:6;1145:17;1141:27;1131:2;;-1:-1;;1172:12;1131:2;-1:-1;1202:20;;1242:18;1231:30;;1228:2;;;-1:-1;;1264:12;1228:2;1308:4;1300:6;1296:17;1284:29;;1359:3;1308:4;;1343:6;1339:17;1300:6;1325:32;;1322:41;1319:2;;;1376:1;;1366:12;1412:707;;1529:3;1522:4;1514:6;1510:17;1506:27;1496:2;;-1:-1;;1537:12;1496:2;1584:6;1571:20;1606:80;1621:64;1678:6;1621:64;;1606:80;1714:21;;;1597:89;-1:-1;1758:4;1771:14;;;;1746:17;;;1860;;;1851:27;;;;1848:36;-1:-1;1845:2;;;1897:1;;1887:12;1845:2;1922:1;1907:206;1932:6;1929:1;1926:13;1907:206;;;4263:20;;2000:50;;2064:14;;;;2092;;;;1954:1;1947:9;1907:206;;2424:1765;;2537:4;2525:9;2520:3;2516:19;2512:30;2509:2;;;-1:-1;;2545:12;2509:2;2573:20;2537:4;2573:20;;;2564:29;;2664:17;2651:31;2702:18;;2694:6;2691:30;2688:2;;;2679:1;;2724:12;2688:2;2769:74;2839:3;2830:6;2819:9;2815:22;2769:74;;;2751:16;2744:100;2940:2;2929:9;2925:18;2912:32;2898:46;;2702:18;2956:6;2953:30;2950:2;;;2679:1;;2986:12;2950:2;3031:74;3101:3;3092:6;3081:9;3077:22;3031:74;;;2940:2;3017:5;3013:16;3006:100;3207:2;3196:9;3192:18;3179:32;3165:46;;2702:18;3223:6;3220:30;3217:2;;;2679:1;;3253:12;3217:2;3298:74;3368:3;3359:6;3348:9;3344:22;3298:74;;;3207:2;3284:5;3280:16;3273:100;3470:2;3459:9;3455:18;3442:32;3428:46;;2702:18;3486:6;3483:30;3480:2;;;2679:1;;3516:12;3480:2;3561:74;3631:3;3622:6;3611:9;3607:22;3561:74;;;3470:2;3547:5;3543:16;3536:100;3732:3;3721:9;3717:19;3704:33;3690:47;;2702:18;3749:6;3746:30;3743:2;;;2679:1;;3779:12;3743:2;3824:74;3894:3;3885:6;3874:9;3870:22;3824:74;;;3732:3;3810:5;3806:16;3799:100;4001:3;3990:9;3986:19;3973:33;3959:47;;2702:18;4018:6;4015:30;4012:2;;;2679:1;;4048:12;4012:2;;4093:74;4163:3;4154:6;4143:9;4139:22;4093:74;;;4001:3;4079:5;4075:16;4068:100;;2503:1686;;;;;4611:241;;4715:2;4703:9;4694:7;4690:23;4686:32;4683:2;;;-1:-1;;4721:12;4683:2;85:6;72:20;97:33;124:5;97:33;;4859:263;;4974:2;4962:9;4953:7;4949:23;4945:32;4942:2;;;-1:-1;;4980:12;4942:2;226:6;220:13;238:33;265:5;238:33;;5129:611;;;;;5281:3;5269:9;5260:7;5256:23;5252:33;5249:2;;;-1:-1;;5288:12;5249:2;85:6;72:20;97:33;124:5;97:33;;;5340:63;-1:-1;5440:2;5479:22;;72:20;97:33;72:20;97:33;;;5448:63;-1:-1;5548:2;5587:22;;72:20;97:33;72:20;97:33;;;5556:63;-1:-1;5656:2;5692:22;;2191:20;2216:30;2191:20;2216:30;;;5243:497;;;;-1:-1;5243:497;;-1:-1;;5243:497;5747:1175;;;;;;;;;6003:3;5991:9;5982:7;5978:23;5974:33;5971:2;;;-1:-1;;6010:12;5971:2;85:6;72:20;97:33;124:5;97:33;;;6062:63;-1:-1;6162:2;6201:22;;72:20;97:33;72:20;97:33;;;6170:63;-1:-1;6270:2;6309:22;;72:20;97:33;72:20;97:33;;;6278:63;-1:-1;6378:2;6414:22;;2191:20;2216:30;2191:20;2216:30;;;6386:60;-1:-1;6511:3;6496:19;;6483:33;6536:18;6525:30;;;6522:2;;;-1:-1;;6558:12;6522:2;6596:80;6668:7;6659:6;6648:9;6644:22;6596:80;;;6586:90;;-1:-1;6586:90;-1:-1;6741:3;6726:19;;6713:33;;-1:-1;6755:30;;;6752:2;;;-1:-1;;6788:12;6752:2;;6826:80;6898:7;6889:6;6878:9;6874:22;6826:80;;;5965:957;;;;-1:-1;5965:957;;-1:-1;5965:957;;;;;;6816:90;-1:-1;;;5965:957;6929:737;;;;;;7098:3;7086:9;7077:7;7073:23;7069:33;7066:2;;;-1:-1;;7105:12;7066:2;85:6;72:20;97:33;124:5;97:33;;;7157:63;-1:-1;7257:2;7296:22;;72:20;97:33;72:20;97:33;;;7265:63;-1:-1;7365:2;7404:22;;72:20;97:33;72:20;97:33;;;7373:63;-1:-1;7473:2;7509:22;;2191:20;2216:30;2191:20;2216:30;;;7060:606;;;;-1:-1;7060:606;;7578:3;7618:22;4263:20;;7060:606;-1:-1;;7060:606;7673:863;;;;;;;7859:3;7847:9;7838:7;7834:23;7830:33;7827:2;;;-1:-1;;7866:12;7827:2;85:6;72:20;97:33;124:5;97:33;;;7918:63;-1:-1;8018:2;8057:22;;72:20;97:33;72:20;97:33;;;8026:63;-1:-1;8126:2;8165:22;;72:20;97:33;72:20;97:33;;;8134:63;-1:-1;8234:2;8270:22;;2191:20;2216:30;2191:20;2216:30;;;7821:715;;;;-1:-1;7821:715;;8339:3;8379:22;;4263:20;;8448:3;8488:22;;;4263:20;;-1:-1;7821:715;-1:-1;;7821:715;8543:940;;;;;;;8740:3;8728:9;8719:7;8715:23;8711:33;8708:2;;;-1:-1;;8747:12;8708:2;226:6;220:13;238:33;265:5;238:33;;;8910:2;8960:22;;220:13;8799:74;;-1:-1;238:33;220:13;238:33;;;9029:2;9079:22;;220:13;8918:74;;-1:-1;238:33;220:13;238:33;;;9037:74;;;;9148:2;9202:9;9198:22;4411:13;9156:74;;9267:3;9322:9;9318:22;4411:13;9276:74;;9387:3;9439:9;9435:22;2333:13;2351:30;2375:5;2351:30;;;9396:71;;;;8702:781;;;;;;;;;9490:1241;;;;;;;;;;9727:3;9715:9;9706:7;9702:23;9698:33;9695:2;;;-1:-1;;9734:12;9695:2;85:6;72:20;97:33;124:5;97:33;;;9786:63;-1:-1;9886:2;9925:22;;72:20;97:33;72:20;97:33;;;9894:63;-1:-1;9994:2;10033:22;;72:20;97:33;72:20;97:33;;;10002:63;-1:-1;10102:2;10141:22;;4263:20;;-1:-1;10210:3;10250:22;;4263:20;;-1:-1;10319:3;10359:22;;4263:20;;-1:-1;10428:3;10468:22;;4263:20;;-1:-1;10537:3;10577:22;;4263:20;;-1:-1;10646:3;10683:22;;2191:20;2216:30;2191:20;2216:30;;;10655:60;;;;9689:1042;;;;;;;;;;;;10738:737;;;;;;10907:3;10895:9;10886:7;10882:23;10878:33;10875:2;;;-1:-1;;10914:12;10875:2;85:6;72:20;97:33;124:5;97:33;;;10966:63;-1:-1;11066:2;11105:22;;72:20;97:33;72:20;97:33;;;11074:63;-1:-1;11174:2;11213:22;;4263:20;;-1:-1;11282:2;11321:22;;4263:20;;-1:-1;11390:3;11427:22;;2191:20;2216:30;2191:20;2216:30;;;11399:60;;;;10869:606;;;;;;;;;11482:366;;;11603:2;11591:9;11582:7;11578:23;11574:32;11571:2;;;-1:-1;;11609:12;11571:2;85:6;72:20;97:33;124:5;97:33;;;11661:63;11761:2;11800:22;;;;4263:20;;-1:-1;;;11565:283;11855:257;;11967:2;11955:9;11946:7;11942:23;11938:32;11935:2;;;-1:-1;;11973:12;11935:2;2339:6;2333:13;2351:30;2375:5;2351:30;;12119:500;;;12264:2;12252:9;12243:7;12239:23;12235:32;12232:2;;;-1:-1;;12270:12;12232:2;12328:17;12315:31;12366:18;12358:6;12355:30;12352:2;;;-1:-1;;12388:12;12352:2;12418:77;12487:7;12478:6;12467:9;12463:22;12418:77;;;12408:87;12532:2;12571:22;;;;4263:20;;-1:-1;;;;12226:393;12626:751;;;;;12805:3;12793:9;12784:7;12780:23;12776:33;12773:2;;;-1:-1;;12812:12;12773:2;12870:17;12857:31;12908:18;12900:6;12897:30;12894:2;;;-1:-1;;12930:12;12894:2;12960:77;13029:7;13020:6;13009:9;13005:22;12960:77;;;12950:87;13074:2;13113:22;;4263:20;;-1:-1;13182:2;13221:22;;4263:20;;13290:2;13329:22;4263:20;;-1:-1;12767:610;-1:-1;;;;12767:610;13384:241;;13488:2;13476:9;13467:7;13463:23;13459:32;13456:2;;;-1:-1;;13494:12;13456:2;-1:-1;4263:20;;13450:175;-1:-1;13450:175;13632:263;;13747:2;13735:9;13726:7;13722:23;13718:32;13715:2;;;-1:-1;;13753:12;13715:2;-1:-1;4411:13;;13709:186;-1:-1;13709:186;13902:393;;;14031:2;14019:9;14010:7;14006:23;14002:32;13999:2;;;-1:-1;;14037:12;13999:2;4417:6;4411:13;14089:74;;14200:2;14251:9;14247:22;2333:13;2351:30;2375:5;2351:30;;;14208:71;;;;13993:302;;;;;;14302:399;;;14434:2;14422:9;14413:7;14409:23;14405:32;14402:2;;;-1:-1;;14440:12;14402:2;-1:-1;;4411:13;;14603:2;14653:22;;;4411:13;;;;;-1:-1;14396:305;14708:989;;;;;;;;14911:3;14899:9;14890:7;14886:23;14882:33;14879:2;;;-1:-1;;14918:12;14879:2;4276:6;4263:20;14970:63;;15070:2;15113:9;15109:22;4263:20;15078:63;;15178:2;15221:9;15217:22;4263:20;15186:63;;15286:2;15329:9;15325:22;4263:20;15294:63;;15394:3;15438:9;15434:22;4263:20;15403:63;;15503:3;15547:9;15543:22;4263:20;15512:63;;15612:3;15653:9;15649:22;2191:20;2216:30;2240:5;2216:30;;;15621:60;;;;14873:824;;;;;;;;;;;15704:259;;15817:2;15805:9;15796:7;15792:23;15788:32;15785:2;;;-1:-1;;15823:12;15785:2;4556:6;4550:13;54302:4;55572:5;54291:16;55549:5;55546:33;55536:2;;-1:-1;;55583:12;32351:222;-1:-1;;;;;54086:54;;;;16223:37;;32478:2;32463:18;;32449:124;32580:544;-1:-1;;;;;54086:54;;;16223:37;;54086:54;;;32950:2;32935:18;;16223:37;54086:54;;33033:2;33018:18;;16223:37;53920:13;;53913:21;33110:2;33095:18;;17066:34;32785:3;32770:19;;32756:368;33131:333;-1:-1;;;;;54086:54;;;;16223:37;;33450:2;33435:18;;17352:36;33286:2;33271:18;;33257:207;33471:329;-1:-1;;;;;54086:54;;;;16223:37;;54391:22;54380:34;33786:2;33771:18;;32303:36;33624:2;33609:18;;33595:205;33807:370;33984:2;33998:47;;;53112:12;;33969:18;;;53516:19;;;33807:370;;33984:2;52966:14;;;;53556;;;;33807:370;16711:260;16736:6;16733:1;16730:13;16711:260;;;16797:13;;17352:36;;53371:14;;;;16124;;;;16758:1;16751:9;16711:260;;;-1:-1;34051:116;;33955:222;-1:-1;;;;;;33955:222;34184:432;53920:13;;53913:21;17066:34;;34519:2;34504:18;;17352:36;;;;34602:2;34587:18;;17352:36;34361:2;34346:18;;34332:284;34900:310;;35047:2;;35068:17;35061:47;17545:5;53112:12;53528:6;35047:2;35036:9;35032:18;53516:19;-1:-1;54814:101;54828:6;54825:1;54822:13;54814:101;;;54895:11;;;;;54889:18;54876:11;;;53556:14;54876:11;54869:39;54843:10;;54814:101;;;54930:6;54927:1;54924:13;54921:2;;;-1:-1;53556:14;54986:6;35036:9;54977:16;;54970:27;54921:2;-1:-1;55102:7;55086:14;-1:-1;;55082:28;17703:39;;;;53556:14;17703:39;;35018:192;-1:-1;;;35018:192;35217:416;35417:2;35431:47;;;17979:2;35402:18;;;53516:19;18015:34;53556:14;;;17995:55;-1:-1;;;18070:12;;;18063:39;18121:12;;;35388:245;35640:416;35840:2;35854:47;;;18372:2;35825:18;;;53516:19;18408:34;53556:14;;;18388:55;18477:34;18463:12;;;18456:56;-1:-1;;;18532:12;;;18525:30;18574:12;;;35811:245;36063:416;36263:2;36277:47;;;18825:2;36248:18;;;53516:19;18861:34;53556:14;;;18841:55;-1:-1;;;18916:12;;;18909:31;18959:12;;;36234:245;36486:416;36686:2;36700:47;;;19210:2;36671:18;;;53516:19;19246:34;53556:14;;;19226:55;-1:-1;;;19301:12;;;19294:32;19345:12;;;36657:245;36909:416;37109:2;37123:47;;;19596:2;37094:18;;;53516:19;19632:34;53556:14;;;19612:55;-1:-1;;;19687:12;;;19680:43;19742:12;;;37080:245;37332:416;37532:2;37546:47;;;19993:2;37517:18;;;53516:19;20029:34;53556:14;;;20009:55;-1:-1;;;20084:12;;;20077:39;20135:12;;;37503:245;37755:416;37955:2;37969:47;;;20386:2;37940:18;;;53516:19;20422:34;53556:14;;;20402:55;-1:-1;;;20477:12;;;20470:30;20519:12;;;37926:245;38178:416;38378:2;38392:47;;;20770:2;38363:18;;;53516:19;20806:34;53556:14;;;20786:55;20875:27;20861:12;;;20854:49;20922:12;;;38349:245;38601:416;38801:2;38815:47;;;21173:2;38786:18;;;53516:19;21209:34;53556:14;;;21189:55;-1:-1;;;21264:12;;;21257:26;21302:12;;;38772:245;39024:416;39224:2;39238:47;;;21553:2;39209:18;;;53516:19;21589:29;53556:14;;;21569:50;21638:12;;;39195:245;39447:416;39647:2;39661:47;;;21889:2;39632:18;;;53516:19;21925:34;53556:14;;;21905:55;-1:-1;;;21980:12;;;21973:30;22022:12;;;39618:245;39870:416;40070:2;40084:47;;;22273:2;40055:18;;;53516:19;22309:34;53556:14;;;22289:55;-1:-1;;;22364:12;;;22357:44;22420:12;;;40041:245;40293:416;40493:2;40507:47;;;22671:2;40478:18;;;53516:19;22707:34;53556:14;;;22687:55;-1:-1;;;22762:12;;;22755:25;22799:12;;;40464:245;40716:416;40916:2;40930:47;;;23050:2;40901:18;;;53516:19;23086:34;53556:14;;;23066:55;-1:-1;;;23141:12;;;23134:41;23194:12;;;40887:245;41139:416;41339:2;41353:47;;;23445:2;41324:18;;;53516:19;23481:34;53556:14;;;23461:55;23550:34;23536:12;;;23529:56;23619:29;23605:12;;;23598:51;23668:12;;;41310:245;41562:416;41762:2;41776:47;;;23919:2;41747:18;;;53516:19;23955:34;53556:14;;;23935:55;-1:-1;;;24010:12;;;24003:42;24064:12;;;41733:245;41985:416;42185:2;42199:47;;;24315:2;42170:18;;;53516:19;24351:34;53556:14;;;24331:55;24420:30;24406:12;;;24399:52;24470:12;;;42156:245;42408:416;42608:2;42622:47;;;24721:2;42593:18;;;53516:19;24757:34;53556:14;;;24737:55;-1:-1;;;24812:12;;;24805:43;24867:12;;;42579:245;42831:416;43031:2;43045:47;;;25118:2;43016:18;;;53516:19;25154:34;53556:14;;;25134:55;25223:29;25209:12;;;25202:51;25272:12;;;43002:245;43254:416;43454:2;43468:47;;;25523:2;43439:18;;;53516:19;25559:34;53556:14;;;25539:55;-1:-1;;;25614:12;;;25607:44;25670:12;;;43425:245;43677:416;43877:2;43891:47;;;25921:2;43862:18;;;53516:19;25957:34;53556:14;;;25937:55;-1:-1;;;26012:12;;;26005:25;26049:12;;;43848:245;44100:416;44300:2;44314:47;;;44285:18;;;53516:19;26336:34;53556:14;;;26316:55;26390:12;;;44271:245;44523:416;44723:2;44737:47;;;26641:2;44708:18;;;53516:19;26677:34;53556:14;;;26657:55;-1:-1;;;26732:12;;;26725:31;26775:12;;;44694:245;44946:416;45146:2;45160:47;;;27026:2;45131:18;;;53516:19;27062:34;53556:14;;;27042:55;27131:34;27117:12;;;27110:56;-1:-1;;;27186:12;;;27179:25;27223:12;;;45117:245;45369:416;45569:2;45583:47;;;27474:2;45554:18;;;53516:19;27510:34;53556:14;;;27490:55;-1:-1;;;27565:12;;;27558:33;27610:12;;;45540:245;45792:416;45992:2;46006:47;;;27861:2;45977:18;;;53516:19;27897:34;53556:14;;;27877:55;-1:-1;;;27952:12;;;27945:41;28005:12;;;45963:245;46215:416;46415:2;46429:47;;;28256:2;46400:18;;;53516:19;28292:34;53556:14;;;28272:55;28361:27;28347:12;;;28340:49;28408:12;;;46386:245;46638:416;46838:2;46852:47;;;28659:2;46823:18;;;53516:19;28695:34;53556:14;;;28675:55;-1:-1;;;28750:12;;;28743:37;28799:12;;;46809:245;47061:416;47261:2;47275:47;;;29050:2;47246:18;;;53516:19;29086:34;53556:14;;;29066:55;-1:-1;;;29141:12;;;29134:38;29191:12;;;47232:245;47484:416;47684:2;47698:47;;;29442:2;47669:18;;;53516:19;29478:34;53556:14;;;29458:55;-1:-1;;;29533:12;;;29526:45;29590:12;;;47655:245;47907:416;48107:2;48121:47;;;29841:2;48092:18;;;53516:19;29877:34;53556:14;;;29857:55;-1:-1;;;29932:12;;;29925:28;29972:12;;;48078:245;48330:416;48530:2;48544:47;;;30223:2;48515:18;;;53516:19;30259:34;53556:14;;;30239:55;-1:-1;;;30314:12;;;30307:34;30360:12;;;48501:245;48753:416;48953:2;48967:47;;;30611:2;48938:18;;;53516:19;30647:34;53556:14;;;30627:55;-1:-1;;;30702:12;;;30695:40;30754:12;;;48924:245;49176:416;49376:2;49390:47;;;31005:2;49361:18;;;53516:19;31041:34;53556:14;;;31021:55;-1:-1;;;31096:12;;;31089:46;31154:12;;;49347:245;49599:416;49799:2;49813:47;;;31405:2;49784:18;;;53516:19;31441:34;53556:14;;;31421:55;-1:-1;;;31496:12;;;31489:43;31551:12;;;49770:245;50022:589;31886:23;;17352:36;;31886:23;50597:2;50582:18;;17352:36;50305:2;50290:18;;50276:335;50618:222;17352:36;;;50745:2;50730:18;;50716:124;50847:321;17352:36;;;53920:13;53913:21;51154:2;51139:18;;17066:34;50996:2;50981:18;;50967:201;51175:333;17352:36;;;51494:2;51479:18;;17352:36;51330:2;51315:18;;51301:207;51515:444;17352:36;;;51862:2;51847:18;;17352:36;;;;51945:2;51930:18;;17352:36;51698:2;51683:18;;51669:290;51966:256;52028:2;52022:9;52054:17;;;52129:18;52114:34;;52150:22;;;52111:62;52108:2;;;52186:1;;52176:12;52108:2;52028;52195:22;52006:216;;-1:-1;52006:216;52229:304;;52388:18;52380:6;52377:30;52374:2;;;-1:-1;;52410:12;52374:2;-1:-1;52455:4;52443:17;;;52508:15;;52311:222;55123:117;-1:-1;;;;;54086:54;;55182:35;;55172:2;;55231:1;;55221:12;55172:2;55166:74;;55247:111;55328:5;53920:13;53913:21;55306:5;55303:32;55293:2;;55349:1;;55339:12"
+ },
+ "methodIdentifiers": {
+ "AUCTION_TIME()": "e592301a",
+ "findUpperBoundValue(address,address,address,bool,uint256)": "a101bca1",
+ "getCollateralDust(address)": "6ccb9506",
+ "getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)": "cd43fbfb",
+ "getExpiredCashValue(address,address,uint256,uint256,bool)": "e8420631",
+ "getExpiredPayoutRate(address)": "47840930",
+ "getMarginRequired((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)": "053fe57c",
+ "getMaxPrice(address,address,address,bool,uint256)": "dc1b3f00",
+ "getNakedMarginRequired(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)": "0b0509fb",
+ "getOracleDeviation()": "b29d5ee8",
+ "getSpotShock(address,address,address,bool)": "46345900",
+ "getTimesToExpiry(address,address,address,bool)": "47d438a5",
+ "isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)": "a6c56907",
+ "oracle()": "7dc0d1d0",
+ "owner()": "8da5cb5b",
+ "price(uint256,uint256,uint256,uint256,uint256,uint256,bool)": "958c3234",
+ "renounceOwnership()": "715018a6",
+ "setCollateralDust(address,uint256)": "9a783d11",
+ "setOracleDeviation(uint256)": "c73547e3",
+ "setSpotShock(address,address,address,bool,uint256)": "8aab8fa5",
+ "setUpperBoundValues(address,address,address,bool,uint256[],uint256[])": "7f519b72",
+ "transferOwnership(address)": "f2fde38b",
+ "updateUpperBoundValue(address,address,address,bool,uint256,uint256)": "7ad7f800"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dust\",\"type\":\"uint256\"}],\"name\":\"CollateralDustUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"MaxPriceAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"MaxPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oracleDeviation\",\"type\":\"uint256\"}],\"name\":\"OracleDeviationUpdated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"product\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"spotShock\",\"type\":\"uint256\"}],\"name\":\"SpotShockUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"productHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"}],\"name\":\"TimeToExpiryAdded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AUCTION_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"}],\"name\":\"findUpperBoundValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"}],\"name\":\"getCollateralDust\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"}],\"name\":\"getExcessCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getExpiredCashValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otoken\",\"type\":\"address\"}],\"name\":\"getExpiredPayoutRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"}],\"name\":\"getMarginRequired\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_timeToExpiry\",\"type\":\"uint256\"}],\"name\":\"getMaxPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_shortAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shortExpiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_collateralDecimals\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getNakedMarginRequired\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracleDeviation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getSpotShock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"getTimesToExpiry\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"_vault\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_vaultType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_vaultLatestUpdate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_roundId\",\"type\":\"uint256\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_vaultDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_spotPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_auctionStartingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_collateralDecimals\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_dust\",\"type\":\"uint256\"}],\"name\":\"setCollateralDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deviation\",\"type\":\"uint256\"}],\"name\":\"setOracleDeviation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_shockValue\",\"type\":\"uint256\"}],\"name\":\"setSpotShock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"_timesToExpiry\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"setUpperBoundValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"updateUpperBoundValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"getCollateralDust(address)\":{\"params\":{\"_collateral\":\"collateral asset address\"},\"returns\":{\"_0\":\"dust amount\"}},\"getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"details\":\"return amount is denominated in the collateral asset for the oToken in the vault, or the collateral asset in the vault\",\"params\":{\"_vault\":\"theoretical vault that needs to be checked\",\"_vaultType\":\"vault type (0 for spread/max loss, 1 for naked margin)\"},\"returns\":{\"_0\":\"excessCollateral the amount by which the margin is above or below the required amount\",\"_1\":\"isExcess True if there is excess margin in the vault, False if there is a deficit of margin in the vault if True, collateral can be taken out from the vault, if False, additional collateral needs to be added to vault\"}},\"getExpiredPayoutRate(address)\":{\"params\":{\"_otoken\":\"oToken address\"},\"returns\":{\"_0\":\"how much collateral can be taken out by 1 otoken unit, scaled by 1e8, or how much collateral can be taken out for 1 (1e8) oToken\"}},\"getMarginRequired((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"params\":{\"_vault\":\"theoretical vault that needs to be checked\",\"_vaultType\":\"vault type\"},\"returns\":{\"_0\":\"the vault collateral amount, and marginRequired the minimal amount of collateral needed in a vault, scaled to 1e27\"}},\"getMaxPrice(address,address,address,bool,uint256)\":{\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_timeToExpiry\":\"option time to expiry timestamp\",\"_underlying\":\"otoken underlying asset\"},\"returns\":{\"_0\":\"option upper bound value (1e27)\"}},\"getNakedMarginRequired(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)\":{\"details\":\"_shortAmount, _strikePrice and _underlyingPrice should be scaled by 1e8\",\"params\":{\"_collateral\":\"collateral asset address\",\"_collateralDecimals\":\"otoken collateral asset decimals\",\"_isPut\":\"otoken type\",\"_shortAmount\":\"amount of short otoken\",\"_shortExpiryTimestamp\":\"otoken expiry timestamp\",\"_strike\":\"strike asset address\",\"_strikePrice\":\"otoken strike price\",\"_underlying\":\"underlying asset address\",\"_underlyingPrice\":\"otoken underlying price\"},\"returns\":{\"_0\":\"collateral required for a naked margin vault, in collateral asset decimals\"}},\"getOracleDeviation()\":{\"returns\":{\"_0\":\"oracle deviation value (1e27)\"}},\"getSpotShock(address,address,address,bool)\":{\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_underlying\":\"otoken underlying asset\"},\"returns\":{\"_0\":\"_shockValue spot shock value (1e27)\"}},\"getTimesToExpiry(address,address,address,bool)\":{\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_underlying\":\"otoken underlying asset\"},\"returns\":{\"_0\":\"array of times to expiry\"}},\"isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)\":{\"details\":\"if the vault is of type 0, the function will revert\",\"params\":{\"_roundId\":\"chainlink round id\",\"_vault\":\"vault struct\",\"_vaultLatestUpdate\":\"vault latest update (timestamp when latest vault state change happened)\",\"_vaultType\":\"vault type (0 for max loss/spread and 1 for naked margin vault)\"},\"returns\":{\"_0\":\"isLiquidatable, true if vault is undercollateralized, liquidation price and collateral dust amount\"}},\"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.\"},\"setCollateralDust(address,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"collateral asset address\",\"_dust\":\"dust amount, should be scaled by collateral asset decimals\"}},\"setOracleDeviation(uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_deviation\":\"deviation value\"}},\"setSpotShock(address,address,address,bool,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_shockValue\":\"spot shock value\",\"_strike\":\"otoken strike asset\",\"_underlying\":\"otoken underlying asset\"}},\"setUpperBoundValues(address,address,address,bool,uint256[],uint256[])\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_timesToExpiry\":\"array of times to expiry timestamp\",\"_underlying\":\"otoken underlying asset\",\"_values\":\"upper bound values array\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateUpperBoundValue(address,address,address,bool,uint256,uint256)\":{\"details\":\"can only be called by owner\",\"params\":{\"_collateral\":\"otoken collateral asset\",\"_isPut\":\"otoken type\",\"_strike\":\"otoken strike asset\",\"_timeToExpiry\":\"option time to expiry timestamp\",\"_underlying\":\"otoken underlying asset\",\"_value\":\"upper bound value\"}}}},\"userdoc\":{\"methods\":{\"AUCTION_TIME()\":{\"notice\":\"auction length\"},\"getCollateralDust(address)\":{\"notice\":\"get dust amount for collateral asset\"},\"getExcessCollateral((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"notice\":\"returns the amount of collateral that can be removed from an actual or a theoretical vault\"},\"getExpiredPayoutRate(address)\":{\"notice\":\"return the cash value of an expired oToken, denominated in collateral\"},\"getMarginRequired((address[],address[],address[],uint256[],uint256[],uint256[]),uint256)\":{\"notice\":\"calculate required collateral margin for a vault\"},\"getMaxPrice(address,address,address,bool,uint256)\":{\"notice\":\"get option upper bound value for specific time to expiry\"},\"getNakedMarginRequired(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)\":{\"notice\":\"return the collateral required for naked margin vault, in collateral asset decimals\"},\"getOracleDeviation()\":{\"notice\":\"get oracle deviation\"},\"getSpotShock(address,address,address,bool)\":{\"notice\":\"get spot shock value\"},\"getTimesToExpiry(address,address,address,bool)\":{\"notice\":\"get times to expiry for a specific product\"},\"isLiquidatable((address[],address[],address[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)\":{\"notice\":\"check if a specific vault is undercollateralized at a specific chainlink round\"},\"setCollateralDust(address,uint256)\":{\"notice\":\"set dust amount for collateral asset\"},\"setOracleDeviation(uint256)\":{\"notice\":\"set oracle deviation (1e27)\"},\"setSpotShock(address,address,address,bool,uint256)\":{\"notice\":\"set spot shock value, scaled to 1e27\"},\"setUpperBoundValues(address,address,address,bool,uint256[],uint256[])\":{\"notice\":\"set product upper bound values\"},\"updateUpperBoundValue(address,address,address,bool,uint256,uint256)\":{\"notice\":\"set option upper bound value for specific time to expiry (1e27)\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/tests/CalculatorTester.sol\":\"CalculatorTester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/MarginCalculator.sol\":{\"keccak256\":\"0xd0d0b141dd945e6f81b3850b5907b90dde9dc40d30f9aa2ac9204c1252a1724c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f93bcf524b9ec42f5e85e16dbb332071bf65710323215078421fc3cae1e5fa74\",\"dweb:/ipfs/QmTF69ehzP2T2J6iWpSoDjcDkbw7uwqh5vz8dgi4ywg3oP\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/interfaces/OracleInterface.sol\":{\"keccak256\":\"0xb98928ca456c3b8d4056d9c90c7d07a8dea00d02059df57e528c13272327d3f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62931dc18702e6c5db233e3d184336f9ec18b97bca88d813a08c6892422a0b5b\",\"dweb:/ipfs/QmSoRtqLSEZFevJ4qbmU4gkYh1XnJy8uxy27DmiWBYuimQ\"]},\"contracts/interfaces/OtokenInterface.sol\":{\"keccak256\":\"0x3089cdd00dca9459a3c8458d6dc0d8dfb95e716aebdd6d9929238d0be625757a\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c5b250799a8d5b644c16e0576680376fc0febd925b20713906f62f3be24ad44b\",\"dweb:/ipfs/Qmf6edeL1FfRXfU5RWAMR6jSjKfCGLYG85AiaUxiSnoPd9\"]},\"contracts/libs/FixedPointInt256.sol\":{\"keccak256\":\"0x430dc07238bfc5b1c422ac67366b7bf7cfeb7ff64f158bf0b5293a21aa4bb2ab\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fdd0edd9eb050609f26da31fb5d6e8e610a6aadaf7b751224b31aa9f656bfcf0\",\"dweb:/ipfs/QmbmZEW49thzmKqUUqdcEFwLahx5REXQZ4kQMBr1yfc1XB\"]},\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/libs/SignedConverter.sol\":{\"keccak256\":\"0xcd580557dc2c337a870d632b1120f2ec0f7494056d48620598a11d09418dcfa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cfa5fb05fa755dde57c74abf107eaf806794c48fa571cf17abaf856074fddd30\",\"dweb:/ipfs/QmV5L5XdK6BwmKDxj4zqPVh7MnHJeY8pUxZ2JLHqzW1B22\"]},\"contracts/packages/oz/Context.sol\":{\"keccak256\":\"0x35b3e8e1595be9615789db07354d46bf44adf46be977b76a467ad9edc092e950\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ace38cb2e4f0b6600bf4fba1327d260009da6ede3a19ff448be2aaf7e9cfde6b\",\"dweb:/ipfs/QmRBbdA1ReZJTHYoNutPnfWTDnJiRnVVT6w9xPs3p7JVs1\"]},\"contracts/packages/oz/Ownable.sol\":{\"keccak256\":\"0xb6d430bc79061b7e7115f305f00c7d65e52d0cc9357eb5a9c88d4aa6fa643ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8386707003c01312decbf9aa69a8d2bf8fbad06e055bd7a93defd8ffca57d4f\",\"dweb:/ipfs/QmPncsaKNhmLwseQUKrDQmk1zKxKktm9ZUFoFGrvFdjt5Z\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/SignedSafeMath.sol\":{\"keccak256\":\"0x5c37725e4c762112901151ff9fbd6678f2edd936666f987d0904865b528647e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://072c740989fea30fe46f9410377697fafadc8b79a0c297a0ebfbd38f5a40f305\",\"dweb:/ipfs/QmSb7ggwKV5LU9QDHHZ6tUDUEhCyiFEoD12ZS4FFFnqjkF\"]},\"contracts/tests/CalculatorTester.sol\":{\"keccak256\":\"0xb8695a46116fc266ebcb33353f64c5ffdc5c20652fa88971e7e2ed7d1ac3f0cd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://1748eed6b55b9b45e8b6dc03c7106feabb93134d0431d4dc122e7088d3c8c73b\",\"dweb:/ipfs/QmTMLKgoCSX7Ybne8VGsBa7NbkYTCHFiMzcm9T5CcFmeKJ\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/CalleeAllowanceTester.sol": {
+ "CalleeAllowanceTester": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_weth",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "callFunction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "weth",
+ "outputs": [
+ {
+ "internalType": "contract ERC20Interface",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506040516105a33803806105a383398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b610512806100916000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633fc8cef31461003b5780639c23da5014610059575b600080fd5b61004361006e565b60405161005091906103d0565b60405180910390f35b61006c61006736600461028e565b61007d565b005b6000546001600160a01b031681565b60008082806020019051810190610094919061033c565b60005491935091506100b7906001600160a01b031683308463ffffffff6100bd16565b50505050565b6100b7846323b872dd60e01b8585856040516024016100de939291906103ac565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060610165826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166101ad9092919063ffffffff16565b8051909150156101a857808060200190518101906101839190610369565b6101a85760405162461bcd60e51b815260040161019f9061044e565b60405180910390fd5b505050565b60606101bc84846000856101c4565b949350505050565b60606101cf85610288565b6101eb5760405162461bcd60e51b815260040161019f90610417565b60006060866001600160a01b031685876040516102089190610390565b60006040518083038185875af1925050503d8060008114610245576040519150601f19603f3d011682016040523d82523d6000602084013e61024a565b606091505b5091509150811561025e5791506101bc9050565b80511561026e5780518082602001fd5b8360405162461bcd60e51b815260040161019f91906103e4565b3b151590565b600080604083850312156102a0578182fd5b82356102ab816104c4565b915060208381013567ffffffffffffffff808211156102c8578384fd5b81860187601f8201126102d9578485fd5b80359250818311156102e9578485fd5b604051601f8401601f1916810185018381118282101715610308578687fd5b604052838152818401850189101561031e578586fd5b83858301868301378585858301015280955050505050509250929050565b6000806040838503121561034e578182fd5b8251610359816104c4565b6020939093015192949293505050565b60006020828403121561037a578081fd5b81518015158114610389578182fd5b9392505050565b600082516103a2818460208701610498565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0391909116815260200190565b6000602082528251806020840152610403816040850160208701610498565b601f01601f19169190910160400192915050565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b838110156104b357818101518382015260200161049b565b838111156100b75750506000910152565b6001600160a01b03811681146104d957600080fd5b5056fea2646970667358221220e0816b29056f082f00b1bc5e52e7ef660d9ac5007049a44582ac8a6d2f32543564736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x5A3 CODESIZE SUB DUP1 PUSH2 0x5A3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 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 PUSH2 0x82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x512 DUP1 PUSH2 0x91 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 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x6E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x3D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0x67 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E JUMP JUMPDEST PUSH2 0x7D JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x94 SWAP2 SWAP1 PUSH2 0x33C JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH2 0xB7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 ADDRESS DUP5 PUSH4 0xFFFFFFFF PUSH2 0xBD AND JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xB7 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xDE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3AC 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 PUSH1 0x60 PUSH2 0x165 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 0x1AD SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1A8 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0x369 JUMP JUMPDEST PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x44E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1BC DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1C4 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1CF DUP6 PUSH2 0x288 JUMP JUMPDEST PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x417 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x208 SWAP2 SWAP1 PUSH2 0x390 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 0x245 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 0x24A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x25E JUMPI SWAP2 POP PUSH2 0x1BC SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x26E JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP2 SWAP1 PUSH2 0x3E4 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2AB DUP2 PUSH2 0x4C4 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2C8 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x2D9 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x2E9 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP2 ADD DUP6 ADD DUP4 DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x308 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP2 DUP5 ADD DUP6 ADD DUP10 LT ISZERO PUSH2 0x31E JUMPI DUP6 DUP7 REVERT JUMPDEST DUP4 DUP6 DUP4 ADD DUP7 DUP4 ADD CALLDATACOPY DUP6 DUP6 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x359 DUP2 PUSH2 0x4C4 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x389 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3A2 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x498 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP 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 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x403 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x498 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x49B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xB7 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 DUP2 PUSH12 0x29056F082F00B1BC5E52E7EF PUSH7 0xD9AC5007049A4 GASLIMIT DUP3 0xAC DUP11 PUSH14 0x2F32543564736F6C634300060A00 CALLER ",
+ "sourceMap": "438:464:75:-:0;;;567:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;611:4;:28;;-1:-1:-1;;;;;;611:28:75;-1:-1:-1;;;;;611:28:75;;;;;;;;;;438:464;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186;;438:464:75;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c80633fc8cef31461003b5780639c23da5014610059575b600080fd5b61004361006e565b60405161005091906103d0565b60405180910390f35b61006c61006736600461028e565b61007d565b005b6000546001600160a01b031681565b60008082806020019051810190610094919061033c565b60005491935091506100b7906001600160a01b031683308463ffffffff6100bd16565b50505050565b6100b7846323b872dd60e01b8585856040516024016100de939291906103ac565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060610165826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166101ad9092919063ffffffff16565b8051909150156101a857808060200190518101906101839190610369565b6101a85760405162461bcd60e51b815260040161019f9061044e565b60405180910390fd5b505050565b60606101bc84846000856101c4565b949350505050565b60606101cf85610288565b6101eb5760405162461bcd60e51b815260040161019f90610417565b60006060866001600160a01b031685876040516102089190610390565b60006040518083038185875af1925050503d8060008114610245576040519150601f19603f3d011682016040523d82523d6000602084013e61024a565b606091505b5091509150811561025e5791506101bc9050565b80511561026e5780518082602001fd5b8360405162461bcd60e51b815260040161019f91906103e4565b3b151590565b600080604083850312156102a0578182fd5b82356102ab816104c4565b915060208381013567ffffffffffffffff808211156102c8578384fd5b81860187601f8201126102d9578485fd5b80359250818311156102e9578485fd5b604051601f8401601f1916810185018381118282101715610308578687fd5b604052838152818401850189101561031e578586fd5b83858301868301378585858301015280955050505050509250929050565b6000806040838503121561034e578182fd5b8251610359816104c4565b6020939093015192949293505050565b60006020828403121561037a578081fd5b81518015158114610389578182fd5b9392505050565b600082516103a2818460208701610498565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0391909116815260200190565b6000602082528251806020840152610403816040850160208701610498565b601f01601f19169190910160400192915050565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b838110156104b357818101518382015260200161049b565b838111156100b75750506000910152565b6001600160a01b03811681146104d957600080fd5b5056fea2646970667358221220e0816b29056f082f00b1bc5e52e7ef660d9ac5007049a44582ac8a6d2f32543564736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x6E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x3D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0x67 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E JUMP JUMPDEST PUSH2 0x7D JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x94 SWAP2 SWAP1 PUSH2 0x33C JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH2 0xB7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 ADDRESS DUP5 PUSH4 0xFFFFFFFF PUSH2 0xBD AND JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xB7 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xDE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3AC 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 PUSH1 0x60 PUSH2 0x165 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 0x1AD SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1A8 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0x369 JUMP JUMPDEST PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x44E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1BC DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1C4 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1CF DUP6 PUSH2 0x288 JUMP JUMPDEST PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x417 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x208 SWAP2 SWAP1 PUSH2 0x390 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 0x245 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 0x24A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x25E JUMPI SWAP2 POP PUSH2 0x1BC SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x26E JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP2 SWAP1 PUSH2 0x3E4 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2AB DUP2 PUSH2 0x4C4 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2C8 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x2D9 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x2E9 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP2 ADD DUP6 ADD DUP4 DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x308 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP2 DUP5 ADD DUP6 ADD DUP10 LT ISZERO PUSH2 0x31E JUMPI DUP6 DUP7 REVERT JUMPDEST DUP4 DUP6 DUP4 ADD DUP7 DUP4 ADD CALLDATACOPY DUP6 DUP6 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x359 DUP2 PUSH2 0x4C4 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x389 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3A2 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x498 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP 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 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x403 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x498 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x49B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xB7 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 DUP2 PUSH12 0x29056F082F00B1BC5E52E7EF PUSH7 0xD9AC5007049A4 GASLIMIT DUP3 0xAC DUP11 PUSH14 0x2F32543564736F6C634300060A00 CALLER ",
+ "sourceMap": "438:464:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;534:26;;;:::i;:::-;;;;;;;;;;;;;;;;675:225;;;;;;;;;:::i;:::-;;534:26;;;-1:-1:-1;;;;;534:26:75;;:::o;675:225::-;763:12;777:14;806:5;795:37;;;;;;;;;;;;;;843:4;;762:70;;-1:-1:-1;762:70:75;-1:-1:-1;843:50:75;;-1:-1:-1;;;;;843:4:75;762:70;879:4;762:70;843:50;:21;:50;:::i;:::-;675:225;;;;:::o;982:249:50:-;1128:96;1148:5;1178:27;;;1207:4;1213:2;1217:5;1155:68;;;;;;;;;;;;;;;-1:-1:-1;;1155:68:50;;;;;;;;;;;;;;-1:-1:-1;;;;;1155:68:50;-1:-1:-1;;;;;;1155:68:50;;;;;;;;;;3706:23;3732:69;3760:4;3732:69;;;;;;;;;;;;;;;;;3740:5;-1:-1:-1;;;;;3732:27:50;;;:69;;;;;:::i;:::-;3815:17;;3706:95;;-1:-1:-1;3815:21:50;3811:233;;3967:10;3956:30;;;;;;;;;;;;;;3948:85;;;;-1:-1:-1;;;3948:85:50;;;;;;;;;;;;;;;;;3279:771;;;:::o;3626:224:45:-;3759:12;3790:53;3813:6;3821:4;3827:1;3830:12;3790:22;:53::i;:::-;3783:60;3626:224;-1:-1:-1;;;;3626:224:45:o;5071:994::-;5239:12;5271:18;5282:6;5271:10;:18::i;:::-;5263:60;;;;-1:-1:-1;;;5263:60:45;;;;;;;;;5394:12;5408:23;5435:6;-1:-1:-1;;;;;5435:11:45;5454:8;5464:4;5435:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:76;;;;5483:7;5479:580;;;5513:10;-1:-1:-1;5506:17:45;;-1:-1:-1;5506:17:45;5479:580;5624:17;;:21;5620:429;;5882:10;5876:17;5942:15;5929:10;5925:2;5921:19;5914:44;5831:145;6021:12;6014:20;;-1:-1:-1;;;6014:20:45;;;;;;;;;751:433;1123:20;1169:8;;;751:433::o;1040:486:-1:-;;;1178:2;1166:9;1157:7;1153:23;1149:32;1146:2;;;-1:-1;;1184:12;1146:2;93:6;80:20;105:41;140:5;105:41;;;1236:71;-1:-1;1372:2;1357:18;;;1344:32;1396:18;1385:30;;;1382:2;;;-1:-1;;1418:12;1382:2;1493:6;1482:9;1478:22;552:3;545:4;537:6;533:17;529:27;519:2;;-1:-1;;560:12;519:2;607:6;594:20;580:34;;1396:18;6646:6;6643:30;6640:2;;;-1:-1;;6676:12;6640:2;1178;6304:9;6749;6730:17;;-1:-1;;6726:33;6336:17;;;;6396:34;;;6432:22;;;6393:62;6390:2;;;-1:-1;;6458:12;6390:2;1178;6477:22;699:21;;;799:16;;;;;796:25;-1:-1;793:2;;;-1:-1;;824:12;793:2;8318:6;1372:2;741:6;737:17;1372:2;775:5;771:16;8295:30;-1:-1;1372:2;8365:6;775:5;8356:16;;8349:27;1438:72;;;;;;;;1140:386;;;;;;1533:415;;;1673:2;1661:9;1652:7;1648:23;1644:32;1641:2;;;-1:-1;;1679:12;1641:2;250:6;244:13;262:41;297:5;262:41;;;1850:2;1900:22;;;;977:13;1731:82;;977:13;;-1:-1;;;1635:313;1955:257;;2067:2;2055:9;2046:7;2042:23;2038:32;2035:2;;;-1:-1;;2073:12;2035:2;396:6;390:13;8993:5;7691:13;7684:21;8971:5;8968:32;8958:2;;-1:-1;;9004:12;8958:2;2125:71;2029:183;-1:-1;;;2029:183;4081:271;;2499:5;6926:12;2610:52;2655:6;2650:3;2643:4;2636:5;2632:16;2610:52;;;2674:16;;;;;4215:137;-1:-1;;4215:137;4359:444;-1:-1;;;;;7779:54;;;2290:37;;7779:54;;;;4706:2;4691:18;;2290:37;4789:2;4774:18;;4032:37;;;;4542:2;4527:18;;4513:290;4810:268;-1:-1;;;;;7779:54;;;;2796:73;;4960:2;4945:18;;4931:147;5085:310;;5232:2;5253:17;5246:47;3026:5;6926:12;7365:6;5232:2;5221:9;5217:18;7353:19;3120:52;3165:6;7393:14;5221:9;7393:14;5232:2;3146:5;3142:16;3120:52;;;6749:9;8735:14;-1:-1;;8731:28;3184:39;;;;7393:14;3184:39;;5203:192;-1:-1;;5203:192;5402:416;5602:2;5616:47;;;3460:2;5587:18;;;7353:19;3496:31;7393:14;;;3476:52;3547:12;;;5573:245;5825:416;6025:2;6039:47;;;3798:2;6010:18;;;7353:19;3834:34;7393:14;;;3814:55;-1:-1;;;3889:12;;;3882:34;3935:12;;;5996:245;8391:268;8456:1;8463:101;8477:6;8474:1;8471:13;8463:101;;;8544:11;;;8538:18;8525:11;;;8518:39;8499:2;8492:10;8463:101;;;8579:6;8576:1;8573:13;8570:2;;;-1:-1;;8456:1;8626:16;;8619:27;8440:219;8772:133;-1:-1;;;;;7779:54;;8839:43;;8829:2;;8896:1;;8886:12;8829:2;8823:82;"
+ },
+ "methodIdentifiers": {
+ "callFunction(address,bytes)": "9c23da50",
+ "weth()": "3fc8cef3"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"callFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract ERC20Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{},\"title\":\"CalleeAllowanceTester\"},\"userdoc\":{\"methods\":{},\"notice\":\"contract test if we can successfully pull weth from the payable proxy\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/CalleeAllowanceTester.sol\":\"CalleeAllowanceTester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/tests/CalleeAllowanceTester.sol\":{\"keccak256\":\"0xf942483c4e57c6d5dd32e91bce43be4e7e05b1613306968651be7ef907428dd5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://525a2a93006d71d5b978c9645005dfabd2af50178699e492f0a6a4efaf2dff2d\",\"dweb:/ipfs/Qmdopt77PAac78NerF4ycvE3VqvJhg5HUT7sfzQLCo7QTi\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/FixedPointInt256Tester.sol": {
+ "FixedPointInt256Tester": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testAdd",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testDiv",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "a",
+ "type": "int256"
+ }
+ ],
+ "name": "testFromUnscaledInt",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testIsEqual",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testIsGreaterThan",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testIsGreaterThanOrEqual",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testIsLessThan",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testIsLessThanOrEqual",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testMax",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testMin",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testMul",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "a",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "b",
+ "type": "tuple"
+ }
+ ],
+ "name": "testSub",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "int256",
+ "name": "value",
+ "type": "int256"
+ }
+ ],
+ "internalType": "struct FixedPointInt256.FixedPointInt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506106d5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80639e66c670116100715780639e66c6701461014e578063aec27bb714610161578063c325f86614610174578063d493105314610187578063d6ff0a9f1461019a578063eab39de7146101ad576100b4565b80631c604bd6146100b95780632284f80c146100e25780634a3b852514610102578063746398161461011557806385f547ff146101285780638cd1332a1461013b575b600080fd5b6100cc6100c736600461058a565b6101c0565b6040516100d991906105be565b60405180910390f35b6100f56100f036600461058a565b6101db565b6040516100d99190610695565b6100cc61011036600461058a565b6101f3565b6100f561012336600461058a565b610205565b6100f561013636600461058a565b61021d565b6100cc61014936600461058a565b610235565b6100cc61015c36600461058a565b610247565b6100cc61016f36600461058a565b610259565b6100f561018236600461058a565b61026b565b6100f5610195366004610572565b610283565b6100f56101a836600461058a565b610294565b6100f56101bb36600461058a565b6102a6565b60006101d2838363ffffffff6102b816565b90505b92915050565b6101e3610522565b6101d2838363ffffffff6102c016565b60006101d2838363ffffffff6102f216565b61020d610522565b6101d2838363ffffffff6102fa16565b610225610522565b6101d2838363ffffffff61034116565b60006101d2838363ffffffff61037716565b60006101d2838363ffffffff61037e16565b60006101d2838363ffffffff61038516565b610273610522565b6101d2838363ffffffff61038c16565b61028b610522565b6101d5826103b5565b61029c610522565b6101d283836103ed565b6102ae610522565b6101d2838361040b565b519051121590565b6102c8610522565b60408051602081019091528251845182916102e9919063ffffffff61042216565b90529392505050565b519051131590565b610302610522565b604080516020810190915282518451829190610330906b033b2e3c9fd0803ce800000063ffffffff61047116565b8161033757fe5b0590529392505050565b610349610522565b60408051602081019091528251845182916b033b2e3c9fd0803ce8000000916103309163ffffffff61047116565b5190511390565b5190511290565b5190511490565b610394610522565b60408051602081019091528251845182916102e9919063ffffffff6104dc16565b6103bd610522565b6040805160208101909152806103e5846b033b2e3c9fd0803ce800000063ffffffff61047116565b905292915050565b6103f5610522565b815183511361040457816101d2565b5090919050565b610413610522565b815183511261040457816101d2565b60008282018183128015906104375750838112155b8061044c575060008312801561044c57508381125b6101d25760405162461bcd60e51b8152600401610468906105c9565b60405180910390fd5b600082610480575060006101d5565b826000191480156104945750600160ff1b82145b156104b15760405162461bcd60e51b81526004016104689061060a565b828202828482816104be57fe5b05146101d25760405162461bcd60e51b81526004016104689061060a565b60008183038183128015906104f15750838113155b80610506575060008312801561050657508381135b6101d25760405162461bcd60e51b815260040161046890610651565b6040518060200160405280600081525090565b600060208284031215610546578081fd5b6040516020810181811067ffffffffffffffff82111715610565578283fd5b6040529135825250919050565b600060208284031215610583578081fd5b5035919050565b6000806040838503121561059c578081fd5b6105a68484610535565b91506105b58460208501610535565b90509250929050565b901515815260200190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b905181526020019056fea2646970667358221220579cde6e35f38282c19b222095c4afa3df6bfc354e3f495b43c3f80e325e320b64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D5 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 0x9E66C670 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x9E66C670 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0xAEC27BB7 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xC325F866 EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xD4931053 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0xD6FF0A9F EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xEAB39DE7 EQ PUSH2 0x1AD JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x1C604BD6 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x2284F80C EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x4A3B8525 EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x74639816 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x85F547FF EQ PUSH2 0x128 JUMPI DUP1 PUSH4 0x8CD1332A EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x1C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x695 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x110 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x1F3 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x205 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x136 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x21D JUMP JUMPDEST PUSH2 0xCC PUSH2 0x149 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x235 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x15C CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x247 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x259 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x26B JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x195 CALLDATASIZE PUSH1 0x4 PUSH2 0x572 JUMP JUMPDEST PUSH2 0x283 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x294 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x2A6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B8 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1E3 PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2C0 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2F2 AND JUMP JUMPDEST PUSH2 0x20D PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2FA AND JUMP JUMPDEST PUSH2 0x225 PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x341 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x377 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x37E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x385 AND JUMP JUMPDEST PUSH2 0x273 PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x38C AND JUMP JUMPDEST PUSH2 0x28B PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D5 DUP3 PUSH2 0x3B5 JUMP JUMPDEST PUSH2 0x29C PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH2 0x3ED JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH2 0x40B JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x2E9 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x422 AND JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x302 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 SWAP1 PUSH2 0x330 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x471 AND JUMP JUMPDEST DUP2 PUSH2 0x337 JUMPI INVALID JUMPDEST SDIV SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x349 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 PUSH2 0x330 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x471 AND JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT SWAP1 JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT SWAP1 JUMP JUMPDEST MLOAD SWAP1 MLOAD EQ SWAP1 JUMP JUMPDEST PUSH2 0x394 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x2E9 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x4DC AND JUMP JUMPDEST PUSH2 0x3BD PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP1 PUSH2 0x3E5 DUP5 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x471 AND JUMP JUMPDEST SWAP1 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3F5 PUSH2 0x522 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SGT PUSH2 0x404 JUMPI DUP2 PUSH2 0x1D2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x413 PUSH2 0x522 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SLT PUSH2 0x404 JUMPI DUP2 PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x437 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x44C JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x44C JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x5C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x480 JUMPI POP PUSH1 0x0 PUSH2 0x1D5 JUMP JUMPDEST DUP3 PUSH1 0x0 NOT EQ DUP1 ISZERO PUSH2 0x494 JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ JUMPDEST ISZERO PUSH2 0x4B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x60A JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x4BE JUMPI INVALID JUMPDEST SDIV EQ PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x60A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x4F1 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x506 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x506 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x651 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x546 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x565 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x583 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5A6 DUP5 DUP5 PUSH2 0x535 JUMP JUMPDEST SWAP2 POP PUSH2 0x5B5 DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x535 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206D756C7469706C69636174696F6E206F PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x766572666C6F77 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI SWAP13 0xDE PUSH15 0x35F38282C19B222095C4AFA3DF6BFC CALLDATALOAD 0x4E EXTCODEHASH 0x49 JUMPDEST NUMBER 0xC3 0xF8 0xE ORIGIN 0x5E ORIGIN SIGNEXTEND PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "220:2736:76:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c80639e66c670116100715780639e66c6701461014e578063aec27bb714610161578063c325f86614610174578063d493105314610187578063d6ff0a9f1461019a578063eab39de7146101ad576100b4565b80631c604bd6146100b95780632284f80c146100e25780634a3b852514610102578063746398161461011557806385f547ff146101285780638cd1332a1461013b575b600080fd5b6100cc6100c736600461058a565b6101c0565b6040516100d991906105be565b60405180910390f35b6100f56100f036600461058a565b6101db565b6040516100d99190610695565b6100cc61011036600461058a565b6101f3565b6100f561012336600461058a565b610205565b6100f561013636600461058a565b61021d565b6100cc61014936600461058a565b610235565b6100cc61015c36600461058a565b610247565b6100cc61016f36600461058a565b610259565b6100f561018236600461058a565b61026b565b6100f5610195366004610572565b610283565b6100f56101a836600461058a565b610294565b6100f56101bb36600461058a565b6102a6565b60006101d2838363ffffffff6102b816565b90505b92915050565b6101e3610522565b6101d2838363ffffffff6102c016565b60006101d2838363ffffffff6102f216565b61020d610522565b6101d2838363ffffffff6102fa16565b610225610522565b6101d2838363ffffffff61034116565b60006101d2838363ffffffff61037716565b60006101d2838363ffffffff61037e16565b60006101d2838363ffffffff61038516565b610273610522565b6101d2838363ffffffff61038c16565b61028b610522565b6101d5826103b5565b61029c610522565b6101d283836103ed565b6102ae610522565b6101d2838361040b565b519051121590565b6102c8610522565b60408051602081019091528251845182916102e9919063ffffffff61042216565b90529392505050565b519051131590565b610302610522565b604080516020810190915282518451829190610330906b033b2e3c9fd0803ce800000063ffffffff61047116565b8161033757fe5b0590529392505050565b610349610522565b60408051602081019091528251845182916b033b2e3c9fd0803ce8000000916103309163ffffffff61047116565b5190511390565b5190511290565b5190511490565b610394610522565b60408051602081019091528251845182916102e9919063ffffffff6104dc16565b6103bd610522565b6040805160208101909152806103e5846b033b2e3c9fd0803ce800000063ffffffff61047116565b905292915050565b6103f5610522565b815183511361040457816101d2565b5090919050565b610413610522565b815183511261040457816101d2565b60008282018183128015906104375750838112155b8061044c575060008312801561044c57508381125b6101d25760405162461bcd60e51b8152600401610468906105c9565b60405180910390fd5b600082610480575060006101d5565b826000191480156104945750600160ff1b82145b156104b15760405162461bcd60e51b81526004016104689061060a565b828202828482816104be57fe5b05146101d25760405162461bcd60e51b81526004016104689061060a565b60008183038183128015906104f15750838113155b80610506575060008312801561050657508381135b6101d25760405162461bcd60e51b815260040161046890610651565b6040518060200160405280600081525090565b600060208284031215610546578081fd5b6040516020810181811067ffffffffffffffff82111715610565578283fd5b6040529135825250919050565b600060208284031215610583578081fd5b5035919050565b6000806040838503121561059c578081fd5b6105a68484610535565b91506105b58460208501610535565b90509250929050565b901515815260200190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b905181526020019056fea2646970667358221220579cde6e35f38282c19b222095c4afa3df6bfc354e3f495b43c3f80e325e320b64736f6c634300060a0033",
+ "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 0x9E66C670 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x9E66C670 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0xAEC27BB7 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xC325F866 EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xD4931053 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0xD6FF0A9F EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xEAB39DE7 EQ PUSH2 0x1AD JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x1C604BD6 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x2284F80C EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x4A3B8525 EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x74639816 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x85F547FF EQ PUSH2 0x128 JUMPI DUP1 PUSH4 0x8CD1332A EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x1C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x695 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x110 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x1F3 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x205 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x136 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x21D JUMP JUMPDEST PUSH2 0xCC PUSH2 0x149 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x235 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x15C CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x247 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x259 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x26B JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x195 CALLDATASIZE PUSH1 0x4 PUSH2 0x572 JUMP JUMPDEST PUSH2 0x283 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x294 JUMP JUMPDEST PUSH2 0xF5 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x58A JUMP JUMPDEST PUSH2 0x2A6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B8 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1E3 PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2C0 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2F2 AND JUMP JUMPDEST PUSH2 0x20D PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2FA AND JUMP JUMPDEST PUSH2 0x225 PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x341 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x377 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x37E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x385 AND JUMP JUMPDEST PUSH2 0x273 PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x38C AND JUMP JUMPDEST PUSH2 0x28B PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D5 DUP3 PUSH2 0x3B5 JUMP JUMPDEST PUSH2 0x29C PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH2 0x3ED JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x522 JUMP JUMPDEST PUSH2 0x1D2 DUP4 DUP4 PUSH2 0x40B JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x2E9 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x422 AND JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x302 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 SWAP1 PUSH2 0x330 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x471 AND JUMP JUMPDEST DUP2 PUSH2 0x337 JUMPI INVALID JUMPDEST SDIV SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x349 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 PUSH2 0x330 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x471 AND JUMP JUMPDEST MLOAD SWAP1 MLOAD SGT SWAP1 JUMP JUMPDEST MLOAD SWAP1 MLOAD SLT SWAP1 JUMP JUMPDEST MLOAD SWAP1 MLOAD EQ SWAP1 JUMP JUMPDEST PUSH2 0x394 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP5 MLOAD DUP3 SWAP2 PUSH2 0x2E9 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x4DC AND JUMP JUMPDEST PUSH2 0x3BD PUSH2 0x522 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP1 PUSH2 0x3E5 DUP5 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH4 0xFFFFFFFF PUSH2 0x471 AND JUMP JUMPDEST SWAP1 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3F5 PUSH2 0x522 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SGT PUSH2 0x404 JUMPI DUP2 PUSH2 0x1D2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x413 PUSH2 0x522 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD SLT PUSH2 0x404 JUMPI DUP2 PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x437 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x44C JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x44C JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x5C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x480 JUMPI POP PUSH1 0x0 PUSH2 0x1D5 JUMP JUMPDEST DUP3 PUSH1 0x0 NOT EQ DUP1 ISZERO PUSH2 0x494 JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ JUMPDEST ISZERO PUSH2 0x4B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x60A JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x4BE JUMPI INVALID JUMPDEST SDIV EQ PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x60A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x4F1 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x506 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x506 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x468 SWAP1 PUSH2 0x651 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x546 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x565 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x583 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5A6 DUP5 DUP5 PUSH2 0x535 JUMP JUMPDEST SWAP2 POP PUSH2 0x5B5 DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x535 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206D756C7469706C69636174696F6E206F PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x766572666C6F77 PUSH1 0xC8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI SWAP13 0xDE PUSH15 0x35F38282C19B222095C4AFA3DF6BFC CALLDATALOAD 0x4E EXTCODEHASH 0x49 JUMPDEST NUMBER 0xC3 0xF8 0xE ORIGIN 0x5E ORIGIN SIGNEXTEND PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "220:2736:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2302:222;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;488:221;;;;;;;;;:::i;:::-;;;;;;;;2738:216;;;;;;;;;:::i;1169:221::-;;;;;;;;;:::i;942:::-;;;;;;;;;:::i;2088:208::-;;;;;;;;;:::i;2530:202::-;;;;;;;;;:::i;1886:196::-;;;;;;;;;:::i;715:221::-;;;;;;;;;:::i;322:160::-;;;;;;;;;:::i;1641:239::-;;;;;;;;;:::i;1396:::-;;;;;;;;;:::i;2302:222::-;2465:4;2492:25;:1;2515;2492:25;:22;:25;:::i;:::-;2485:32;;2302:222;;;;;:::o;488:221::-;634:37;;:::i;:::-;694:8;:1;700;694:8;:5;:8;:::i;2738:216::-;2898:4;2925:22;:1;2945;2925:22;:19;:22;:::i;1169:221::-;1315:37;;:::i;:::-;1375:8;:1;1381;1375:8;:5;:8;:::i;942:221::-;1088:37;;:::i;:::-;1148:8;:1;1154;1148:8;:5;:8;:::i;2088:208::-;2244:4;2271:18;:1;2287;2271:18;:15;:18;:::i;2530:202::-;2683:4;2710:15;:1;2723;2710:15;:12;:15;:::i;1886:196::-;2036:4;2063:12;:1;2073;2063:12;:9;:12;:::i;715:221::-;861:37;;:::i;:::-;921:8;:1;927;921:8;:5;:8;:::i;322:160::-;384:37;;:::i;:::-;440:35;473:1;440:32;:35::i;1641:239::-;1787:37;;:::i;:::-;1847:26;1868:1;1871;1847:20;:26::i;1396:239::-;1542:37;;:::i;:::-;1602:26;1623:1;1626;1602:20;:26::i;6102:149:27:-;6237:7;6226;;:18;;;6102:149::o;3427:165::-;3511:20;;:::i;:::-;3550:35;;;;;;;;;3576:7;;3564;;3550:35;;3564:20;;:7;:20;:11;:20;:::i;:::-;3550:35;;3543:42;3427:165;-1:-1:-1;;;3427:165:27:o;6719:146::-;6851:7;6840;;:18;;;6719:146::o;4471:184::-;4555:20;;:::i;:::-;4594:54;;;;;;;;;4640:7;;4609;;4594:54;;4640:7;4609:27;;498:4;4609:27;:11;:27;:::i;:::-;4608:39;;;;;;4594:54;;4587:61;4471:184;-1:-1:-1;;;4471:184:27:o;4113:::-;4197:20;;:::i;:::-;4236:54;;;;;;;;;4263:7;;4251;;4236:54;;498:4;;4251:20;;;:11;:20;:::i;5788:141::-;5915:7;5905;;:17;;5788:141::o;6411:138::-;6535:7;6525;;:17;;6411:138::o;5492:136::-;5614:7;5603;;:18;;5492:136::o;3772:165::-;3856:20;;:::i;:::-;3895:35;;;;;;;;;3921:7;;3909;;3895:35;;3909:20;;:7;:20;:11;:20;:::i;835:140::-;893:20;;:::i;:::-;932:36;;;;;;;;;;946:21;:1;498:4;946:21;:5;:21;:::i;:::-;932:36;;925:43;835:140;-1:-1:-1;;835:140:27:o;5178:155::-;5262:20;;:::i;:::-;5311:7;;5301;;:17;:25;;5325:1;5301:25;;;-1:-1:-1;5321:1:27;;5178:155;-1:-1:-1;5178:155:27:o;4839:::-;4923:20;;:::i;:::-;4972:7;;4962;;:17;:25;;4986:1;4962:25;;2501:210:52;2557:6;2586:5;;;2610:6;;;;;;:16;;;2625:1;2620;:6;;2610:16;2609:38;;;;2636:1;2632;:5;:14;;;;;2645:1;2641;:5;2632:14;2601:84;;;;-1:-1:-1;;;2601:84:52;;;;;;;;;;;;;;;;538:554;594:6;834;830:45;;-1:-1:-1;863:1:52;856:8;;830:45;895:1;-1:-1:-1;;895:7:52;:27;;;;;-1:-1:-1;;;906:1:52;:16;895:27;893:30;885:82;;;;-1:-1:-1;;;885:82:52;;;;;;;;;989:5;;;993:1;989;:5;:1;1012:5;;;;;:10;1004:62;;;;-1:-1:-1;;;1004:62:52;;;;;;;;2055:213;2111:6;2140:5;;;2164:6;;;;;;:16;;;2179:1;2174;:6;;2164:16;2163:38;;;;2190:1;2186;:5;:14;;;;;2199:1;2195;:5;2186:14;2155:87;;;;-1:-1:-1;;;2155:87:52;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;:::o;184:330::-;;305:4;293:9;288:3;284:19;280:30;277:2;;;-1:-1;;313:12;277:2;4964;4958:9;305:4;4994:6;4990:17;5101:6;5089:10;5086:22;5065:18;5053:10;5050:34;5047:62;5044:2;;;-1:-1;;5112:12;5044:2;4964;5131:22;71:20;;419:74;;-1:-1;332:29;271:243;-1:-1;271:243;521:239;;624:2;612:9;603:7;599:23;595:32;592:2;;;-1:-1;;630:12;592:2;-1:-1;71:20;;586:174;-1:-1;586:174;767:494;;;952:2;940:9;931:7;927:23;923:32;920:2;;;-1:-1;;958:12;920:2;1020:85;1097:7;1073:22;1020:85;;;1010:95;;1160:85;1237:7;1142:2;1217:9;1213:22;1160:85;;;1150:95;;914:347;;;;;;3059:210;5403:13;;5396:21;1333:34;;3180:2;3165:18;;3151:118;3276:416;3476:2;3490:47;;;1711:2;3461:18;;;5269:19;1747:34;5309:14;;;1727:55;-1:-1;;;1802:12;;;1795:25;1839:12;;;3447:245;3699:416;3899:2;3913:47;;;2090:2;3884:18;;;5269:19;2126:34;5309:14;;;2106:55;-1:-1;;;2181:12;;;2174:31;2224:12;;;3870:245;4122:416;4322:2;4336:47;;;2475:2;4307:18;;;5269:19;2511:34;5309:14;;;2491:55;-1:-1;;;2566:12;;;2559:28;2606:12;;;4293:245;4545:350;2941:23;;1438:36;;4736:2;4721:18;;4707:188"
+ },
+ "methodIdentifiers": {
+ "testAdd((int256),(int256))": "2284f80c",
+ "testDiv((int256),(int256))": "74639816",
+ "testFromUnscaledInt(int256)": "d4931053",
+ "testIsEqual((int256),(int256))": "aec27bb7",
+ "testIsGreaterThan((int256),(int256))": "8cd1332a",
+ "testIsGreaterThanOrEqual((int256),(int256))": "1c604bd6",
+ "testIsLessThan((int256),(int256))": "9e66c670",
+ "testIsLessThanOrEqual((int256),(int256))": "4a3b8525",
+ "testMax((int256),(int256))": "d6ff0a9f",
+ "testMin((int256),(int256))": "eab39de7",
+ "testMul((int256),(int256))": "85f547ff",
+ "testSub((int256),(int256))": "c325f866"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testAdd\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testDiv\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"a\",\"type\":\"int256\"}],\"name\":\"testFromUnscaledInt\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testIsEqual\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testIsGreaterThan\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testIsGreaterThanOrEqual\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testIsLessThan\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testIsLessThanOrEqual\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testMax\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testMin\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testMul\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"testSub\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"internalType\":\"struct FixedPointInt256.FixedPointInt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"FixedPointInt256 contract tester\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/FixedPointInt256Tester.sol\":\"FixedPointInt256Tester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/FixedPointInt256.sol\":{\"keccak256\":\"0x430dc07238bfc5b1c422ac67366b7bf7cfeb7ff64f158bf0b5293a21aa4bb2ab\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fdd0edd9eb050609f26da31fb5d6e8e610a6aadaf7b751224b31aa9f656bfcf0\",\"dweb:/ipfs/QmbmZEW49thzmKqUUqdcEFwLahx5REXQZ4kQMBr1yfc1XB\"]},\"contracts/libs/SignedConverter.sol\":{\"keccak256\":\"0xcd580557dc2c337a870d632b1120f2ec0f7494056d48620598a11d09418dcfa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cfa5fb05fa755dde57c74abf107eaf806794c48fa571cf17abaf856074fddd30\",\"dweb:/ipfs/QmV5L5XdK6BwmKDxj4zqPVh7MnHJeY8pUxZ2JLHqzW1B22\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/packages/oz/SignedSafeMath.sol\":{\"keccak256\":\"0x5c37725e4c762112901151ff9fbd6678f2edd936666f987d0904865b528647e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://072c740989fea30fe46f9410377697fafadc8b79a0c297a0ebfbd38f5a40f305\",\"dweb:/ipfs/QmSb7ggwKV5LU9QDHHZ6tUDUEhCyiFEoD12ZS4FFFnqjkF\"]},\"contracts/tests/FixedPointInt256Tester.sol\":{\"keccak256\":\"0xdd82534e8d387050284003c73b4728291e1ae786379a3a0cea780e11e4ba2e36\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4cccbe194c97da06f7da16cb568f4731c45f2a55b5dccc175d7cf6874a5ee48c\",\"dweb:/ipfs/QmUfsDDJaUpZKfknTyqDfnw1CCyN3LCringRYw1GGCuVtx\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/FlashUnwrap.sol": {
+ "FlashUnwrap": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "weth",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "UnwrappedETH",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "WrappedETH",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "contract WETH9",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "_sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "callFunction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506040516104d83803806104d883398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b610447806100916000396000f3fe60806040526004361061002d5760003560e01c80639c23da5014610039578063ad5c46481461005b57610034565b3661003457005b600080fd5b34801561004557600080fd5b50610059610054366004610251565b610086565b005b34801561006757600080fd5b5061007061022f565b60405161007d9190610383565b60405180910390f35b60208151146100b05760405162461bcd60e51b81526004016100a790610397565b60405180910390fd5b6100b861023e565b818060200190518101906100cc9190610321565b60005481516040516323b872dd60e01b81529293506001600160a01b03909116916323b872dd916101039187913091600401610346565b602060405180830381600087803b15801561011d57600080fd5b505af1158015610131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015591906102fa565b506000548151604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d91610186916004016103e1565b600060405180830381600087803b1580156101a057600080fd5b505af11580156101b4573d6000803e3d6000fd5b505082516040516001600160a01b038716935081156108fc0292506000818181858888f193505050501580156101ee573d6000803e3d6000fd5b5080516040517f6faea7d16ca41ff2745533919e5496e9f1d5f318b5dfa1dbd623a7a9b665c448916102229186919061036a565b60405180910390a1505050565b6000546001600160a01b031681565b6040518060200160405280600081525090565b60008060408385031215610263578182fd5b82356001600160a01b0381168114610279578283fd5b915060208381013567ffffffffffffffff80821115610296578384fd5b81860187601f8201126102a7578485fd5b80359250818311156102b7578485fd5b6102c9601f8401601f191685016103ea565b915082825287848483010111156102de578485fd5b8284820185840137509081019091019190915290939092509050565b60006020828403121561030b578081fd5b8151801515811461031a578182fd5b9392505050565b600060208284031215610332578081fd5b61033c60206103ea565b9151825250919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0391909116815260200190565b6020808252602a908201527f466c617368556e777261703a2063616e6e6f742070617273652043616c6c46756040820152696e6374696f6e4461746160b01b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561040957600080fd5b60405291905056fea26469706673582212206be6e3f5f45da638808216c23693fb1d7854894fd5f2e69641fb9eac9b83f1ba64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x4D8 CODESIZE SUB DUP1 PUSH2 0x4D8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 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 PUSH2 0x82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x447 DUP1 PUSH2 0x91 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x5B JUMPI PUSH2 0x34 JUMP JUMPDEST CALLDATASIZE PUSH2 0x34 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x251 JUMP JUMPDEST PUSH2 0x86 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x22F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7D SWAP2 SWAP1 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x20 DUP2 MLOAD EQ PUSH2 0xB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7 SWAP1 PUSH2 0x397 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB8 PUSH2 0x23E JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC SWAP2 SWAP1 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH2 0x103 SWAP2 DUP8 SWAP2 ADDRESS SWAP2 PUSH1 0x4 ADD PUSH2 0x346 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x155 SWAP2 SWAP1 PUSH2 0x2FA JUMP JUMPDEST POP PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH2 0x186 SWAP2 PUSH1 0x4 ADD PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP3 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP4 POP DUP2 ISZERO PUSH2 0x8FC MUL SWAP3 POP PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FAEA7D16CA41FF2745533919E5496E9F1D5F318B5DFA1DBD623A7A9B665C448 SWAP2 PUSH2 0x222 SWAP2 DUP7 SWAP2 SWAP1 PUSH2 0x36A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x263 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x279 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x296 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x2A7 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x2B7 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C9 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP6 ADD PUSH2 0x3EA JUMP JUMPDEST SWAP2 POP DUP3 DUP3 MSTORE DUP8 DUP5 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0x2DE JUMPI DUP5 DUP6 REVERT JUMPDEST DUP3 DUP5 DUP3 ADD DUP6 DUP5 ADD CALLDATACOPY POP SWAP1 DUP2 ADD SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x31A JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x332 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x33C PUSH1 0x20 PUSH2 0x3EA JUMP JUMPDEST SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP 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 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x466C617368556E777261703A2063616E6E6F742070617273652043616C6C4675 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x6E6374696F6E44617461 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0xE6E3F5F45DA638808216C236 SWAP4 0xFB SAR PUSH25 0x54894FD5F2E69641FB9EAC9B83F1BA64736F6C634300060A00 CALLER ",
+ "sourceMap": "491:1001:77:-:0;;;778:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;829:4;:18;;-1:-1:-1;;;;;;829:18:77;-1:-1:-1;;;;;829:18:77;;;;;;;;;;491:1001;;162:279:-1;;285:2;273:9;264:7;260:23;256:32;253:2;;;-1:-1;;291:12;253:2;91:13;;-1:-1;;;;;616:54;;749:43;;739:2;;-1:-1;;796:12;739:2;343:82;247:194;-1:-1;;;247:194;;491:1001:77;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "60806040526004361061002d5760003560e01c80639c23da5014610039578063ad5c46481461005b57610034565b3661003457005b600080fd5b34801561004557600080fd5b50610059610054366004610251565b610086565b005b34801561006757600080fd5b5061007061022f565b60405161007d9190610383565b60405180910390f35b60208151146100b05760405162461bcd60e51b81526004016100a790610397565b60405180910390fd5b6100b861023e565b818060200190518101906100cc9190610321565b60005481516040516323b872dd60e01b81529293506001600160a01b03909116916323b872dd916101039187913091600401610346565b602060405180830381600087803b15801561011d57600080fd5b505af1158015610131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015591906102fa565b506000548151604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d91610186916004016103e1565b600060405180830381600087803b1580156101a057600080fd5b505af11580156101b4573d6000803e3d6000fd5b505082516040516001600160a01b038716935081156108fc0292506000818181858888f193505050501580156101ee573d6000803e3d6000fd5b5080516040517f6faea7d16ca41ff2745533919e5496e9f1d5f318b5dfa1dbd623a7a9b665c448916102229186919061036a565b60405180910390a1505050565b6000546001600160a01b031681565b6040518060200160405280600081525090565b60008060408385031215610263578182fd5b82356001600160a01b0381168114610279578283fd5b915060208381013567ffffffffffffffff80821115610296578384fd5b81860187601f8201126102a7578485fd5b80359250818311156102b7578485fd5b6102c9601f8401601f191685016103ea565b915082825287848483010111156102de578485fd5b8284820185840137509081019091019190915290939092509050565b60006020828403121561030b578081fd5b8151801515811461031a578182fd5b9392505050565b600060208284031215610332578081fd5b61033c60206103ea565b9151825250919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0391909116815260200190565b6020808252602a908201527f466c617368556e777261703a2063616e6e6f742070617273652043616c6c46756040820152696e6374696f6e4461746160b01b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561040957600080fd5b60405291905056fea26469706673582212206be6e3f5f45da638808216c23693fb1d7854894fd5f2e69641fb9eac9b83f1ba64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9C23DA50 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x5B JUMPI PUSH2 0x34 JUMP JUMPDEST CALLDATASIZE PUSH2 0x34 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x251 JUMP JUMPDEST PUSH2 0x86 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x22F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7D SWAP2 SWAP1 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x20 DUP2 MLOAD EQ PUSH2 0xB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7 SWAP1 PUSH2 0x397 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB8 PUSH2 0x23E JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC SWAP2 SWAP1 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH2 0x103 SWAP2 DUP8 SWAP2 ADDRESS SWAP2 PUSH1 0x4 ADD PUSH2 0x346 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x155 SWAP2 SWAP1 PUSH2 0x2FA JUMP JUMPDEST POP PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH2 0x186 SWAP2 PUSH1 0x4 ADD PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP3 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP4 POP DUP2 ISZERO PUSH2 0x8FC MUL SWAP3 POP PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FAEA7D16CA41FF2745533919E5496E9F1D5F318B5DFA1DBD623A7A9B665C448 SWAP2 PUSH2 0x222 SWAP2 DUP7 SWAP2 SWAP1 PUSH2 0x36A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x263 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x279 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x296 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x2A7 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x2B7 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C9 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP6 ADD PUSH2 0x3EA JUMP JUMPDEST SWAP2 POP DUP3 DUP3 MSTORE DUP8 DUP5 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0x2DE JUMPI DUP5 DUP6 REVERT JUMPDEST DUP3 DUP5 DUP3 ADD DUP6 DUP5 ADD CALLDATACOPY POP SWAP1 DUP2 ADD SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x31A JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x332 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x33C PUSH1 0x20 PUSH2 0x3EA JUMP JUMPDEST SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP 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 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x466C617368556E777261703A2063616E6E6F742070617273652043616C6C4675 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x6E6374696F6E44617461 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0xE6E3F5F45DA638808216C236 SWAP4 0xFB SAR PUSH25 0x54894FD5F2E69641FB9EAC9B83F1BA64736F6C634300060A00 CALLER ",
+ "sourceMap": "491:1001:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1026:464;;;;;;;;;;-1:-1:-1;1026:464:77;;;;;;;;:::i;:::-;;693:17;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1026:464;684:2;1129:5;:12;:42;1121:97;;;;-1:-1:-1;;;1121:97:77;;;;;;;;;;;;;;;;;1229:27;;:::i;:::-;1270:5;1259:37;;;;;;;;;;;;;;1307:4;;1349:10;;1307:53;;-1:-1:-1;;;1307:53:77;;1229:67;;-1:-1:-1;;;;;;1307:4:77;;;;:17;;:53;;1325:7;;1342:4;;1307:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1370:4:77;;1384:10;;1370:25;;-1:-1:-1;;;1370:25:77;;-1:-1:-1;;;;;1370:4:77;;;;:13;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1423:10:77;;1406:28;;-1:-1:-1;;;;;1406:16:77;;;-1:-1:-1;1406:28:77;;;;;-1:-1:-1;1423:10:77;1406:28;1423:10;1406:28;1423:10;1406:16;:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1472:10:77;;1450:33;;;;;;1463:7;;1472:10;1450:33;;;;;;;;;;1026:464;;;:::o;693:17::-;;;-1:-1:-1;;;;;693:17:77;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;1289:486::-;;;1427:2;1415:9;1406:7;1402:23;1398:32;1395:2;;;-1:-1;;1433:12;1395:2;80:20;;-1:-1;;;;;6007:54;;7045:43;;7035:2;;-1:-1;;7092:12;7035:2;1485:71;-1:-1;1621:2;1606:18;;;1593:32;1645:18;1634:30;;;1631:2;;;-1:-1;;1667:12;1631:2;1742:6;1731:9;1727:22;395:3;388:4;380:6;376:17;372:27;362:2;;-1:-1;;403:12;362:2;450:6;437:20;423:34;;1645:18;5382:6;5379:30;5376:2;;;-1:-1;;5412:12;5376:2;472:64;5485:9;5466:17;;-1:-1;;5462:33;5543:15;;472:64;;;463:73;;556:6;549:5;542:21;660:3;1621:2;651:6;584;642:16;;639:25;636:2;;;-1:-1;;667:12;636:2;6906:6;1621:2;584:6;580:17;1621:2;618:5;614:16;6883:30;-1:-1;6944:16;;;;;;6937:27;;;;1389:386;;618:5;;-1:-1;1389:386;-1:-1;1389:386;1782:257;;1894:2;1882:9;1873:7;1869:23;1865:32;1862:2;;;-1:-1;;1900:12;1862:2;239:6;233:13;7199:5;5919:13;5912:21;7177:5;7174:32;7164:2;;-1:-1;;7210:12;7164:2;1952:71;1856:183;-1:-1;;;1856:183;2046:333;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;-1:-1;;2202:12;2164:2;955:20;2196:2;955:20;;;1226:13;;1034:86;;-1:-1;1041:16;2158:221;-1:-1;2158:221;3220:476;-1:-1;;;;;6007:54;;;2465:58;;6007:54;;;;3599:2;3584:18;;2465:58;3682:2;3667:18;;3171:37;;;;3419:2;3404:18;;3390:306;3703:349;-1:-1;;;;;6007:54;;;;2465:58;;4038:2;4023:18;;3171:37;3866:2;3851:18;;3837:215;4059:266;-1:-1;;;;;6007:54;;;;2628:72;;4208:2;4193:18;;4179:146;4332:416;4532:2;4546:47;;;2937:2;4517:18;;;5679:19;2973:34;5719:14;;;2953:55;-1:-1;;;3028:12;;;3021:34;3074:12;;;4503:245;4755:222;3171:37;;;4882:2;4867:18;;4853:124;4984:256;5046:2;5040:9;5072:17;;;5147:18;5132:34;;5168:22;;;5129:62;5126:2;;;5204:1;;5194:12;5126:2;5046;5213:22;5024:216;;-1:-1;5024:216"
+ },
+ "methodIdentifiers": {
+ "WETH()": "ad5c4648",
+ "callFunction(address,bytes)": "9c23da50"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnwrappedETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WrappedETH\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"contract WETH9\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"callFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{},\"title\":\"FlashUnwrap\"},\"userdoc\":{\"methods\":{},\"notice\":\"contract To unwrap WETH. This is just a contract to test the Call action\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/FlashUnwrap.sol\":\"FlashUnwrap\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/external/canonical-weth/WETH9.sol\":{\"keccak256\":\"0x183bca8885cb2df4064f96f36e945befe33ee5c670c21a6b155de27ec0c613d0\",\"license\":\"GNU GPL\",\"urls\":[\"bzz-raw://849e256e73f9caae88c1ac6ccc1d2b8a58257bde18014d42957e62ef28c7306a\",\"dweb:/ipfs/QmNUaMRemWVPVwBgDymgZDycgNg3buQeNDi71uR2AC5qQp\"]},\"contracts/interfaces/CalleeInterface.sol\":{\"keccak256\":\"0xb5f3e105d82e2b5fce7e8752f2cc42fd89a6bed60b5fa2d6368b4906b1009d46\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a7bc0d55af1e8b90904fabfb8daa0dab4c6186c2e4c43a5f1afb7324e74c013\",\"dweb:/ipfs/QmPi4QLPumA7nwErKrASLy2s5JMKzqC44gcU9izco8Xemv\"]},\"contracts/interfaces/ERC20Interface.sol\":{\"keccak256\":\"0x3dbc279a4929dcf32d2e39d1d7b0057c2805d9ef389222430bbe05a97ecae8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://55004a13a4daaf4a67bedfc7dc7128daa09d92687600c6386b5e35d4debb8f2a\",\"dweb:/ipfs/QmV1S4uGCzWZiiCUJp7GvwWAmj4ufGT5jd3CmSQPf64fWs\"]},\"contracts/packages/oz/Address.sol\":{\"keccak256\":\"0xacb7d8bfe55f4b53e4dfe128f5e15780401fe734fc28f239e9bf63cb5283c84c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98a593fce82016c1c092d9374a1bce613138a1fe2bb24544896779a107c7a9bf\",\"dweb:/ipfs/QmZosdG8DQ1vTmCg61jaADyR1fcX3gPsjhjPBvGdU2i9jC\"]},\"contracts/packages/oz/SafeERC20.sol\":{\"keccak256\":\"0xace3a5f9ccd9044fccd6211415ec3d2e34d52655e7a8abbec023e54cc83e1ac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7e1f47f2adb896af380f6e772f9a97b2950afe88c297ee6816319b1faae0cb\",\"dweb:/ipfs/QmPu2NEB1q25ReaFuus5HWHH1Jf1to83hYgXgFVoR1Jszm\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/tests/FlashUnwrap.sol\":{\"keccak256\":\"0xf86ce084c562cc54a389cf10cdae3196812b2cb0a25ef219bb50b5acdae08c99\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ac193b74c69625a1865dca122e27ac23e291b0d50af5044bd364d0aba24f1ab9\",\"dweb:/ipfs/QmVxhergGgaT2J1TCrDjdtsGPsirL5w8kb6778pWZD88p6\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/MarginVaultTester.sol": {
+ "MarginVaultTester": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVault",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address[]",
+ "name": "shortOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "longOtokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "collateralAssets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shortAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "longAmounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "collateralAmounts",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct MarginVault.Vault",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "testAddCollateral",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_longOtoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "testAddLong",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_shortOtoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "testAddShort",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "testRemoveCollateral",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_longOtoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "testRemoveLong",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_vaultIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_shortOtoken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "testRemoveShort",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {
+ "contracts/libs/MarginVault.sol": {
+ "MarginVault": [
+ {
+ "length": 20,
+ "start": 359
+ },
+ {
+ "length": 20,
+ "start": 498
+ },
+ {
+ "length": 20,
+ "start": 583
+ },
+ {
+ "length": 20,
+ "start": 668
+ },
+ {
+ "length": 20,
+ "start": 753
+ },
+ {
+ "length": 20,
+ "start": 1435
+ }
+ ]
+ }
+ },
+ "object": "608060405234801561001057600080fd5b506107bf806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80633ef3feaf1161005b5780633ef3feaf146100bd5780638a2ae0a8146100d05780639403b634146100e3578063ac7d117a1461010c5761007d565b80631a4b299d146100825780631ac3a5fb1461009757806322786c1f146100aa575b600080fd5b6100956100903660046105f6565b61011f565b005b6100956100a53660046105f6565b6101aa565b6100956100b83660046105f6565b6101ff565b6100956100cb3660046105f6565b610254565b6100956100de3660046105f6565b6102a9565b6100f66100f13660046105de565b6102fe565b60405161010391906106af565b60405180910390f35b61009561011a3660046105f6565b610553565b3360009081526020818152604080832087845290915290819020905163951dd8d360e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163951dd8d3916101749190879087908790600401610765565b60006040518083038186803b15801561018c57600080fd5b505af41580156101a0573d6000803e3d6000fd5b5050505050505050565b3360009081526020818152604080832087845290915290819020905163ef682c1b60e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163ef682c1b916101749190879087908790600401610765565b336000908152602081815260408083208784529091529081902090516301f974ab60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__91637e5d2ac0916101749190879087908790600401610765565b33600090815260208181526040808320878452909152908190209051630380bfdd60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163e02ff740916101749190879087908790600401610765565b3360009081526020818152604080832087845290915290819020905163155bf27360e31b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163aadf9398916101749190879087908790600401610765565b6103066105a8565b336000908152602081815260408083208584528252918290208251815460e09381028201840190945260c08101848152909391928492849184018282801561037757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610359575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156103d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103bb575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561043b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161041d575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561049357602002820191906000526020600020905b81548152602001906001019080831161047f575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156104eb57602002820191906000526020600020905b8154815260200190600101908083116104d7575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561054357602002820191906000526020600020905b81548152602001906001019080831161052f575b5050505050815250509050919050565b33600090815260208181526040808320878452909152908190209051637b5c283560e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__91637b5c2835916101749190879087908790600401610765565b6040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b6000602082840312156105ef578081fd5b5035919050565b6000806000806080858703121561060b578283fd5b8435935060208501356001600160a01b0381168114610628578384fd5b93969395505050506040820135916060013590565b6000815180845260208085019450808401835b838110156106755781516001600160a01b031687529582019590820190600101610650565b509495945050505050565b6000815180845260208085019450808401835b8381101561067557815187529582019590820190600101610693565b600060208252825160c060208401526106cb60e084018261063d565b60208501519150601f19808583030160408601526106e9828461063d565b6040870151935081868203016060870152610704818561063d565b92505060608601519250808583030160808601526107228284610680565b60808701519350818682030160a087015261073d8185610680565b92505060a08601519250808583030160c08601525061075c8183610680565b95945050505050565b9384526001600160a01b03929092166020840152604083015260608201526080019056fea2646970667358221220b54aaeb124668ab89916afb0db855fc67162134ac86675e72261caa4ae71648a64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7BF 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 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3EF3FEAF GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x3EF3FEAF EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x8A2AE0A8 EQ PUSH2 0xD0 JUMPI DUP1 PUSH4 0x9403B634 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0xAC7D117A EQ PUSH2 0x10C JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x1A4B299D EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x1AC3A5FB EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x22786C1F EQ PUSH2 0xAA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x11F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x95 PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x1AA JUMP JUMPDEST PUSH2 0x95 PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x1FF JUMP JUMPDEST PUSH2 0x95 PUSH2 0xCB CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x254 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x2A9 JUMP JUMPDEST PUSH2 0xF6 PUSH2 0xF1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5DE JUMP JUMPDEST PUSH2 0x2FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x103 SWAP2 SWAP1 PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x553 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x951DD8D3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0x951DD8D3 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0xEF682C1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xEF682C1B SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x1F974AB PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0x7E5D2AC0 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x380BFDD PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xE02FF740 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x155BF273 PUSH1 0xE3 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xAADF9398 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST PUSH2 0x306 PUSH2 0x5A8 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0xE0 SWAP4 DUP2 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0xC0 DUP2 ADD DUP5 DUP2 MSTORE SWAP1 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x377 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 0x359 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD 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 0x3D9 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 0x3BB JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD 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 0x43B 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 0x41D JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD 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 0x493 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x47F JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD 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 0x4EB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x4D7 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD 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 0x543 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x52F JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x7B5C2835 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0x7B5C2835 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EF JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x628 JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x675 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 0x650 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x675 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x693 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0xC0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x6CB PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x63D JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x1F NOT DUP1 DUP6 DUP4 SUB ADD PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x6E9 DUP3 DUP5 PUSH2 0x63D JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP DUP2 DUP7 DUP3 SUB ADD PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x704 DUP2 DUP6 PUSH2 0x63D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP7 ADD MLOAD SWAP3 POP DUP1 DUP6 DUP4 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x722 DUP3 DUP5 PUSH2 0x680 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP4 POP DUP2 DUP7 DUP3 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x73D DUP2 DUP6 PUSH2 0x680 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 POP DUP1 DUP6 DUP4 SUB ADD PUSH1 0xC0 DUP7 ADD MSTORE POP PUSH2 0x75C DUP2 DUP4 PUSH2 0x680 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 0x4A 0xAE 0xB1 0x24 PUSH7 0x8AB89916AFB0DB DUP6 0x5F 0xC6 PUSH18 0x62134AC86675E72261CAA4AE71648A64736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "154:1775:78:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {
+ "contracts/libs/MarginVault.sol": {
+ "MarginVault": [
+ {
+ "length": 20,
+ "start": 327
+ },
+ {
+ "length": 20,
+ "start": 466
+ },
+ {
+ "length": 20,
+ "start": 551
+ },
+ {
+ "length": 20,
+ "start": 636
+ },
+ {
+ "length": 20,
+ "start": 721
+ },
+ {
+ "length": 20,
+ "start": 1403
+ }
+ ]
+ }
+ },
+ "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c80633ef3feaf1161005b5780633ef3feaf146100bd5780638a2ae0a8146100d05780639403b634146100e3578063ac7d117a1461010c5761007d565b80631a4b299d146100825780631ac3a5fb1461009757806322786c1f146100aa575b600080fd5b6100956100903660046105f6565b61011f565b005b6100956100a53660046105f6565b6101aa565b6100956100b83660046105f6565b6101ff565b6100956100cb3660046105f6565b610254565b6100956100de3660046105f6565b6102a9565b6100f66100f13660046105de565b6102fe565b60405161010391906106af565b60405180910390f35b61009561011a3660046105f6565b610553565b3360009081526020818152604080832087845290915290819020905163951dd8d360e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163951dd8d3916101749190879087908790600401610765565b60006040518083038186803b15801561018c57600080fd5b505af41580156101a0573d6000803e3d6000fd5b5050505050505050565b3360009081526020818152604080832087845290915290819020905163ef682c1b60e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163ef682c1b916101749190879087908790600401610765565b336000908152602081815260408083208784529091529081902090516301f974ab60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__91637e5d2ac0916101749190879087908790600401610765565b33600090815260208181526040808320878452909152908190209051630380bfdd60e61b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163e02ff740916101749190879087908790600401610765565b3360009081526020818152604080832087845290915290819020905163155bf27360e31b815273__$f483377b159a5ea0e3632e216689e4fd4e$__9163aadf9398916101749190879087908790600401610765565b6103066105a8565b336000908152602081815260408083208584528252918290208251815460e09381028201840190945260c08101848152909391928492849184018282801561037757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610359575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156103d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103bb575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561043b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161041d575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561049357602002820191906000526020600020905b81548152602001906001019080831161047f575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156104eb57602002820191906000526020600020905b8154815260200190600101908083116104d7575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561054357602002820191906000526020600020905b81548152602001906001019080831161052f575b5050505050815250509050919050565b33600090815260208181526040808320878452909152908190209051637b5c283560e01b815273__$f483377b159a5ea0e3632e216689e4fd4e$__91637b5c2835916101749190879087908790600401610765565b6040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b6000602082840312156105ef578081fd5b5035919050565b6000806000806080858703121561060b578283fd5b8435935060208501356001600160a01b0381168114610628578384fd5b93969395505050506040820135916060013590565b6000815180845260208085019450808401835b838110156106755781516001600160a01b031687529582019590820190600101610650565b509495945050505050565b6000815180845260208085019450808401835b8381101561067557815187529582019590820190600101610693565b600060208252825160c060208401526106cb60e084018261063d565b60208501519150601f19808583030160408601526106e9828461063d565b6040870151935081868203016060870152610704818561063d565b92505060608601519250808583030160808601526107228284610680565b60808701519350818682030160a087015261073d8185610680565b92505060a08601519250808583030160c08601525061075c8183610680565b95945050505050565b9384526001600160a01b03929092166020840152604083015260608201526080019056fea2646970667358221220b54aaeb124668ab89916afb0db855fc67162134ac86675e72261caa4ae71648a64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3EF3FEAF GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x3EF3FEAF EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x8A2AE0A8 EQ PUSH2 0xD0 JUMPI DUP1 PUSH4 0x9403B634 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0xAC7D117A EQ PUSH2 0x10C JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x1A4B299D EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x1AC3A5FB EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x22786C1F EQ PUSH2 0xAA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x11F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x95 PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x1AA JUMP JUMPDEST PUSH2 0x95 PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x1FF JUMP JUMPDEST PUSH2 0x95 PUSH2 0xCB CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x254 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x2A9 JUMP JUMPDEST PUSH2 0xF6 PUSH2 0xF1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5DE JUMP JUMPDEST PUSH2 0x2FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x103 SWAP2 SWAP1 PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x5F6 JUMP JUMPDEST PUSH2 0x553 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x951DD8D3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0x951DD8D3 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0xEF682C1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xEF682C1B SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x1F974AB PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0x7E5D2AC0 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x380BFDD PUSH1 0xE6 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xE02FF740 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x155BF273 PUSH1 0xE3 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xAADF9398 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST PUSH2 0x306 PUSH2 0x5A8 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0xE0 SWAP4 DUP2 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0xC0 DUP2 ADD DUP5 DUP2 MSTORE SWAP1 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x377 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 0x359 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD 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 0x3D9 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 0x3BB JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD 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 0x43B 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 0x41D JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD 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 0x493 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x47F JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD 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 0x4EB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x4D7 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD 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 0x543 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x52F JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH4 0x7B5C2835 PUSH1 0xE0 SHL DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0x7B5C2835 SWAP2 PUSH2 0x174 SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x765 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EF JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x628 JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x675 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 0x650 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x675 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x693 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0xC0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x6CB PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x63D JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x1F NOT DUP1 DUP6 DUP4 SUB ADD PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x6E9 DUP3 DUP5 PUSH2 0x63D JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP DUP2 DUP7 DUP3 SUB ADD PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x704 DUP2 DUP6 PUSH2 0x63D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP7 ADD MLOAD SWAP3 POP DUP1 DUP6 DUP4 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x722 DUP3 DUP5 PUSH2 0x680 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP4 POP DUP2 DUP7 DUP3 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x73D DUP2 DUP6 PUSH2 0x680 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 POP DUP1 DUP6 DUP4 SUB ADD PUSH1 0xC0 DUP7 ADD MSTORE POP PUSH2 0x75C DUP2 DUP4 PUSH2 0x680 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 0x4A 0xAE 0xB1 0x24 PUSH7 0x8AB89916AFB0DB DUP6 0x5F 0xC6 PUSH18 0x62134AC86675E72261CAA4AE71648A64736F PUSH13 0x634300060A0033000000000000 ",
+ "sourceMap": "154:1775:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:234;;;;;;;;;:::i;:::-;;459:232;;;;;;;;;:::i;1415:250::-;;;;;;;;;:::i;1671:256::-;;;;;;;;;:::i;941:228::-;;;;;;;;;:::i;311:142::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;697:238;;;;;;;;;:::i;1175:234::-;1337:10;1331:5;:17;;;;;;;;;;;:30;;;;;;;;;;:71;;-1:-1:-1;;;1331:71:78;;:41;;;;:71;;:30;1373:11;;1386:7;;1395:6;;1331:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:234;;;;:::o;459:232::-;620:10;614:5;:17;;;;;;;;;;;:30;;;;;;;;;;:70;;-1:-1:-1;;;614:70:78;;:39;;;;:70;;:30;654:12;;668:7;;677:6;;614:70;;;;1415:250;1585:10;1579:5;:17;;;;;;;;;;;:30;;;;;;;;;;:79;;-1:-1:-1;;;1579:79:78;;:44;;;;:79;;:30;1624:16;;1642:7;;1651:6;;1579:79;;;;1671:256;1844:10;1838:5;:17;;;;;;;;;;;:30;;;;;;;;;;:82;;-1:-1:-1;;;1838:82:78;;:47;;;;:82;;:30;1886:16;;1904:7;;1913:6;;1838:82;;;;941:228;1100:10;1094:5;:17;;;;;;;;;;;:30;;;;;;;;;;:68;;-1:-1:-1;;;1094:68:78;;:38;;;;:68;;:30;1133:11;;1146:7;;1155:6;;1094:68;;;;311:142;373:24;;:::i;:::-;422:10;416:5;:17;;;;;;;;;;;:30;;;;;;;;;409:37;;;;;;;;;;;;;;;;;;;;;;;416:30;;409:37;;416:30;;409:37;;416:30;409:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;409:37:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;409:37:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;409:37:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;311:142;;;:::o;697:238::-;861:10;855:5;:17;;;;;;;;;;;:30;;;;;;;;;;:73;;-1:-1:-1;;;855:73:78;;:42;;;;:73;;:30;898:12;;912:7;;921:6;;855:73;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;279:241::-;;383:2;371:9;362:7;358:23;354:32;351:2;;;-1:-1;;389:12;351:2;-1:-1;209:20;;345:175;-1:-1;345:175;527:617;;;;;682:3;670:9;661:7;657:23;653:33;650:2;;;-1:-1;;689:12;650:2;209:20;;;-1:-1;841:2;880:22;;72:20;-1:-1;;;;;7783:54;;7987:35;;7977:2;;-1:-1;;8026:12;7977:2;644:500;;849:63;;-1:-1;;;;949:2;988:22;;209:20;;1057:2;1096:22;209:20;;644:500;1784:670;;1967:5;6854:12;7390:6;7385:3;7378:19;7427:4;;7422:3;7418:14;1979:83;;7427:4;2133:5;6550:14;-1:-1;2172:260;2197:6;2194:1;2191:13;2172:260;;;2258:13;;-1:-1;;;;;7783:54;1576:37;;1305:14;;;;7128;;;;7794:42;2212:9;2172:260;;;-1:-1;2438:10;;1898:556;-1:-1;;;;;1898:556;2493:670;;2676:5;6854:12;7390:6;7385:3;7378:19;7427:4;;7422:3;7418:14;2688:83;;7427:4;2842:5;6550:14;-1:-1;2881:260;2906:6;2903:1;2900:13;2881:260;;;2967:13;;5141:18;;1487:14;;;;7128;;;;2928:1;2921:9;2881:260;;5409:366;;5584:2;5605:17;5598:47;3459:16;3453:23;3379:4;5584:2;5573:9;5569:18;3489:38;3542:103;3370:14;5573:9;3370:14;3626:12;3542:103;;;5584:2;3730:5;3726:16;3720:23;3700:43;;3779:14;;;5573:9;3783:4;3779:14;;3763;5573:9;3763:14;3756:38;3809:103;3907:4;3893:12;3809:103;;;3763:14;4002:5;3998:16;3992:23;3972:43;;3779:14;5573:9;4055:4;4051:14;;4035;5573:9;4035:14;4028:38;4081:103;4179:4;4165:12;4081:103;;;4073:111;;;4035:14;4270:5;4266:16;4260:23;4240:43;;3779:14;5573:9;4323:4;4319:14;;4303;5573:9;4303:14;4296:38;4349:103;4447:4;4433:12;4349:103;;;4303:14;4537:5;4533:16;4527:23;4507:43;;3779:14;5573:9;4590:4;4586:14;;4570;5573:9;4570:14;4563:38;4616:103;4714:4;4700:12;4616:103;;;4608:111;;;4570:14;4810:5;4806:16;4800:23;4780:43;;3779:14;5573:9;4863:4;4859:14;;3379:4;5573:9;4843:14;4836:38;;4889:103;4987:4;4973:12;4889:103;;;5651:114;5555:220;-1:-1;;;;;5555:220;5782:646;5141:18;;;-1:-1;;;;;7783:54;;;;6232:2;6217:18;;1576:37;6323:2;6308:18;;5141;6414:2;6399:18;;5141;6026:3;6011:19;;5997:431"
+ },
+ "methodIdentifiers": {
+ "getVault(uint256)": "9403b634",
+ "testAddCollateral(uint256,address,uint256,uint256)": "22786c1f",
+ "testAddLong(uint256,address,uint256,uint256)": "8a2ae0a8",
+ "testAddShort(uint256,address,uint256,uint256)": "1ac3a5fb",
+ "testRemoveCollateral(uint256,address,uint256,uint256)": "3ef3feaf",
+ "testRemoveLong(uint256,address,uint256,uint256)": "1a4b299d",
+ "testRemoveShort(uint256,address,uint256,uint256)": "ac7d117a"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"}],\"name\":\"getVault\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"shortOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"longOtokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"collateralAssets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shortAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"longAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"collateralAmounts\",\"type\":\"uint256[]\"}],\"internalType\":\"struct MarginVault.Vault\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"testAddCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_longOtoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"testAddLong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_shortOtoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"testAddShort\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"testRemoveCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_longOtoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"testRemoveLong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_shortOtoken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"testRemoveShort\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/tests/MarginVaultTester.sol\":\"MarginVaultTester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/MarginVault.sol\":{\"keccak256\":\"0x85575520bb91e02686e7dff4eb9ad9c461666bb68243d9105d36848f0ae89152\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://97ec3b3319b0f7940eef57cc9c0f540414415c44ad29f1c06489729b24c066f8\",\"dweb:/ipfs/QmPtXWLwAGriCg2eNw4nzMJcv4qzmkEZ3qFwSHD1eXj6GY\"]},\"contracts/packages/oz/SafeMath.sol\":{\"keccak256\":\"0xe257e662689b978c321f9618441d4e0233276acea88093d3d344873592636c18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a77975e5556f8bcebff2f80fda8f24265e9f7d0f8a6bbb3641909ee2ae2bc85\",\"dweb:/ipfs/QmcbLfGGN5wvZDXy1X3XTy9Cg12gEZkF5M9BdgSpLqXSfw\"]},\"contracts/tests/MarginVaultTester.sol\":{\"keccak256\":\"0x125ee4cc79eedc92bff0d3587c843358cfd31fb3c7dffda4acec79ae5b076dfa\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8e518367c185db0b714eb1c012a3b60875eadabdf755e3d99e09159f615e807e\",\"dweb:/ipfs/QmNbfoU6BD7vfmEmscgPsemr7DBV3u3AWPyNev6W3x4T2h\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/OtokenImplV1.sol": {
+ "OtokenImplV1": {
+ "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": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "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": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "collateralAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "controller",
+ "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": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "expiryTimestamp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getChainId",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "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": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_underlyingAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_strikeAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_collateralAsset",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_strikePrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_expiryTimestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPut",
+ "type": "bool"
+ }
+ ],
+ "name": "init",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "inited",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isPut",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mintOtoken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "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": "amount",
+ "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": [],
+ "name": "strikeAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "strikePrice",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlyingAsset",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "6080604052610105805461ff001916905534801561001c57600080fd5b50611b8f8061002c6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637158da7c116100f9578063c52987cf11610097578063f3c274a611610071578063f3c274a6146104e6578063f5887cdd146104ee578063f630df34146104f6578063f77c47911461054a576101a9565b8063c52987cf1461045f578063d505accf14610467578063dd62ed3e146104b8576101a9565b8063a457c2d7116100d3578063a457c2d7146103f7578063a9059cbb14610423578063aabaecd61461044f578063ade6e2aa14610457576101a9565b80637158da7c146103c15780637ecebe00146103c957806395d89b41146103ef576101a9565b80633408e4701161016657806343c885ba1161014057806343c885ba1461033957806351b0a4101461034157806356d878f71461036f57806370a082311461039b576101a9565b80633408e470146102fd5780633644e51514610305578063395093511461030d576101a9565b806306fdde03146101ae578063095ea7b31461022b57806317d69bc81461026b57806318160ddd1461028f57806323b872dd146102a9578063313ce567146102df575b600080fd5b6101b6610552565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356105e9565b604080519115158252519081900360200190f35b610273610606565b604080516001600160a01b039092168252519081900360200190f35b610297610616565b60408051918252519081900360200190f35b610257600480360360608110156102bf57600080fd5b506001600160a01b0381358116916020810135909116906040013561061c565b6102e76106a9565b6040805160ff9092168252519081900360200190f35b6102976106b2565b6102976106b6565b6102576004803603604081101561032357600080fd5b506001600160a01b0381351690602001356106c5565b610257610719565b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610728565b005b61036d6004803603604081101561038557600080fd5b506001600160a01b038135169060200135610736565b610297600480360360208110156103b157600080fd5b50356001600160a01b0316610740565b61027361075b565b610297600480360360208110156103df57600080fd5b50356001600160a01b031661076b565b6101b6610792565b6102576004803603604081101561040d57600080fd5b506001600160a01b0381351690602001356107f3565b6102576004803603604081101561043957600080fd5b506001600160a01b038135169060200135610861565b610273610875565b610297610885565b61029761088c565b61036d600480360360e081101561047d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610893565b610297600480360360408110156104ce57600080fd5b506001600160a01b0381358116916020013516610a2b565b610257610a56565b610273610a60565b61036d600480360360e081101561050c57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001351515610a6f565b610273610c6d565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105de5780601f106105b3576101008083540402835291602001916105de565b820191906000526020600020905b8154815290600101906020018083116105c157829003601f168201915b505050505090505b90565b60006105fd6105f6610c7c565b8484610c80565b50600192915050565b610101546001600160a01b031681565b60675490565b6000610629848484610d6c565b61069f84610635610c7c565b61069a85604051806060016040528060288152602001611a75602891396001600160a01b038a16600090815260666020526040812090610673610c7c565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610ed516565b610c80565b5060019392505050565b606a5460ff1690565b4690565b60006106c0610f6c565b905090565b60006105fd6106d2610c7c565b8461069a85606660006106e3610c7c565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610f9f16565b61010554610100900460ff1681565b6107328282611000565b5050565b61073282826110fe565b6001600160a01b031660009081526065602052604090205490565b610100546001600160a01b031681565b6001600160a01b038116600090815260cb6020526040812061078c90611206565b92915050565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105de5780601f106105b3576101008083540402835291602001916105de565b60006105fd610800610c7c565b8461069a85604051806060016040528060258152602001611b35602591396066600061082a610c7c565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610ed516565b60006105fd61086e610c7c565b8484610d6c565b610102546001600160a01b031681565b6101045481565b6101035481565b834211156108e8576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc5488888861091d60cb60008e6001600160a01b03166001600160a01b03168152602001908152602001600020611206565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e090910190915280519101209050600061097b8261120a565b9050600061098b82878787611256565b9050896001600160a01b0316816001600160a01b0316146109f3576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb60205260409020610a14906113d0565b610a1f8a8a8a610c80565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101055460ff1681565b60fe546001600160a01b031681565b600054610100900460ff1680610a885750610a886113d9565b80610a96575060005460ff16155b610ad15760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015610afc576000805460ff1961ff0019909116610100171660011790555b610105805461ff00191661010017905560408051633018205f60e01b815290516001600160a01b038a1691633018205f916004808301926020929190829003018186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d6020811015610b7657600080fd5b505160ff80546001600160a01b03199081166001600160a01b0393841617909155610100805482168a8416179055610101805482168984161790556101028054909116918716919091179055610103849055610104839055610105805460ff1916831515179055604080518082018252601c81527f455448555344432f313539373531313935352f323030502f55534443000000006020808301919091528251808401909352600983526806f45544855534443560bc1b9083015290610c3c82826113df565b610c45826114b8565b610c4f600861158e565b50508015610c63576000805461ff00191690555b5050505050505050565b60ff546001600160a01b031681565b3390565b6001600160a01b038316610cc55760405162461bcd60e51b8152600401808060200182810382526024815260200180611b116024913960400191505060405180910390fd5b6001600160a01b038216610d0a5760405162461bcd60e51b81526004018080602001828103825260228152602001806119456022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610db15760405162461bcd60e51b8152600401808060200182810382526025815260200180611aec6025913960400191505060405180910390fd5b6001600160a01b038216610df65760405162461bcd60e51b81526004018080602001828103825260238152602001806119006023913960400191505060405180910390fd5b610e018383836114b3565b610e4481604051806060016040528060268152602001611967602691396001600160a01b038616600090815260656020526040902054919063ffffffff610ed516565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610e79908263ffffffff610f9f16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610f645760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f29578181015183820152602001610f11565b50505050905090810190601f168015610f565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106c06040518080611a236052913960520190506040518091039020610f926115a4565b610f9a6115aa565b6115b0565b600082820183811015610ff9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661105b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611067600083836114b3565b60675461107a908263ffffffff610f9f16565b6067556001600160a01b0382166000908152606560205260409020546110a6908263ffffffff610f9f16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166111435760405162461bcd60e51b8152600401808060200182810382526021815260200180611acb6021913960400191505060405180910390fd5b61114f826000836114b3565b61119281604051806060016040528060228152602001611923602291396001600160a01b038516600090815260656020526040902054919063ffffffff610ed516565b6001600160a01b0383166000908152606560205260409020556067546111be908263ffffffff61160616565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b6000611214610f6c565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112b75760405162461bcd60e51b815260040180806020018281038252602281526020018061198d6022913960400191505060405180910390fd5b8360ff16601b14806112cc57508360ff16601c145b6113075760405162461bcd60e51b8152600401808060200182810382526022815260200180611a016022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa15801561135f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113c7576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b303b1590565b600054610100900460ff16806113f857506113f86113d9565b80611406575060005460ff16155b6114415760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff1615801561146c576000805460ff1961ff0019909116610100171660011790555b825161147f906068906020860190611867565b508151611493906069906020850190611867565b50606a805460ff1916601217905580156114b3576000805461ff00191690555b505050565b600054610100900460ff16806114d157506114d16113d9565b806114df575060005460ff16155b61151a5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015611545576000805460ff1961ff0019909116610100171660011790555b61154d611648565b61157082604051806040016040528060018152602001603160f81b8152506116ea565b611579826117aa565b8015610732576000805461ff00191690555050565b606a805460ff191660ff92909216919091179055565b60975490565b60985490565b60008383836115bd6106b2565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b6000610ff983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ed5565b600054610100900460ff168061166157506116616113d9565b8061166f575060005460ff16155b6116aa5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff161580156116d5576000805460ff1961ff0019909116610100171660011790555b80156116e7576000805461ff00191690555b50565b600054610100900460ff168061170357506117036113d9565b80611711575060005460ff16155b61174c5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015611777576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060979190915560985580156114b3576000805461ff0019169055505050565b600054610100900460ff16806117c357506117c36113d9565b806117d1575060005460ff16155b61180c5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015611837576000805460ff1961ff0019909116610100171660011790555b6040518060526119af823960405190819003605201902060cc55508015610732576000805461ff00191690555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118a857805160ff19168380011785556118d5565b828001600101855582156118d5579182015b828111156118d55782518255916020019190600101906118ba565b506118e19291506118e5565b5090565b6105e691905b808211156118e157600081556001016118eb56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75655065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e652945434453413a20696e76616c6964207369676e6174757265202776272076616c7565454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205d7f122fd230c95c2f4c99f5ab82f0c3848b688107481fb6baf5032386ae0e1e64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x105 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8F DUP1 PUSH2 0x2C 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 0x7158DA7C GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xC52987CF GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xF3C274A6 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xF3C274A6 EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xF630DF34 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0x54A JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0xC52987CF EQ PUSH2 0x45F JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4B8 JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x423 JUMPI DUP1 PUSH4 0xAABAECD6 EQ PUSH2 0x44F JUMPI DUP1 PUSH4 0xADE6E2AA EQ PUSH2 0x457 JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x7158DA7C EQ PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3C9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3EF JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x3408E470 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x43C885BA GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x43C885BA EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0x51B0A410 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x56D878F7 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x39B JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x3408E470 EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x30D JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x17D69BC8 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2A9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B6 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x21D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x273 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x297 PUSH2 0x616 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x61C JUMP JUMPDEST PUSH2 0x2E7 PUSH2 0x6A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x297 PUSH2 0x6B2 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x257 PUSH2 0x719 JUMP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x728 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x385 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x736 JUMP JUMPDEST PUSH2 0x297 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x740 JUMP JUMPDEST PUSH2 0x273 PUSH2 0x75B JUMP JUMPDEST PUSH2 0x297 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x76B JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x792 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7F3 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x439 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x861 JUMP JUMPDEST PUSH2 0x273 PUSH2 0x875 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x885 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x88C JUMP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x893 JUMP JUMPDEST PUSH2 0x297 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xA2B JUMP JUMPDEST PUSH2 0x257 PUSH2 0xA56 JUMP JUMPDEST PUSH2 0x273 PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xA6F JUMP JUMPDEST PUSH2 0x273 PUSH2 0xC6D JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DE 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 0x5C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x5F6 PUSH2 0xC7C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xC80 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x629 DUP5 DUP5 DUP5 PUSH2 0xD6C JUMP JUMPDEST PUSH2 0x69F DUP5 PUSH2 0x635 PUSH2 0xC7C JUMP JUMPDEST PUSH2 0x69A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A75 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x673 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH2 0xC80 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6C0 PUSH2 0xF6C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x6D2 PUSH2 0xC7C JUMP JUMPDEST DUP5 PUSH2 0x69A DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x6E3 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x732 DUP3 DUP3 PUSH2 0x1000 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x732 DUP3 DUP3 PUSH2 0x10FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x78C SWAP1 PUSH2 0x1206 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x800 PUSH2 0xC7C JUMP JUMPDEST DUP5 PUSH2 0x69A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B35 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x82A PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x86E PUSH2 0xC7C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xD6C JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x104 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x103 SLOAD DUP2 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x8E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x91D PUSH1 0xCB PUSH1 0x0 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 PUSH2 0x1206 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x97B DUP3 PUSH2 0x120A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x98B DUP3 DUP8 DUP8 DUP8 PUSH2 0x1256 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x9F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xA14 SWAP1 PUSH2 0x13D0 JUMP JUMPDEST PUSH2 0xA1F DUP11 DUP11 DUP11 PUSH2 0xC80 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 PUSH2 0x105 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xA88 JUMPI POP PUSH2 0xA88 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0xA96 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xAFC JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x105 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3018205F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x3018205F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH2 0x100 DUP1 SLOAD DUP3 AND DUP11 DUP5 AND OR SWAP1 SSTORE PUSH2 0x101 DUP1 SLOAD DUP3 AND DUP10 DUP5 AND OR SWAP1 SSTORE PUSH2 0x102 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP8 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x103 DUP5 SWAP1 SSTORE PUSH2 0x104 DUP4 SWAP1 SSTORE PUSH2 0x105 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH32 0x455448555344432F313539373531313935352F323030502F5553444300000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x9 DUP4 MSTORE PUSH9 0x6F455448555344435 PUSH1 0xBC SHL SWAP1 DUP4 ADD MSTORE SWAP1 PUSH2 0xC3C DUP3 DUP3 PUSH2 0x13DF JUMP JUMPDEST PUSH2 0xC45 DUP3 PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0xC4F PUSH1 0x8 PUSH2 0x158E JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0xC63 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xCC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B11 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1945 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xDB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1AEC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xDF6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1900 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE01 DUP4 DUP4 DUP4 PUSH2 0x14B3 JUMP JUMPDEST PUSH2 0xE44 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1967 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xE79 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xF64 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF56 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6C0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x1A23 PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0xF92 PUSH2 0x15A4 JUMP JUMPDEST PUSH2 0xF9A PUSH2 0x15AA JUMP JUMPDEST PUSH2 0x15B0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xFF9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x105B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1067 PUSH1 0x0 DUP4 DUP4 PUSH2 0x14B3 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x107A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x10A6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1143 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1ACB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x114F DUP3 PUSH1 0x0 DUP4 PUSH2 0x14B3 JUMP JUMPDEST PUSH2 0x1192 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1923 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0x11BE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1606 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1214 PUSH2 0xF6C JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x12B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x198D PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0x12CC JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x1307 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A01 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x135F 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 0x13C7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x13F8 JUMPI POP PUSH2 0x13F8 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x1406 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1441 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x146C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH2 0x147F SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1493 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x14B3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x14D1 JUMPI POP PUSH2 0x14D1 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x14DF JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x151A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1545 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x154D PUSH2 0x1648 JUMP JUMPDEST PUSH2 0x1570 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH2 0x16EA JUMP JUMPDEST PUSH2 0x1579 DUP3 PUSH2 0x17AA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x732 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x15BD PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFF9 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xED5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1661 JUMPI POP PUSH2 0x1661 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x166F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x16AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16D5 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x16E7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1703 JUMPI POP PUSH2 0x1703 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x1711 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x174C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1777 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH2 0x14B3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x17C3 JUMPI POP PUSH2 0x17C3 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x17D1 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1837 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH2 0x19AF DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH2 0x732 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x18A8 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x18D5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x18D5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x18D5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x18BA JUMP JUMPDEST POP PUSH2 0x18E1 SWAP3 SWAP2 POP PUSH2 0x18E5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x5E6 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x18E1 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x18EB JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 POP PUSH6 0x726D69742861 PUSH5 0x6472657373 KECCAK256 PUSH16 0x776E65722C6164647265737320737065 PUSH15 0x6465722C75696E743235362076616C PUSH22 0x652C75696E74323536206E6F6E63652C75696E743235 CALLDATASIZE KECCAK256 PUSH5 0x6561646C69 PUSH15 0x652945434453413A20696E76616C69 PUSH5 0x207369676E PUSH2 0x7475 PUSH19 0x65202776272076616C7565454950373132446F PUSH14 0x61696E28737472696E67206E616D PUSH6 0x2C737472696E PUSH8 0x2076657273696F6E 0x2C PUSH22 0x696E7432353620636861696E49642C61646472657373 KECCAK256 PUSH23 0x6572696679696E67436F6E74726163742945524332303A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E6365436F6E74726163742069 PUSH15 0x7374616E63652068617320616C7265 PUSH2 0x6479 KECCAK256 PUSH3 0x65656E KECCAK256 PUSH10 0x6E697469616C697A6564 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212205D7F SLT 0x2F 0xD2 ADDRESS 0xC9 0x5C 0x2F 0x4C SWAP10 CREATE2 0xAB DUP3 CREATE 0xC3 DUP5 DUP12 PUSH9 0x8107481FB6BAF50323 DUP7 0xAE 0xE 0x1E PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "424:1706:79:-:0;;;739:26;;;-1:-1:-1;;739:26:79;;;424:1706;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80637158da7c116100f9578063c52987cf11610097578063f3c274a611610071578063f3c274a6146104e6578063f5887cdd146104ee578063f630df34146104f6578063f77c47911461054a576101a9565b8063c52987cf1461045f578063d505accf14610467578063dd62ed3e146104b8576101a9565b8063a457c2d7116100d3578063a457c2d7146103f7578063a9059cbb14610423578063aabaecd61461044f578063ade6e2aa14610457576101a9565b80637158da7c146103c15780637ecebe00146103c957806395d89b41146103ef576101a9565b80633408e4701161016657806343c885ba1161014057806343c885ba1461033957806351b0a4101461034157806356d878f71461036f57806370a082311461039b576101a9565b80633408e470146102fd5780633644e51514610305578063395093511461030d576101a9565b806306fdde03146101ae578063095ea7b31461022b57806317d69bc81461026b57806318160ddd1461028f57806323b872dd146102a9578063313ce567146102df575b600080fd5b6101b6610552565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356105e9565b604080519115158252519081900360200190f35b610273610606565b604080516001600160a01b039092168252519081900360200190f35b610297610616565b60408051918252519081900360200190f35b610257600480360360608110156102bf57600080fd5b506001600160a01b0381358116916020810135909116906040013561061c565b6102e76106a9565b6040805160ff9092168252519081900360200190f35b6102976106b2565b6102976106b6565b6102576004803603604081101561032357600080fd5b506001600160a01b0381351690602001356106c5565b610257610719565b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610728565b005b61036d6004803603604081101561038557600080fd5b506001600160a01b038135169060200135610736565b610297600480360360208110156103b157600080fd5b50356001600160a01b0316610740565b61027361075b565b610297600480360360208110156103df57600080fd5b50356001600160a01b031661076b565b6101b6610792565b6102576004803603604081101561040d57600080fd5b506001600160a01b0381351690602001356107f3565b6102576004803603604081101561043957600080fd5b506001600160a01b038135169060200135610861565b610273610875565b610297610885565b61029761088c565b61036d600480360360e081101561047d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610893565b610297600480360360408110156104ce57600080fd5b506001600160a01b0381358116916020013516610a2b565b610257610a56565b610273610a60565b61036d600480360360e081101561050c57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001351515610a6f565b610273610c6d565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105de5780601f106105b3576101008083540402835291602001916105de565b820191906000526020600020905b8154815290600101906020018083116105c157829003601f168201915b505050505090505b90565b60006105fd6105f6610c7c565b8484610c80565b50600192915050565b610101546001600160a01b031681565b60675490565b6000610629848484610d6c565b61069f84610635610c7c565b61069a85604051806060016040528060288152602001611a75602891396001600160a01b038a16600090815260666020526040812090610673610c7c565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610ed516565b610c80565b5060019392505050565b606a5460ff1690565b4690565b60006106c0610f6c565b905090565b60006105fd6106d2610c7c565b8461069a85606660006106e3610c7c565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610f9f16565b61010554610100900460ff1681565b6107328282611000565b5050565b61073282826110fe565b6001600160a01b031660009081526065602052604090205490565b610100546001600160a01b031681565b6001600160a01b038116600090815260cb6020526040812061078c90611206565b92915050565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105de5780601f106105b3576101008083540402835291602001916105de565b60006105fd610800610c7c565b8461069a85604051806060016040528060258152602001611b35602591396066600061082a610c7c565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610ed516565b60006105fd61086e610c7c565b8484610d6c565b610102546001600160a01b031681565b6101045481565b6101035481565b834211156108e8576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b600060cc5488888861091d60cb60008e6001600160a01b03166001600160a01b03168152602001908152602001600020611206565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e090910190915280519101209050600061097b8261120a565b9050600061098b82878787611256565b9050896001600160a01b0316816001600160a01b0316146109f3576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260cb60205260409020610a14906113d0565b610a1f8a8a8a610c80565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101055460ff1681565b60fe546001600160a01b031681565b600054610100900460ff1680610a885750610a886113d9565b80610a96575060005460ff16155b610ad15760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015610afc576000805460ff1961ff0019909116610100171660011790555b610105805461ff00191661010017905560408051633018205f60e01b815290516001600160a01b038a1691633018205f916004808301926020929190829003018186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d6020811015610b7657600080fd5b505160ff80546001600160a01b03199081166001600160a01b0393841617909155610100805482168a8416179055610101805482168984161790556101028054909116918716919091179055610103849055610104839055610105805460ff1916831515179055604080518082018252601c81527f455448555344432f313539373531313935352f323030502f55534443000000006020808301919091528251808401909352600983526806f45544855534443560bc1b9083015290610c3c82826113df565b610c45826114b8565b610c4f600861158e565b50508015610c63576000805461ff00191690555b5050505050505050565b60ff546001600160a01b031681565b3390565b6001600160a01b038316610cc55760405162461bcd60e51b8152600401808060200182810382526024815260200180611b116024913960400191505060405180910390fd5b6001600160a01b038216610d0a5760405162461bcd60e51b81526004018080602001828103825260228152602001806119456022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610db15760405162461bcd60e51b8152600401808060200182810382526025815260200180611aec6025913960400191505060405180910390fd5b6001600160a01b038216610df65760405162461bcd60e51b81526004018080602001828103825260238152602001806119006023913960400191505060405180910390fd5b610e018383836114b3565b610e4481604051806060016040528060268152602001611967602691396001600160a01b038616600090815260656020526040902054919063ffffffff610ed516565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610e79908263ffffffff610f9f16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610f645760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f29578181015183820152602001610f11565b50505050905090810190601f168015610f565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106c06040518080611a236052913960520190506040518091039020610f926115a4565b610f9a6115aa565b6115b0565b600082820183811015610ff9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661105b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611067600083836114b3565b60675461107a908263ffffffff610f9f16565b6067556001600160a01b0382166000908152606560205260409020546110a6908263ffffffff610f9f16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166111435760405162461bcd60e51b8152600401808060200182810382526021815260200180611acb6021913960400191505060405180910390fd5b61114f826000836114b3565b61119281604051806060016040528060228152602001611923602291396001600160a01b038516600090815260656020526040902054919063ffffffff610ed516565b6001600160a01b0383166000908152606560205260409020556067546111be908263ffffffff61160616565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b6000611214610f6c565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112b75760405162461bcd60e51b815260040180806020018281038252602281526020018061198d6022913960400191505060405180910390fd5b8360ff16601b14806112cc57508360ff16601c145b6113075760405162461bcd60e51b8152600401808060200182810382526022815260200180611a016022913960400191505060405180910390fd5b604080516000808252602080830180855289905260ff88168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa15801561135f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113c7576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b303b1590565b600054610100900460ff16806113f857506113f86113d9565b80611406575060005460ff16155b6114415760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff1615801561146c576000805460ff1961ff0019909116610100171660011790555b825161147f906068906020860190611867565b508151611493906069906020850190611867565b50606a805460ff1916601217905580156114b3576000805461ff00191690555b505050565b600054610100900460ff16806114d157506114d16113d9565b806114df575060005460ff16155b61151a5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015611545576000805460ff1961ff0019909116610100171660011790555b61154d611648565b61157082604051806040016040528060018152602001603160f81b8152506116ea565b611579826117aa565b8015610732576000805461ff00191690555050565b606a805460ff191660ff92909216919091179055565b60975490565b60985490565b60008383836115bd6106b2565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b6000610ff983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ed5565b600054610100900460ff168061166157506116616113d9565b8061166f575060005460ff16155b6116aa5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff161580156116d5576000805460ff1961ff0019909116610100171660011790555b80156116e7576000805461ff00191690555b50565b600054610100900460ff168061170357506117036113d9565b80611711575060005460ff16155b61174c5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015611777576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060979190915560985580156114b3576000805461ff0019169055505050565b600054610100900460ff16806117c357506117c36113d9565b806117d1575060005460ff16155b61180c5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a9d602e913960400191505060405180910390fd5b600054610100900460ff16158015611837576000805460ff1961ff0019909116610100171660011790555b6040518060526119af823960405190819003605201902060cc55508015610732576000805461ff00191690555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118a857805160ff19168380011785556118d5565b828001600101855582156118d5579182015b828111156118d55782518255916020019190600101906118ba565b506118e19291506118e5565b5090565b6105e691905b808211156118e157600081556001016118eb56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75655065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e652945434453413a20696e76616c6964207369676e6174757265202776272076616c7565454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205d7f122fd230c95c2f4c99f5ab82f0c3848b688107481fb6baf5032386ae0e1e64736f6c634300060a0033",
+ "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 0x7158DA7C GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xC52987CF GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xF3C274A6 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xF3C274A6 EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xF630DF34 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0xF77C4791 EQ PUSH2 0x54A JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0xC52987CF EQ PUSH2 0x45F JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4B8 JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x423 JUMPI DUP1 PUSH4 0xAABAECD6 EQ PUSH2 0x44F JUMPI DUP1 PUSH4 0xADE6E2AA EQ PUSH2 0x457 JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x7158DA7C EQ PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3C9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3EF JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x3408E470 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x43C885BA GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x43C885BA EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0x51B0A410 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x56D878F7 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x39B JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x3408E470 EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x30D JUMPI PUSH2 0x1A9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x17D69BC8 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2A9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B6 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x21D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x273 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x297 PUSH2 0x616 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x61C JUMP JUMPDEST PUSH2 0x2E7 PUSH2 0x6A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x297 PUSH2 0x6B2 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x257 PUSH2 0x719 JUMP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x728 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x385 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x736 JUMP JUMPDEST PUSH2 0x297 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x740 JUMP JUMPDEST PUSH2 0x273 PUSH2 0x75B JUMP JUMPDEST PUSH2 0x297 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x76B JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x792 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7F3 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x439 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x861 JUMP JUMPDEST PUSH2 0x273 PUSH2 0x875 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x885 JUMP JUMPDEST PUSH2 0x297 PUSH2 0x88C JUMP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x893 JUMP JUMPDEST PUSH2 0x297 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xA2B JUMP JUMPDEST PUSH2 0x257 PUSH2 0xA56 JUMP JUMPDEST PUSH2 0x273 PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x36D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xA6F JUMP JUMPDEST PUSH2 0x273 PUSH2 0xC6D JUMP JUMPDEST PUSH1 0x68 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DE 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 0x5C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x5F6 PUSH2 0xC7C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xC80 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x101 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x67 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x629 DUP5 DUP5 DUP5 PUSH2 0xD6C JUMP JUMPDEST PUSH2 0x69F DUP5 PUSH2 0x635 PUSH2 0xC7C JUMP JUMPDEST PUSH2 0x69A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A75 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x673 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH2 0xC80 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6C0 PUSH2 0xF6C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x6D2 PUSH2 0xC7C JUMP JUMPDEST DUP5 PUSH2 0x69A DUP6 PUSH1 0x66 PUSH1 0x0 PUSH2 0x6E3 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x732 DUP3 DUP3 PUSH2 0x1000 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x732 DUP3 DUP3 PUSH2 0x10FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x78C SWAP1 PUSH2 0x1206 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x69 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x5DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x800 PUSH2 0xC7C JUMP JUMPDEST DUP5 PUSH2 0x69A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B35 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x66 PUSH1 0x0 PUSH2 0x82A PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD PUSH2 0x86E PUSH2 0xC7C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xD6C JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x104 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x103 SLOAD DUP2 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x8E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xCC SLOAD DUP9 DUP9 DUP9 PUSH2 0x91D PUSH1 0xCB PUSH1 0x0 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 PUSH2 0x1206 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 DUP4 ADD MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x97B DUP3 PUSH2 0x120A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x98B DUP3 DUP8 DUP8 DUP8 PUSH2 0x1256 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x9F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xA14 SWAP1 PUSH2 0x13D0 JUMP JUMPDEST PUSH2 0xA1F DUP11 DUP11 DUP11 PUSH2 0xC80 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x66 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 PUSH2 0x105 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xFE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xA88 JUMPI POP PUSH2 0xA88 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0xA96 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xAFC JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x105 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3018205F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x3018205F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH2 0x100 DUP1 SLOAD DUP3 AND DUP11 DUP5 AND OR SWAP1 SSTORE PUSH2 0x101 DUP1 SLOAD DUP3 AND DUP10 DUP5 AND OR SWAP1 SSTORE PUSH2 0x102 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP8 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x103 DUP5 SWAP1 SSTORE PUSH2 0x104 DUP4 SWAP1 SSTORE PUSH2 0x105 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH32 0x455448555344432F313539373531313935352F323030502F5553444300000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x9 DUP4 MSTORE PUSH9 0x6F455448555344435 PUSH1 0xBC SHL SWAP1 DUP4 ADD MSTORE SWAP1 PUSH2 0xC3C DUP3 DUP3 PUSH2 0x13DF JUMP JUMPDEST PUSH2 0xC45 DUP3 PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0xC4F PUSH1 0x8 PUSH2 0x158E JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0xC63 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xCC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1B11 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1945 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x66 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xDB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1AEC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xDF6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1900 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE01 DUP4 DUP4 DUP4 PUSH2 0x14B3 JUMP JUMPDEST PUSH2 0xE44 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1967 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xE79 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xF64 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF56 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6C0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH2 0x1A23 PUSH1 0x52 SWAP2 CODECOPY PUSH1 0x52 ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH2 0xF92 PUSH2 0x15A4 JUMP JUMPDEST PUSH2 0xF9A PUSH2 0x15AA JUMP JUMPDEST PUSH2 0x15B0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xFF9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x105B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1067 PUSH1 0x0 DUP4 DUP4 PUSH2 0x14B3 JUMP JUMPDEST PUSH1 0x67 SLOAD PUSH2 0x107A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x10A6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xF9F AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1143 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1ACB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x114F DUP3 PUSH1 0x0 DUP4 PUSH2 0x14B3 JUMP JUMPDEST PUSH2 0x1192 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1923 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xED5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x65 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x67 SLOAD PUSH2 0x11BE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1606 AND JUMP JUMPDEST PUSH1 0x67 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1214 PUSH2 0xF6C JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x12B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x198D PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0x12CC JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x1307 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A01 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE SWAP3 MLOAD SWAP1 SWAP3 PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x135F 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 0x13C7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x13F8 JUMPI POP PUSH2 0x13F8 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x1406 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x1441 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x146C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH2 0x147F SWAP1 PUSH1 0x68 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1493 SWAP1 PUSH1 0x69 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x14B3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x14D1 JUMPI POP PUSH2 0x14D1 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x14DF JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x151A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1545 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x154D PUSH2 0x1648 JUMP JUMPDEST PUSH2 0x1570 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH2 0x16EA JUMP JUMPDEST PUSH2 0x1579 DUP3 PUSH2 0x17AA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x732 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x6A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x97 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x98 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x15BD PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFF9 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xED5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1661 JUMPI POP PUSH2 0x1661 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x166F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x16AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16D5 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x16E7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x1703 JUMPI POP PUSH2 0x1703 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x1711 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x174C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1777 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP4 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x97 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x98 SSTORE DUP1 ISZERO PUSH2 0x14B3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x17C3 JUMPI POP PUSH2 0x17C3 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x17D1 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1A9D PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1837 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x52 PUSH2 0x19AF DUP3 CODECOPY PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x52 ADD SWAP1 KECCAK256 PUSH1 0xCC SSTORE POP DUP1 ISZERO PUSH2 0x732 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x18A8 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x18D5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x18D5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x18D5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x18BA JUMP JUMPDEST POP PUSH2 0x18E1 SWAP3 SWAP2 POP PUSH2 0x18E5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x5E6 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x18E1 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x18EB JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 POP PUSH6 0x726D69742861 PUSH5 0x6472657373 KECCAK256 PUSH16 0x776E65722C6164647265737320737065 PUSH15 0x6465722C75696E743235362076616C PUSH22 0x652C75696E74323536206E6F6E63652C75696E743235 CALLDATASIZE KECCAK256 PUSH5 0x6561646C69 PUSH15 0x652945434453413A20696E76616C69 PUSH5 0x207369676E PUSH2 0x7475 PUSH19 0x65202776272076616C7565454950373132446F PUSH14 0x61696E28737472696E67206E616D PUSH6 0x2C737472696E PUSH8 0x2076657273696F6E 0x2C PUSH22 0x696E7432353620636861696E49642C61646472657373 KECCAK256 PUSH23 0x6572696679696E67436F6E74726163742945524332303A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E6365436F6E74726163742069 PUSH15 0x7374616E63652068617320616C7265 PUSH2 0x6479 KECCAK256 PUSH3 0x65656E KECCAK256 PUSH10 0x6E697469616C697A6564 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212205D7F SLT 0x2F 0xD2 ADDRESS 0xC9 0x5C 0x2F 0x4C SWAP10 CREATE2 0xAB DUP3 CREATE 0xC3 DUP5 DUP12 PUSH9 0x8107481FB6BAF50323 DUP7 0xAE 0xE 0x1E PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
+ "sourceMap": "424:1706:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4575:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4575:166:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;577:26:79;;;:::i;:::-;;;;-1:-1:-1;;;;;577:26:79;;;;;;;;;;;;;;3582:98:54;;;:::i;:::-;;;;;;;;;;;;;;;;5208:393;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5208:393:54;;;;;;;;;;;;;;;;;:::i;3441:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1808:320:79;;;:::i;2983:113:65:-;;;:::i;5996:215:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5996:215:54;;;;;;;;:::i;739:26:79:-;;;:::i;1600:95::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1600:95:79;;;;;;;;:::i;:::-;;1701:101;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1701:101:79;;;;;;;;:::i;3738:117:54:-;;;;;;;;;;;;;;;;-1:-1:-1;3738:117:54;-1:-1:-1;;;;;3738:117:54;;:::i;541:30:79:-;;;:::i;2741:118:65:-;;;;;;;;;;;;;;;;-1:-1:-1;2741:118:65;-1:-1:-1;;;;;2741:118:65;;:::i;2733:85:54:-;;;:::i;6698:312::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6698:312:54;;;;;;;;:::i;4058:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4058:172:54;;;;;;;;:::i;609:30:79:-;;;:::i;678:::-;;;:::i;646:26::-;;;:::i;1920:760:65:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1920:760:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4288:149:54:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:149:54;;;;;;;;;;:::i;715:17:79:-;;;:::i;478:26::-;;;:::i;772:822::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;772:822:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;510:25::-;;;:::i;2539:81:54:-;2608:5;2601:12;;;;;;;;-1:-1:-1;;2601:12:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:13;;2601:12;;2608:5;;2601:12;;2608:5;2601:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:81;;:::o;4575:166::-;4658:4;4674:39;4683:12;:10;:12::i;:::-;4697:7;4706:6;4674:8;:39::i;:::-;-1:-1:-1;4730:4:54;4575:166;;;;:::o;577:26:79:-;;;-1:-1:-1;;;;;577:26:79;;:::o;3582:98:54:-;3661:12;;3582:98;:::o;5208:393::-;5344:4;5360:36;5370:6;5378:9;5389:6;5360:9;:36::i;:::-;5406:167;5428:6;5448:12;:10;:12::i;:::-;5474:89;5512:6;5474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5474:19:54;;;;;;:11;:19;;;;;;5494:12;:10;:12::i;:::-;-1:-1:-1;;;;;5474:33:54;;;;;;;;;;;;-1:-1:-1;5474:33:54;;;:89;;:37;:89;:::i;:::-;5406:8;:167::i;:::-;-1:-1:-1;5590:4:54;5208:393;;;;;:::o;3441:81::-;3506:9;;;;3441:81;:::o;1808:320:79:-;2103:9;;2078:44::o;2983:113:65:-;3043:7;3069:20;:18;:20::i;:::-;3062:27;;2983:113;:::o;5996:215:54:-;6084:4;6100:83;6109:12;:10;:12::i;:::-;6123:7;6132:50;6171:10;6132:11;:25;6144:12;:10;:12::i;:::-;-1:-1:-1;;;;;6132:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6132:25:54;;;:34;;;;;;;;;;;:50;:38;:50;:::i;739:26:79:-;;;;;;;;;:::o;1600:95::-;1669:19;1675:3;1680:7;1669:5;:19::i;:::-;1600:95;;:::o;1701:101::-;1773:22;1779:7;1788:6;1773:5;:22::i;3738:117:54:-;-1:-1:-1;;;;;3830:18:54;3804:7;3830:18;;;:9;:18;;;;;;;3738:117::o;541:30:79:-;;;-1:-1:-1;;;;;541:30:79;;:::o;2741:118:65:-;-1:-1:-1;;;;;2828:14:65;;2802:7;2828:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;2821:31;2741:118;-1:-1:-1;;2741:118:65:o;2733:85:54:-;2804:7;2797:14;;;;;;;;-1:-1:-1;;2797:14:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2772:13;;2797:14;;2804:7;;2797:14;;2804:7;2797:14;;;;;;;;;;;;;;;;;;;;;;;;6698:312;6791:4;6807:175;6829:12;:10;:12::i;:::-;6855:7;6876:96;6915:15;6876:96;;;;;;;;;;;;;;;;;:11;:25;6888:12;:10;:12::i;:::-;-1:-1:-1;;;;;6876:25:54;;;;;;;;;;;;;;;;;-1:-1:-1;6876:25:54;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;4058:172::-;4144:4;4160:42;4170:12;:10;:12::i;:::-;4184:9;4195:6;4160:9;:42::i;609:30:79:-;;;-1:-1:-1;;;;;609:30:79;;:::o;678:::-;;;;:::o;646:26::-;;;;:::o;1920:760:65:-;2210:8;2191:15;:27;;2183:69;;;;;-1:-1:-1;;;2183:69:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:18;2318:16;;2336:5;2343:7;2352:6;2360:24;:7;:14;2368:5;-1:-1:-1;;;;;2360:14:65;-1:-1:-1;;;;;2360:14:65;;;;;;;;;;;;:22;:24::i;:::-;2307:88;;;;;;;;;;;-1:-1:-1;;;;;2307:88:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2284:121;;;;;;-1:-1:-1;;2431:28:65;2284:121;2431:16;:28::i;:::-;2416:43;;2470:14;2487:39;2512:4;2518:1;2521;2524;2487:24;:39::i;:::-;2470:56;;2554:5;-1:-1:-1;;;;;2544:15:65;:6;-1:-1:-1;;;;;2544:15:65;;2536:58;;;;;-1:-1:-1;;;2536:58:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2605:14:65;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;2641:32;2650:5;2657:7;2666:6;2641:8;:32::i;:::-;1920:760;;;;;;;;;;:::o;4288:149:54:-;-1:-1:-1;;;;;4403:18:54;;;4377:7;4403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4288:149::o;715:17:79:-;;;;;;:::o;478:26::-;;;-1:-1:-1;;;;;478:26:79;;:::o;772:822::-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1036:6:79::1;:13:::0;;-1:-1:-1;;1036:13:79::1;;;::::0;;1072:50:::1;::::0;;-1:-1:-1;;;1072:50:79;;;;-1:-1:-1;;;;;1072:48:79;::::1;::::0;::::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:48;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;1072:50:79;1059:10:::1;:63:::0;;-1:-1:-1;;;;;;1059:63:79;;::::1;-1:-1:-1::0;;;;;1059:63:79;;::::1;;::::0;;;::::1;1132:34:::0;;;::::1;::::0;;::::1;;::::0;;1176:11:::1;:26:::0;;;::::1;::::0;;::::1;;::::0;;1212:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;1256:11:::1;:26:::0;;;1292:15:::1;:34:::0;;;1336:5:::1;:14:::0;;-1:-1:-1;;1336:14:79::1;::::0;::::1;;;::::0;;1360:56:::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;1072:50;1360:56:::0;;::::1;::::0;;;;1426:39;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1426:39:79;;::::1;::::0;1360:56;1475:46:::1;1360:56:::0;1426:39;1475:22:::1;:46::i;:::-;1531:29;1550:9;1531:18;:29::i;:::-;1570:17;1585:1;1570:14;:17::i;:::-;1410:1:57;;1426:14:::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;772:822:79;;;;;;;;:::o;510:25::-;;;-1:-1:-1;;;;;510:25:79;;:::o;864:104:55:-;951:10;864:104;:::o;9838:370:54:-;-1:-1:-1;;;;;9969:19:54;;9961:68;;;;-1:-1:-1;;;9961:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10047:21:54;;10039:68;;;;-1:-1:-1;;;10039:68:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10118:18:54;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10169:32;;;;;;;;;;;;;;;;;9838:370;;;:::o;7484:560::-;-1:-1:-1;;;;;7619:20:54;;7611:70;;;;-1:-1:-1;;;7611:70:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7699:23:54;;7691:71;;;;-1:-1:-1;;;7691:71:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:47;7794:6;7802:9;7813:6;7773:20;:47::i;:::-;7851:71;7873:6;7851:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7851:17:54;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7831:17:54;;;;;;;:9;:17;;;;;;:91;;;;7955:20;;;;;;;:32;;7980:6;7955:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7932:20:54;;;;;;;:9;:20;;;;;;;;;:55;;;;8002:35;;;;;;;7932:20;;8002:35;;;;;;;;;;;;;7484:560;;;:::o;1810:217:67:-;1926:7;1961:12;1953:6;;;;1945:29;;;;-1:-1:-1;;;1945:29:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1996:5:67;;;1810:217::o;2713:160:64:-;2766:7;2792:74;1476:95;;;;;;;;;;;;;;;;;;;2826:17;:15;:17::i;:::-;2845:20;:18;:20::i;:::-;2792:21;:74::i;938:176:67:-;996:7;1027:5;;;1050:6;;;;1042:46;;;;;-1:-1:-1;;;1042:46:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;938:176;-1:-1:-1;;;938:176:67:o;8315:370:54:-;-1:-1:-1;;;;;8398:21:54;;8390:65;;;;;-1:-1:-1;;;8390:65:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:49;8495:1;8499:7;8508:6;8466:20;:49::i;:::-;8541:12;;:24;;8558:6;8541:24;:16;:24;:::i;:::-;8526:12;:39;-1:-1:-1;;;;;8596:18:54;;;;;;:9;:18;;;;;;:30;;8619:6;8596:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8575:18:54;;;;;;:9;:18;;;;;;;;:51;;;;8641:37;;;;;;;8575:18;;;;8641:37;;;;;;;;;;8315:370;;:::o;9005:410::-;-1:-1:-1;;;;;9088:21:54;;9080:67;;;;-1:-1:-1;;;9080:67:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9158:49;9179:7;9196:1;9200:6;9158:20;:49::i;:::-;9239:68;9262:6;9239:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9239:18:54;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;9218:18:54;;;;;;:9;:18;;;;;:89;9332:12;;:24;;9349:6;9332:24;:16;:24;:::i;:::-;9317:12;:39;9371:37;;;;;;;;9397:1;;-1:-1:-1;;;;;9371:37:54;;;;;;;;;;;;9005:410;;:::o;1184:112:68:-;1275:14;;1184:112::o;3745:175:64:-;3814:7;3879:20;:18;:20::i;:::-;3901:10;3850:62;;;;;;-1:-1:-1;;;3850:62:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3840:73;;;;;;3833:80;;3745:175;;;:::o;2015:1486:63:-;2138:7;3066:66;3052:80;;;3031:161;;;;-1:-1:-1;;;3031:161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3210:1;:7;;3215:2;3210:7;:18;;;;3221:1;:7;;3226:2;3221:7;3210:18;3202:65;;;;-1:-1:-1;;;3202:65:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3379:24;;;3362:14;3379:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3362:14;;3379:24;;;;;;;-1:-1:-1;;3379:24:63;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3379:24:63;;-1:-1:-1;;3379:24:63;;;-1:-1:-1;;;;;;;3421:20:63;;3413:57;;;;;-1:-1:-1;;;3413:57:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;3488:6;2015:1486;-1:-1:-1;;;;;2015:1486:63:o;1302:178:68:-;1454:19;;1472:1;1454:19;;;1302:178::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;:::o;2296:178:54:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2403:13:54;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2426:17:54;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2453:9:54::1;:14:::0;;-1:-1:-1;;2453:14:54::1;2465:2;2453:14;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;2296:178:54;;;:::o;1421:200:65:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1500:26:65::1;:24;:26::i;:::-;1536:34;1560:4;1536:34;;;;;;;;;;;;;-1:-1:-1::0;;;1536:34:65::1;;::::0;:23:::1;:34::i;:::-;1580;1609:4;1580:28;:34::i;:::-;1426:14:57::0;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1421:200:65;;:::o;10531:88:54:-;10591:9;:21;;-1:-1:-1;;10591:21:54;;;;;;;;;;;;10531:88::o;4482:103:64:-;4566:12;;4482:103;:::o;4824:109::-;4911:15;;4824:109;:::o;2879:241::-;3011:7;3058:8;3068:4;3074:7;3083:13;:11;:13::i;:::-;3047:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3106:4;3047:65;;;;;;;;;;;;;;;;;;;;;;;;3037:76;;;;;;2879:241;-1:-1:-1;;;;2879:241:64:o;1385:134:67:-;1443:7;1469:43;1473:1;1476;1469:43;;;;;;;;;;;;;;;;;:3;:43::i;799:59:55:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1426:14;1422:65;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;799:59:55;:::o;2335:292:64:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;2463:22:64;;::::1;::::0;;::::1;::::0;;;;2519:25;;;;::::1;::::0;;;;2554:12:::1;:25:::0;;;;2589:15:::1;:31:::0;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;2335:292:64;;;:::o;1627:232:65:-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;1735:117:65::1;::::0;;::::1;;::::0;::::1;;::::0;;;;;::::1;::::0;;;1716:16:::1;:136:::0;-1:-1:-1;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1627:232:65;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ },
+ "methodIdentifiers": {
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "addressBook()": "f5887cdd",
+ "allowance(address,address)": "dd62ed3e",
+ "approve(address,uint256)": "095ea7b3",
+ "balanceOf(address)": "70a08231",
+ "burnOtoken(address,uint256)": "56d878f7",
+ "collateralAsset()": "aabaecd6",
+ "controller()": "f77c4791",
+ "decimals()": "313ce567",
+ "decreaseAllowance(address,uint256)": "a457c2d7",
+ "expiryTimestamp()": "ade6e2aa",
+ "getChainId()": "3408e470",
+ "increaseAllowance(address,uint256)": "39509351",
+ "init(address,address,address,address,uint256,uint256,bool)": "f630df34",
+ "inited()": "43c885ba",
+ "isPut()": "f3c274a6",
+ "mintOtoken(address,uint256)": "51b0a410",
+ "name()": "06fdde03",
+ "nonces(address)": "7ecebe00",
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
+ "strikeAsset()": "17d69bc8",
+ "strikePrice()": "c52987cf",
+ "symbol()": "95d89b41",
+ "totalSupply()": "18160ddd",
+ "transfer(address,uint256)": "a9059cbb",
+ "transferFrom(address,address,uint256)": "23b872dd",
+ "underlyingAsset()": "7158da7c"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"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\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controller\",\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expiryTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strikeAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_collateralAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiryTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isPut\",\"type\":\"bool\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inited\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPut\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintOtoken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"amount\",\"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\":[],\"name\":\"strikeAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strikePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Otoken inherits ERC20PermitUpgradeable because we need to use the init instead of constructor This is V1 implementation, with no getOtokenDetails()\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"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 {_setupDecimals} is called. 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.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"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: - `recipient` 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}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{},\"notice\":\"SPDX-License-Identifier: UNLICENSED\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/OtokenImplV1.sol\":\"OtokenImplV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/AddressBookInterface.sol\":{\"keccak256\":\"0xf083b72d2476fc63b101130a044a7593a6bead41ba8c23482cafd7b7e2547687\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9eb8136364c98b02fd6ba1a893fee0681235b1152c0728f3066fa42d84e7320e\",\"dweb:/ipfs/QmZEGS1cHguLgyJHkFSNAhE16RKahvSqDKezBaKr2825tV\"]},\"contracts/packages/oz/upgradeability/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9bbbf91998beffa134c6d95b92150c43891f09473bf2cfaa9883d6a5f9e5f359\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a6662c4d18a252f57113a15dcd77b6076e4fa8a12fdafc0a4b22f32152d81c7\",\"dweb:/ipfs/QmNtkoMk2ESR8zViGm6x9b1Xaysz48snZZxJNfviuWKv3t\"]},\"contracts/packages/oz/upgradeability/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0x921d5098d029bb0c2f8839c0923a90541784cb8c11eac4f17d38d8bc30e9cc94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4fd84612a2a6516fd9b430a8c7ee95e4f6feffc74498985c3068849099f9b4e\",\"dweb:/ipfs/QmeShbKP8rm3oFjbzZTqYTJLEyUhszDLaqXaSgqPCkKCL9\"]},\"contracts/packages/oz/upgradeability/IERC20Upgradeable.sol\":{\"keccak256\":\"0xd9ab2b6ecc72b61e07160e769237750781cc5409332536c12459b83cd406100b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac6541f1f27ecf3155e4233aeaa695348fb5d42c163e04d38e40ef6f00de6d91\",\"dweb:/ipfs/QmXw7LaCGNrPHQqe9h3mS32Se8ZLCimP2mwqhyV4a7rQSp\"]},\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/packages/oz/upgradeability/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0x089264e9f61815e40a3acf85cb1077e81be8aab6728bd423cf52714e1fbf05cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6e77372ba9c9604248fb33b0e23f1d6969ad60aeaa0e8f6aa94570802a73cc7\",\"dweb:/ipfs/QmTtgkYETk9ZNXRsHZJscsEJUXPsckNfZDkfVXjzCHrLE5\"]},\"contracts/packages/oz/upgradeability/erc20-permit/EIP712Upgradeable.sol\":{\"keccak256\":\"0x272ded2b13c715a655b575e51a04aa0d1d8205603bed6c8825e99b78b94b40bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e88cc43e187de68a698561c5fc6bbe50a2847c3fe3a15571413b5f5f9779400a\",\"dweb:/ipfs/QmYRcBveKTjqrrPpbfgpZwcCQay2mN2Pww5pvCUpniS54F\"]},\"contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xb3a655c9ab3da27ebe99ef47b4b95f699fa02b99c8911aa1f32c906e48e429fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adbdc052be7e3fe0350a8e634f4cd9114386ec25411c3b8425fad5e4501f7cae\",\"dweb:/ipfs/QmbbWNivd3woPq1rDgJYxiL7mVBT9auABvkrechyJ1JjDt\"]},\"contracts/packages/oz/upgradeability/erc20-permit/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x126418090e99a4da7d1adc318da6250c2586847e45a3bc61084e17dd81c1da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33ea972107e73218f2bf63fd933647c13291ce4331b62a8202bd61aaadc9a484\",\"dweb:/ipfs/QmeE6MUmn1mK8mWnGEA4NSKsiiptYP7wSc8SzC9B95Tz3M\"]},\"contracts/packages/oz/upgradeability/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x4459d1d5a315c28a24682f87cef356ebc241477eb664fc4bc20db57d4e75b467\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c020e46a20ff93d4718b6204ddb1c832a06f3edbab0f9eaa84ef55a35f7d8a\",\"dweb:/ipfs/QmQnm5Ra8M1BH8WfGdpFZxvjMyHSQuhu8ogi6243C5dTpE\"]},\"contracts/packages/oz/upgradeability/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0xf959d721bc9136a6e59e82953c1c5024996dfd00a68a17d37f7fc42651d855b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://25bdcbfdac49598b552c67be6b89dc87a46ac177330da3b0c4854ea31019da1e\",\"dweb:/ipfs/QmaWctiuA3r1iejQ2JBCbkip4NEUq9zQ4CHXZuFYRsyCRP\"]},\"contracts/tests/OtokenImplV1.sol\":{\"keccak256\":\"0x5b68802240de4ff2a158759ac65f0129f4ef2895d439573131c5f33497de5367\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b30b2aaf0031eaeb5a0e8637ba075119ce5a478e0cbb569b11aa4de93bdf36d6\",\"dweb:/ipfs/QmSyREuZXKXoHL5U4gFafCiPNuMbLHfAU59tCx1w9tRgnk\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/SignedConverterTester.sol": {
+ "SignedConverterTester": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "a",
+ "type": "int256"
+ }
+ ],
+ "name": "testFromInt",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "a",
+ "type": "uint256"
+ }
+ ],
+ "name": "testFromUint",
+ "outputs": [
+ {
+ "internalType": "int256",
+ "name": "",
+ "type": "int256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b5061017c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063395413431461003b57806389e616bb14610064575b600080fd5b61004e6100493660046100e3565b610077565b60405161005b91906100fb565b60405180910390f35b61004e6100723660046100e3565b61008a565b600061008282610095565b90505b919050565b6000610082826100b1565b6000808212156100aa57816000039050610085565b5080610085565b6000600160ff1b82106100df5760405162461bcd60e51b81526004016100d690610104565b60405180910390fd5b5090565b6000602082840312156100f4578081fd5b5035919050565b90815260200190565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b60608201526080019056fea264697066735822122013fdf1fca26acc3fa2d42392f5c4f566e6e34aea9154a776ae283745d2f36b6e64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17C 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 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39541343 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x89E616BB EQ PUSH2 0x64 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x49 CALLDATASIZE PUSH1 0x4 PUSH2 0xE3 JUMP JUMPDEST PUSH2 0x77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0xFB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0xE3 JUMP JUMPDEST PUSH2 0x8A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x82 DUP3 PUSH2 0x95 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x82 DUP3 PUSH2 0xB1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0xAA JUMPI DUP2 PUSH1 0x0 SUB SWAP1 POP PUSH2 0x85 JUMP JUMPDEST POP DUP1 PUSH2 0x85 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH2 0xDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6 SWAP1 PUSH2 0x104 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF4 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT REVERT CALL 0xFC LOG2 PUSH11 0xCC3FA2D42392F5C4F566E6 0xE3 0x4A 0xEA SWAP2 SLOAD 0xA7 PUSH23 0xAE283745D2F36B6E64736F6C634300060A003300000000 ",
+ "sourceMap": "218:354:80:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063395413431461003b57806389e616bb14610064575b600080fd5b61004e6100493660046100e3565b610077565b60405161005b91906100fb565b60405180910390f35b61004e6100723660046100e3565b61008a565b600061008282610095565b90505b919050565b6000610082826100b1565b6000808212156100aa57816000039050610085565b5080610085565b6000600160ff1b82106100df5760405162461bcd60e51b81526004016100d690610104565b60405180910390fd5b5090565b6000602082840312156100f4578081fd5b5035919050565b90815260200190565b60208082526022908201527f4669786564506f696e74496e743235363a206f7574206f6620696e742072616e604082015261676560f01b60608201526080019056fea264697066735822122013fdf1fca26acc3fa2d42392f5c4f566e6e34aea9154a776ae283745d2f36b6e64736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39541343 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x89E616BB EQ PUSH2 0x64 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x49 CALLDATASIZE PUSH1 0x4 PUSH2 0xE3 JUMP JUMPDEST PUSH2 0x77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0xFB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0xE3 JUMP JUMPDEST PUSH2 0x8A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x82 DUP3 PUSH2 0x95 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x82 DUP3 PUSH2 0xB1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0xAA JUMPI DUP2 PUSH1 0x0 SUB SWAP1 POP PUSH2 0x85 JUMP JUMPDEST POP DUP1 PUSH2 0x85 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 LT PUSH2 0xDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6 SWAP1 PUSH2 0x104 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF4 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4669786564506F696E74496E743235363A206F7574206F6620696E742072616E PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x6765 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT REVERT CALL 0xFC LOG2 PUSH11 0xCC3FA2D42392F5C4F566E6 0xE3 0x4A 0xEA SWAP2 SLOAD 0xA7 PUSH23 0xAE283745D2F36B6E64736F6C634300060A003300000000 ",
+ "sourceMap": "218:354:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;333:115;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;454:116;;;;;;;;;:::i;333:115::-;387:7;413:28;439:1;413:25;:28::i;:::-;406:35;;333:115;;;;:::o;454:116::-;510:6;535:28;561:1;535:25;:28::i;784:179:29:-;836:7;863:1;859;:5;855:102;;;896:1;895:2;;880:18;;;;855:102;-1:-1:-1;944:1:29;929:17;;439:162;492:6;-1:-1:-1;;;518:1:29;:10;510:57;;;;-1:-1:-1;;;510:57:29;;;;;;;;;;;;;;;;;-1:-1:-1;592:1:29;439:162::o;277:239:-1:-;;380:2;368:9;359:7;355:23;351:32;348:2;;;-1:-1;;386:12;348:2;-1:-1;71:20;;342:174;-1:-1;342:174;1388:218;840:36;;;1513:2;1498:18;;1484:122;1613:416;1813:2;1827:47;;;1113:2;1798:18;;;2369:19;1149:34;2409:14;;;1129:55;-1:-1;;;1204:12;;;1197:26;1242:12;;;1784:245"
+ },
+ "methodIdentifiers": {
+ "testFromInt(int256)": "39541343",
+ "testFromUint(uint256)": "89e616bb"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"a\",\"type\":\"int256\"}],\"name\":\"testFromInt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"testFromUint\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"SignedConverter contract tester\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/SignedConverterTester.sol\":\"SignedConverterTester\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libs/SignedConverter.sol\":{\"keccak256\":\"0xcd580557dc2c337a870d632b1120f2ec0f7494056d48620598a11d09418dcfa5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cfa5fb05fa755dde57c74abf107eaf806794c48fa571cf17abaf856074fddd30\",\"dweb:/ipfs/QmV5L5XdK6BwmKDxj4zqPVh7MnHJeY8pUxZ2JLHqzW1B22\"]},\"contracts/tests/SignedConverterTester.sol\":{\"keccak256\":\"0xbea41302961e2950a2c02e95dc73a11391f36230d2257a0352fbad42b6b83ba6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://86aa952fd59d09ca1d4caf9a5a6ce794b2e58223bfa928a08f525da4858d58c7\",\"dweb:/ipfs/QmV36PmXXzfqysGM8SZhMGyY1ypNKy9vzZVYMZD2251P6i\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/UpgradeableContractV1.sol": {
+ "UpgradeableContractV1": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getV1Version",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610228806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063485cc955146100515780638da5cb5b146100815780638f26c061146100a5578063f5887cdd146100bf575b600080fd5b61007f6004803603604081101561006757600080fd5b506001600160a01b03813581169160200135166100c7565b005b61008961019b565b604080516001600160a01b039092168252519081900360200190f35b6100ad6101aa565b60408051918252519081900360200190f35b6100896101af565b600054610100900460ff16806100e057506100e06101be565b806100ee575060005460ff16155b6101295760405162461bcd60e51b815260040180806020018281038252602e8152602001806101c5602e913960400191505060405180910390fd5b600054610100900460ff16158015610154576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b038086166001600160a01b03199283161790925560348054928516929091169190911790558015610196576000805461ff00191690555b505050565b6034546001600160a01b031681565b600190565b6033546001600160a01b031681565b303b159056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a26469706673582212202c44165c9926c16b0d62eb343525ced56dc43ee914ee10a23b11e76d51ea010864736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x228 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 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x485CC955 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0x8F26C061 EQ PUSH2 0xA5 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0xBF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xC7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x89 PUSH2 0x19B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAD PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x89 PUSH2 0x1AF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xE0 JUMPI POP PUSH2 0xE0 PUSH2 0x1BE JUMP JUMPDEST DUP1 PUSH2 0xEE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x129 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1C5 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x34 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP INVALID NUMBER PUSH16 0x6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564A26469706673582212 KECCAK256 0x2C DIFFICULTY AND 0x5C SWAP10 0x26 0xC1 PUSH12 0xD62EB343525CED56DC43EE9 EQ 0xEE LT LOG2 EXTCODESIZE GT 0xE7 PUSH14 0x51EA010864736F6C634300060A00 CALLER ",
+ "sourceMap": "221:601:81:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c8063485cc955146100515780638da5cb5b146100815780638f26c061146100a5578063f5887cdd146100bf575b600080fd5b61007f6004803603604081101561006757600080fd5b506001600160a01b03813581169160200135166100c7565b005b61008961019b565b604080516001600160a01b039092168252519081900360200190f35b6100ad6101aa565b60408051918252519081900360200190f35b6100896101af565b600054610100900460ff16806100e057506100e06101be565b806100ee575060005460ff16155b6101295760405162461bcd60e51b815260040180806020018281038252602e8152602001806101c5602e913960400191505060405180910390fd5b600054610100900460ff16158015610154576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b038086166001600160a01b03199283161790925560348054928516929091169190911790558015610196576000805461ff00191690555b505050565b6034546001600160a01b031681565b600190565b6033546001600160a01b031681565b303b159056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a26469706673582212202c44165c9926c16b0d62eb343525ced56dc43ee914ee10a23b11e76d51ea010864736f6c634300060a0033",
+ "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 0x485CC955 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0x8F26C061 EQ PUSH2 0xA5 JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0xBF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xC7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x89 PUSH2 0x19B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAD PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x89 PUSH2 0x1AF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xE0 JUMPI POP PUSH2 0xE0 PUSH2 0x1BE JUMP JUMPDEST DUP1 PUSH2 0xEE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x129 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1C5 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x34 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP INVALID NUMBER PUSH16 0x6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564A26469706673582212 KECCAK256 0x2C DIFFICULTY AND 0x5C SWAP10 0x26 0xC1 PUSH12 0xD62EB343525CED56DC43EE9 EQ 0xEE LT LOG2 EXTCODESIZE GT 0xE7 PUSH14 0x51EA010864736F6C634300060A00 CALLER ",
+ "sourceMap": "221:601:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;589:144;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;589:144:81;;;;;;;;;;:::i;:::-;;373:20;;;:::i;:::-;;;;-1:-1:-1;;;;;373:20:81;;;;;;;;;;;;;;739:81;;;:::i;:::-;;;;;;;;;;;;;;;;311:26;;;:::i;589:144::-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;676:11:81::1;:26:::0;;-1:-1:-1;;;;;676:26:81;;::::1;-1:-1:-1::0;;;;;;676:26:81;;::::1;;::::0;;;712:5:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;589:144:81;;;:::o;373:20::-;;;-1:-1:-1;;;;;373:20:81;;:::o;739:81::-;812:1;739:81;:::o;311:26::-;;;-1:-1:-1;;;;;311:26:81;;:::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;:::o"
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "getV1Version()": "8f26c061",
+ "initialize(address,address)": "485cc955",
+ "owner()": "8da5cb5b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getV1Version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"initialize(address,address)\":{\"details\":\"this function is invoked by the proxy contract when this contract is added to the AddressBook.\",\"params\":{\"_addressBook\":\"the address of the AddressBook*\"}}}},\"userdoc\":{\"methods\":{\"addressBook()\":{\"notice\":\"addressbook address\"},\"owner()\":{\"notice\":\"owner address\"}},\"notice\":\"Upgradeable testing contract\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/UpgradeableContractV1.sol\":\"UpgradeableContractV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/tests/UpgradeableContractV1.sol\":{\"keccak256\":\"0xceff660ba538f46da09b2a3b67f0e8c43b0535e42b2d004daf38b499fe56bc4f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e872ee2d042f053a3444f15eb4197b12fb66fb1d7ada56d1e3c0e912585c187f\",\"dweb:/ipfs/QmZLKfttXLHDbDGFz77H24ixug6pdH2YP5qJyK56xCJhEL\"]}},\"version\":1}"
+ }
+ },
+ "contracts/tests/UpgradeableContractV2.sol": {
+ "UpgradeableContractV2": {
+ "abi": [
+ {
+ "inputs": [],
+ "name": "addressBook",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getV1Version",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getV2Version",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_addressBook",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "evm": {
+ "bytecode": {
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50610240806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063485cc9551461005c5780638da5cb5b1461008c5780638f26c061146100b05780639b2c78b5146100ca578063f5887cdd146100d2575b600080fd5b61008a6004803603604081101561007257600080fd5b506001600160a01b03813581169160200135166100da565b005b6100946101ae565b604080516001600160a01b039092168252519081900360200190f35b6100b86101bd565b60408051918252519081900360200190f35b6100b86101c2565b6100946101c7565b600054610100900460ff16806100f357506100f36101d6565b80610101575060005460ff16155b61013c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806101dd602e913960400191505060405180910390fd5b600054610100900460ff16158015610167576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b038086166001600160a01b031992831617909255603480549285169290911691909117905580156101a9576000805461ff00191690555b505050565b6034546001600160a01b031681565b600190565b600290565b6033546001600160a01b031681565b303b159056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a2646970667358221220f6d4c8238e8a3709a6c043c6b4d7f9c42afee2432fb971cb0ae752f7d16104f264736f6c634300060a0033",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x240 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 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x485CC955 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x8C JUMPI DUP1 PUSH4 0x8F26C061 EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0x9B2C78B5 EQ PUSH2 0xCA JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0xD2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xDA JUMP JUMPDEST STOP JUMPDEST PUSH2 0x94 PUSH2 0x1AE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB8 PUSH2 0x1BD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB8 PUSH2 0x1C2 JUMP JUMPDEST PUSH2 0x94 PUSH2 0x1C7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xF3 JUMPI POP PUSH2 0xF3 PUSH2 0x1D6 JUMP JUMPDEST DUP1 PUSH2 0x101 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x13C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1DD PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x34 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x2 SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP INVALID NUMBER PUSH16 0x6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564A26469706673582212 KECCAK256 0xF6 0xD4 0xC8 0x23 DUP15 DUP11 CALLDATACOPY MULMOD 0xA6 0xC0 NUMBER 0xC6 0xB4 0xD7 0xF9 0xC4 0x2A INVALID 0xE2 NUMBER 0x2F 0xB9 PUSH18 0xCB0AE752F7D16104F264736F6C634300060A STOP CALLER ",
+ "sourceMap": "209:145:82:-:0;;;;;;;;;;;;;;;;;;;"
+ },
+ "deployedBytecode": {
+ "immutableReferences": {},
+ "linkReferences": {},
+ "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c8063485cc9551461005c5780638da5cb5b1461008c5780638f26c061146100b05780639b2c78b5146100ca578063f5887cdd146100d2575b600080fd5b61008a6004803603604081101561007257600080fd5b506001600160a01b03813581169160200135166100da565b005b6100946101ae565b604080516001600160a01b039092168252519081900360200190f35b6100b86101bd565b60408051918252519081900360200190f35b6100b86101c2565b6100946101c7565b600054610100900460ff16806100f357506100f36101d6565b80610101575060005460ff16155b61013c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806101dd602e913960400191505060405180910390fd5b600054610100900460ff16158015610167576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b038086166001600160a01b031992831617909255603480549285169290911691909117905580156101a9576000805461ff00191690555b505050565b6034546001600160a01b031681565b600190565b600290565b6033546001600160a01b031681565b303b159056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a2646970667358221220f6d4c8238e8a3709a6c043c6b4d7f9c42afee2432fb971cb0ae752f7d16104f264736f6c634300060a0033",
+ "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 0x485CC955 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x8C JUMPI DUP1 PUSH4 0x8F26C061 EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0x9B2C78B5 EQ PUSH2 0xCA JUMPI DUP1 PUSH4 0xF5887CDD EQ PUSH2 0xD2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xDA JUMP JUMPDEST STOP JUMPDEST PUSH2 0x94 PUSH2 0x1AE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB8 PUSH2 0x1BD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB8 PUSH2 0x1C2 JUMP JUMPDEST PUSH2 0x94 PUSH2 0x1C7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0xF3 JUMPI POP PUSH2 0xF3 PUSH2 0x1D6 JUMP JUMPDEST DUP1 PUSH2 0x101 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x13C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1DD PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x34 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x2 SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP INVALID NUMBER PUSH16 0x6E747261637420696E7374616E636520 PUSH9 0x617320616C72656164 PUSH26 0x206265656E20696E697469616C697A6564A26469706673582212 KECCAK256 0xF6 0xD4 0xC8 0x23 DUP15 DUP11 CALLDATACOPY MULMOD 0xA6 0xC0 NUMBER 0xC6 0xB4 0xD7 0xF9 0xC4 0x2A INVALID 0xE2 NUMBER 0x2F 0xB9 PUSH18 0xCB0AE752F7D16104F264736F6C634300060A STOP CALLER ",
+ "sourceMap": "209:145:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;589:144:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;589:144:81;;;;;;;;;;:::i;:::-;;373:20;;;:::i;:::-;;;;-1:-1:-1;;;;;373:20:81;;;;;;;;;;;;;;739:81;;;:::i;:::-;;;;;;;;;;;;;;;;271::82;;;:::i;311:26:81:-;;;:::i;589:144::-;1150:12:57;;;;;;;;:31;;;1166:15;:13;:15::i;:::-;1150:47;;;-1:-1:-1;1186:11:57;;;;1185:12;1150:47;1142:106;;;;-1:-1:-1;;;1142:106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:19;1282:12;;;;;;1281:13;1304:96;;;;1338:12;:19;;-1:-1:-1;;;;1338:19:57;;;;;1371:18;1353:4;1371:18;;;1304:96;676:11:81::1;:26:::0;;-1:-1:-1;;;;;676:26:81;;::::1;-1:-1:-1::0;;;;;;676:26:81;;::::1;;::::0;;;712:5:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1422:65:57;;;;1471:5;1456:20;;-1:-1:-1;;1456:20:57;;;1422:65;589:144:81;;;:::o;373:20::-;;;-1:-1:-1;;;;;373:20:81;;:::o;739:81::-;812:1;739:81;:::o;271::82:-;344:1;271:81;:::o;311:26:81:-;;;-1:-1:-1;;;;;311:26:81;;:::o;1583:556:57:-;2018:4;2082:17;2125:7;1583:556;:::o"
+ },
+ "methodIdentifiers": {
+ "addressBook()": "f5887cdd",
+ "getV1Version()": "8f26c061",
+ "getV2Version()": "9b2c78b5",
+ "initialize(address,address)": "485cc955",
+ "owner()": "8da5cb5b"
+ }
+ },
+ "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"addressBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getV1Version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getV2Version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressBook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Opyn Team\",\"methods\":{\"initialize(address,address)\":{\"details\":\"this function is invoked by the proxy contract when this contract is added to the AddressBook.\",\"params\":{\"_addressBook\":\"the address of the AddressBook*\"}}}},\"userdoc\":{\"methods\":{\"addressBook()\":{\"notice\":\"addressbook address\"},\"owner()\":{\"notice\":\"owner address\"}},\"notice\":\"Upgradeable testing contract\"}},\"settings\":{\"compilationTarget\":{\"contracts/tests/UpgradeableContractV2.sol\":\"UpgradeableContractV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/packages/oz/upgradeability/Initializable.sol\":{\"keccak256\":\"0x8e9f272c9e7e6e76b46d37a42e8fe3328f6f42e23c54c991669e61662bad9b22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dd29f558f3415b6147fb602fb8ecaa29fd960abcc194ed8a06135d3d9f3c17e\",\"dweb:/ipfs/QmRfHuYf4KgNLkx5G4reMiiCRdpx1R3Fq8PRaYnWLxw7He\"]},\"contracts/tests/UpgradeableContractV1.sol\":{\"keccak256\":\"0xceff660ba538f46da09b2a3b67f0e8c43b0535e42b2d004daf38b499fe56bc4f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e872ee2d042f053a3444f15eb4197b12fb66fb1d7ada56d1e3c0e912585c187f\",\"dweb:/ipfs/QmZLKfttXLHDbDGFz77H24ixug6pdH2YP5qJyK56xCJhEL\"]},\"contracts/tests/UpgradeableContractV2.sol\":{\"keccak256\":\"0xff1a61e6853e0ee020673c6ce7e95569f286fd5bd370c006fdc6c3d128220fc3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cff9d5938aa3b0d2b847e94dd68168d34c3118c50711583ca51af43401bc67da\",\"dweb:/ipfs/QmWnxHGZTsAfc3VjFUZArXrmGHfSfXcrXVRz5pqTgijXAH\"]}},\"version\":1}"
+ }
+ }
+ },
+ "errors": [
+ {
+ "component": "general",
+ "errorCode": "2519",
+ "formattedMessage": "contracts/core/Oracle.sol:336:13: Warning: This declaration shadows an existing declaration.\n Price memory price = storedPrice[_asset][_expiryTimestamp];\n ^----------------^\ncontracts/core/Oracle.sol:332:9: The shadowed declaration is here:\n uint256 price = stablePrice[_asset];\n ^-----------^\n",
+ "message": "This declaration shadows an existing declaration.",
+ "secondarySourceLocations": [
+ {
+ "end": 12850,
+ "file": "contracts/core/Oracle.sol",
+ "message": "The shadowed declaration is here:",
+ "start": 12837
+ }
+ ],
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 13004,
+ "file": "contracts/core/Oracle.sol",
+ "start": 12986
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "3628",
+ "formattedMessage": "contracts/packages/oz/upgradeability/Proxy.sol:10:1: Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\nabstract contract Proxy {\n^ (Relevant source part starts here and spans across multiple lines).\ncontracts/packages/oz/upgradeability/Proxy.sol:21:5: The payable fallback function is defined here.\n fallback() external payable {\n ^ (Relevant source part starts here and spans across multiple lines).\n",
+ "message": "This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.",
+ "secondarySourceLocations": [
+ {
+ "end": 1234,
+ "file": "contracts/packages/oz/upgradeability/Proxy.sol",
+ "message": "The payable fallback function is defined here.",
+ "start": 677
+ }
+ ],
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 1236,
+ "file": "contracts/packages/oz/upgradeability/Proxy.sol",
+ "start": 214
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "3628",
+ "formattedMessage": "contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol:12:1: Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\ncontract UpgradeabilityProxy is Proxy {\n^ (Relevant source part starts here and spans across multiple lines).\ncontracts/packages/oz/upgradeability/Proxy.sol:21:5: The payable fallback function is defined here.\n fallback() external payable {\n ^ (Relevant source part starts here and spans across multiple lines).\n",
+ "message": "This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.",
+ "secondarySourceLocations": [
+ {
+ "end": 1234,
+ "file": "contracts/packages/oz/upgradeability/Proxy.sol",
+ "message": "The payable fallback function is defined here.",
+ "start": 677
+ }
+ ],
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 1883,
+ "file": "contracts/packages/oz/upgradeability/UpgradeabilityProxy.sol",
+ "start": 287
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "3628",
+ "formattedMessage": "contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol:12:1: Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\ncontract OwnedUpgradeabilityProxy is UpgradeabilityProxy {\n^ (Relevant source part starts here and spans across multiple lines).\ncontracts/packages/oz/upgradeability/Proxy.sol:21:5: The payable fallback function is defined here.\n fallback() external payable {\n ^ (Relevant source part starts here and spans across multiple lines).\n",
+ "message": "This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.",
+ "secondarySourceLocations": [
+ {
+ "end": 1234,
+ "file": "contracts/packages/oz/upgradeability/Proxy.sol",
+ "message": "The payable fallback function is defined here.",
+ "start": 677
+ }
+ ],
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 3196,
+ "file": "contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol",
+ "start": 294
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "3628",
+ "formattedMessage": "contracts/external/proxies/PayableProxyController.sol:21:1: Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\ncontract PayableProxyController is ReentrancyGuard {\n^ (Relevant source part starts here and spans across multiple lines).\ncontracts/external/proxies/PayableProxyController.sol:41:5: The payable fallback function is defined here.\n fallback() external payable {\n ^ (Relevant source part starts here and spans across multiple lines).\n",
+ "message": "This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.",
+ "secondarySourceLocations": [
+ {
+ "end": 1410,
+ "file": "contracts/external/proxies/PayableProxyController.sol",
+ "message": "The payable fallback function is defined here.",
+ "start": 1283
+ }
+ ],
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 3135,
+ "file": "contracts/external/proxies/PayableProxyController.sol",
+ "start": 671
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol:45:43: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function __ERC20Permit_init_unchained(string memory name) internal initializer {\n ^----------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 1683,
+ "file": "contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol",
+ "start": 1665
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/external/callees/PermitCallee.sol:17:27: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function callFunction(address payable _sender, bytes memory _data) external override {\n ^---------------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 486,
+ "file": "contracts/external/callees/PermitCallee.sol",
+ "start": 463
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/mocks/Mock0xExchange.sol:29:9: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ZeroXExchangeInterface.LimitOrder memory _order,\n ^---------------------------------------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 853,
+ "file": "contracts/mocks/Mock0xExchange.sol",
+ "start": 806
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/mocks/Mock0xExchange.sol:30:9: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ZeroXExchangeInterface.Signature memory _signature,\n ^------------------------------------------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 913,
+ "file": "contracts/mocks/Mock0xExchange.sol",
+ "start": 863
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/mocks/Mock0xExchange.sol:31:9: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n uint128 _takerTokenFillAmount\n ^---------------------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 952,
+ "file": "contracts/mocks/Mock0xExchange.sol",
+ "start": 923
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/mocks/Mock0xExchange.sol:40:9: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n bool _revertIfIncomplete\n ^----------------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 1318,
+ "file": "contracts/mocks/Mock0xExchange.sol",
+ "start": 1294
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/mocks/MockPricer.sol:29:33: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function getHistoricalPrice(uint80 _roundId) external view returns (uint256, uint256) {\n ^-------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 751,
+ "file": "contracts/mocks/MockPricer.sol",
+ "start": 736
+ },
+ "type": "Warning"
+ },
+ {
+ "component": "general",
+ "errorCode": "5667",
+ "formattedMessage": "contracts/pricers/YearnPricer.sol:79:33: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function getHistoricalPrice(uint80 _roundId) external view override returns (uint256, uint256) {\n ^-------------^\n",
+ "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
+ "severity": "warning",
+ "sourceLocation": {
+ "end": 3236,
+ "file": "contracts/pricers/YearnPricer.sol",
+ "start": 3221
+ },
+ "type": "Warning"
+ }
+ ],
+ "sources": {
+ "contracts/core/AddressBook.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/AddressBook.sol",
+ "exportedSymbols": {
+ "AddressBook": [
+ 397
+ ]
+ },
+ "id": 398,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "47:24:0"
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Ownable.sol",
+ "file": "../packages/oz/Ownable.sol",
+ "id": 3,
+ "nodeType": "ImportDirective",
+ "scope": 398,
+ "sourceUnit": 13837,
+ "src": "73:51:0",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 2,
+ "name": "Ownable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "81:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol",
+ "file": "../packages/oz/upgradeability/OwnedUpgradeabilityProxy.sol",
+ "id": 5,
+ "nodeType": "ImportDirective",
+ "scope": 398,
+ "sourceUnit": 15551,
+ "src": "125:100:0",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 4,
+ "name": "OwnedUpgradeabilityProxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "133:24:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 7,
+ "name": "Ownable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 13836,
+ "src": "309:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Ownable_$13836",
+ "typeString": "contract Ownable"
+ }
+ },
+ "id": 8,
+ "nodeType": "InheritanceSpecifier",
+ "src": "309:7:0"
+ }
+ ],
+ "contractDependencies": [
+ 13619,
+ 13836,
+ 15550
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 6,
+ "nodeType": "StructuredDocumentation",
+ "src": "227:57:0",
+ "text": " @author Opyn Team\n @title AddressBook Module"
+ },
+ "fullyImplemented": true,
+ "id": 397,
+ "linearizedBaseContracts": [
+ 397,
+ 13836,
+ 13619
+ ],
+ "name": "AddressBook",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": true,
+ "documentation": {
+ "id": 9,
+ "nodeType": "StructuredDocumentation",
+ "src": "323:34:0",
+ "text": "@dev Otoken implementation key"
+ },
+ "id": 14,
+ "mutability": "constant",
+ "name": "OTOKEN_IMPL",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "362:63:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 10,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "362:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4f544f4b454e5f494d504c",
+ "id": 12,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "411:13:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_aee068cb91ac3caa77e3f86bb6b9c8ad08f00dc9628a6fa3c4c849f48215f420",
+ "typeString": "literal_string \"OTOKEN_IMPL\""
+ },
+ "value": "OTOKEN_IMPL"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_aee068cb91ac3caa77e3f86bb6b9c8ad08f00dc9628a6fa3c4c849f48215f420",
+ "typeString": "literal_string \"OTOKEN_IMPL\""
+ }
+ ],
+ "id": 11,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "401:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 13,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "401:24:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 15,
+ "nodeType": "StructuredDocumentation",
+ "src": "431:26:0",
+ "text": "@dev OtokenFactory key"
+ },
+ "id": 20,
+ "mutability": "constant",
+ "name": "OTOKEN_FACTORY",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "462:69:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 16,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "462:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4f544f4b454e5f464143544f5259",
+ "id": 18,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "514:16:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6c7b3c92d6683027c836120c8fbf9e114ae1c35064b3146ad12b327283cbc305",
+ "typeString": "literal_string \"OTOKEN_FACTORY\""
+ },
+ "value": "OTOKEN_FACTORY"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_6c7b3c92d6683027c836120c8fbf9e114ae1c35064b3146ad12b327283cbc305",
+ "typeString": "literal_string \"OTOKEN_FACTORY\""
+ }
+ ],
+ "id": 17,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "504:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 19,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "504:27:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 21,
+ "nodeType": "StructuredDocumentation",
+ "src": "537:22:0",
+ "text": "@dev Whitelist key"
+ },
+ "id": 26,
+ "mutability": "constant",
+ "name": "WHITELIST",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "564:59:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 22,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "564:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "57484954454c495354",
+ "id": 24,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "611:11:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0af0c3ebe77999ca20698e1ff25f812bf82409a59d21ca15a41f39e0ce9f2500",
+ "typeString": "literal_string \"WHITELIST\""
+ },
+ "value": "WHITELIST"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_0af0c3ebe77999ca20698e1ff25f812bf82409a59d21ca15a41f39e0ce9f2500",
+ "typeString": "literal_string \"WHITELIST\""
+ }
+ ],
+ "id": 23,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "601:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 25,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "601:22:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 27,
+ "nodeType": "StructuredDocumentation",
+ "src": "629:23:0",
+ "text": "@dev Controller key"
+ },
+ "id": 32,
+ "mutability": "constant",
+ "name": "CONTROLLER",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "657:61:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 28,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "657:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "434f4e54524f4c4c4552",
+ "id": 30,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "705:12:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_70546d1c92f8c2132ae23a23f5177aa8526356051c7510df99f50e012d221529",
+ "typeString": "literal_string \"CONTROLLER\""
+ },
+ "value": "CONTROLLER"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_70546d1c92f8c2132ae23a23f5177aa8526356051c7510df99f50e012d221529",
+ "typeString": "literal_string \"CONTROLLER\""
+ }
+ ],
+ "id": 29,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "695:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 31,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "695:23:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 33,
+ "nodeType": "StructuredDocumentation",
+ "src": "724:23:0",
+ "text": "@dev MarginPool key"
+ },
+ "id": 38,
+ "mutability": "constant",
+ "name": "MARGIN_POOL",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "752:63:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 34,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "752:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4d415247494e5f504f4f4c",
+ "id": 36,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "801:13:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_78b1c356e2d402258b87b91de50983999dcba778bd0bb81016081dd89fd94bed",
+ "typeString": "literal_string \"MARGIN_POOL\""
+ },
+ "value": "MARGIN_POOL"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_78b1c356e2d402258b87b91de50983999dcba778bd0bb81016081dd89fd94bed",
+ "typeString": "literal_string \"MARGIN_POOL\""
+ }
+ ],
+ "id": 35,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "791:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 37,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "791:24:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 39,
+ "nodeType": "StructuredDocumentation",
+ "src": "821:29:0",
+ "text": "@dev MarginCalculator key"
+ },
+ "id": 44,
+ "mutability": "constant",
+ "name": "MARGIN_CALCULATOR",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "855:75:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 40,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "855:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4d415247494e5f43414c43554c41544f52",
+ "id": 42,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "910:19:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_4f4e515be2faa2fc03d2f4678d7e8086e6cddc9f0b80eb45fd3f08bd319dfa70",
+ "typeString": "literal_string \"MARGIN_CALCULATOR\""
+ },
+ "value": "MARGIN_CALCULATOR"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_4f4e515be2faa2fc03d2f4678d7e8086e6cddc9f0b80eb45fd3f08bd319dfa70",
+ "typeString": "literal_string \"MARGIN_CALCULATOR\""
+ }
+ ],
+ "id": 41,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "900:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 43,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "900:30:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 45,
+ "nodeType": "StructuredDocumentation",
+ "src": "936:31:0",
+ "text": "@dev LiquidationManager key"
+ },
+ "id": 50,
+ "mutability": "constant",
+ "name": "LIQUIDATION_MANAGER",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "972:79:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 46,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "972:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4c49515549444154494f4e5f4d414e41474552",
+ "id": 48,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1029:21:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0b8b100501322269eb8293378cdaf941a0d883fad7878cbc00f3c143fa0c6c96",
+ "typeString": "literal_string \"LIQUIDATION_MANAGER\""
+ },
+ "value": "LIQUIDATION_MANAGER"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_0b8b100501322269eb8293378cdaf941a0d883fad7878cbc00f3c143fa0c6c96",
+ "typeString": "literal_string \"LIQUIDATION_MANAGER\""
+ }
+ ],
+ "id": 47,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "1019:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 49,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1019:32:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 51,
+ "nodeType": "StructuredDocumentation",
+ "src": "1057:19:0",
+ "text": "@dev Oracle key"
+ },
+ "id": 56,
+ "mutability": "constant",
+ "name": "ORACLE",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "1081:53:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 52,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1081:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4f5241434c45",
+ "id": 54,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1125:8:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_352d05fe3946dbe49277552ba941e744d5a96d9c60bc1ba0ea5f1d3ae000f7c8",
+ "typeString": "literal_string \"ORACLE\""
+ },
+ "value": "ORACLE"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_352d05fe3946dbe49277552ba941e744d5a96d9c60bc1ba0ea5f1d3ae000f7c8",
+ "typeString": "literal_string \"ORACLE\""
+ }
+ ],
+ "id": 53,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "1115:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 55,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1115:19:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 57,
+ "nodeType": "StructuredDocumentation",
+ "src": "1141:40:0",
+ "text": "@dev mapping between key and address"
+ },
+ "id": 61,
+ "mutability": "mutable",
+ "name": "addresses",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 397,
+ "src": "1186:45:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ },
+ "typeName": {
+ "id": 60,
+ "keyType": {
+ "id": 58,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1194:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1186:27:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ },
+ "valueType": {
+ "id": 59,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1205:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "private"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 62,
+ "nodeType": "StructuredDocumentation",
+ "src": "1238:54:0",
+ "text": "@notice emits an event when a new proxy is created"
+ },
+ "id": 68,
+ "name": "ProxyCreated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 67,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 64,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "id",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 68,
+ "src": "1316:18:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 63,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1316:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 66,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "proxy",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 68,
+ "src": "1336:21:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 65,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1336:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1315:43:0"
+ },
+ "src": "1297:62:0"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 69,
+ "nodeType": "StructuredDocumentation",
+ "src": "1364:54:0",
+ "text": "@notice emits an event when a new address is added"
+ },
+ "id": 75,
+ "name": "AddressAdded",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 74,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 71,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "id",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 75,
+ "src": "1442:18:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 70,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1442:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 73,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "add",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 75,
+ "src": "1462:19:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 72,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1462:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1441:41:0"
+ },
+ "src": "1423:60:0"
+ },
+ {
+ "body": {
+ "id": 85,
+ "nodeType": "Block",
+ "src": "1659:47:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 82,
+ "name": "OTOKEN_IMPL",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14,
+ "src": "1687:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 81,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "1676:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 83,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1676:23:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 80,
+ "id": 84,
+ "nodeType": "Return",
+ "src": "1669:30:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 76,
+ "nodeType": "StructuredDocumentation",
+ "src": "1489:108:0",
+ "text": " @notice return Otoken implementation address\n @return Otoken implementation address"
+ },
+ "functionSelector": "a8de41d5",
+ "id": 86,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOtokenImpl",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 77,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1624:2:0"
+ },
+ "returnParameters": {
+ "id": 80,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 79,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 86,
+ "src": "1650:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 78,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1650:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1649:9:0"
+ },
+ "scope": 397,
+ "src": "1602:104:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 96,
+ "nodeType": "Block",
+ "src": "1869:50:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 93,
+ "name": "OTOKEN_FACTORY",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 20,
+ "src": "1897:14:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 92,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "1886:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 94,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1886:26:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 91,
+ "id": 95,
+ "nodeType": "Return",
+ "src": "1879:33:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 87,
+ "nodeType": "StructuredDocumentation",
+ "src": "1712:92:0",
+ "text": " @notice return oTokenFactory address\n @return OtokenFactory address"
+ },
+ "functionSelector": "1ffaf0db",
+ "id": 97,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOtokenFactory",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 88,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1834:2:0"
+ },
+ "returnParameters": {
+ "id": 91,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 90,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 97,
+ "src": "1860:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 89,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1860:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1859:9:0"
+ },
+ "scope": 397,
+ "src": "1809:110:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 107,
+ "nodeType": "Block",
+ "src": "2070:45:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 104,
+ "name": "WHITELIST",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 26,
+ "src": "2098:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 103,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "2087:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 105,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2087:21:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 102,
+ "id": 106,
+ "nodeType": "Return",
+ "src": "2080:28:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 98,
+ "nodeType": "StructuredDocumentation",
+ "src": "1925:84:0",
+ "text": " @notice return Whitelist address\n @return Whitelist address"
+ },
+ "functionSelector": "d01f63f5",
+ "id": 108,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getWhitelist",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 99,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2035:2:0"
+ },
+ "returnParameters": {
+ "id": 102,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 101,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 108,
+ "src": "2061:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 100,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2061:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2060:9:0"
+ },
+ "scope": 397,
+ "src": "2014:101:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 118,
+ "nodeType": "Block",
+ "src": "2269:46:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 115,
+ "name": "CONTROLLER",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 32,
+ "src": "2297:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 114,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "2286:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 116,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2286:22:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 113,
+ "id": 117,
+ "nodeType": "Return",
+ "src": "2279:29:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 109,
+ "nodeType": "StructuredDocumentation",
+ "src": "2121:86:0",
+ "text": " @notice return Controller address\n @return Controller address"
+ },
+ "functionSelector": "3018205f",
+ "id": 119,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getController",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 110,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2234:2:0"
+ },
+ "returnParameters": {
+ "id": 113,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 112,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 119,
+ "src": "2260:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 111,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2260:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2259:9:0"
+ },
+ "scope": 397,
+ "src": "2212:103:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 129,
+ "nodeType": "Block",
+ "src": "2469:47:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 126,
+ "name": "MARGIN_POOL",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 38,
+ "src": "2497:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 125,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "2486:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 127,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2486:23:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 124,
+ "id": 128,
+ "nodeType": "Return",
+ "src": "2479:30:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 120,
+ "nodeType": "StructuredDocumentation",
+ "src": "2321:86:0",
+ "text": " @notice return MarginPool address\n @return MarginPool address"
+ },
+ "functionSelector": "75486342",
+ "id": 130,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getMarginPool",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 121,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2434:2:0"
+ },
+ "returnParameters": {
+ "id": 124,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 123,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 130,
+ "src": "2460:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 122,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2460:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2459:9:0"
+ },
+ "scope": 397,
+ "src": "2412:104:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 140,
+ "nodeType": "Block",
+ "src": "2688:53:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 137,
+ "name": "MARGIN_CALCULATOR",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 44,
+ "src": "2716:17:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 136,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "2705:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 138,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2705:29:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 135,
+ "id": 139,
+ "nodeType": "Return",
+ "src": "2698:36:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 131,
+ "nodeType": "StructuredDocumentation",
+ "src": "2522:98:0",
+ "text": " @notice return MarginCalculator address\n @return MarginCalculator address"
+ },
+ "functionSelector": "cf28493f",
+ "id": 141,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getMarginCalculator",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 132,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2653:2:0"
+ },
+ "returnParameters": {
+ "id": 135,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 134,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 141,
+ "src": "2679:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 133,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2679:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2678:9:0"
+ },
+ "scope": 397,
+ "src": "2625:116:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 151,
+ "nodeType": "Block",
+ "src": "2919:55:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 148,
+ "name": "LIQUIDATION_MANAGER",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 50,
+ "src": "2947:19:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 147,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "2936:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 149,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2936:31:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 146,
+ "id": 150,
+ "nodeType": "Return",
+ "src": "2929:38:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 142,
+ "nodeType": "StructuredDocumentation",
+ "src": "2747:102:0",
+ "text": " @notice return LiquidationManager address\n @return LiquidationManager address"
+ },
+ "functionSelector": "ee8a4632",
+ "id": 152,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getLiquidationManager",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 143,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2884:2:0"
+ },
+ "returnParameters": {
+ "id": 146,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 145,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 152,
+ "src": "2910:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 144,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2910:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2909:9:0"
+ },
+ "scope": 397,
+ "src": "2854:120:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 162,
+ "nodeType": "Block",
+ "src": "3116:42:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 159,
+ "name": "ORACLE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 56,
+ "src": "3144:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 158,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "3133:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 160,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3133:18:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 157,
+ "id": 161,
+ "nodeType": "Return",
+ "src": "3126:25:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 153,
+ "nodeType": "StructuredDocumentation",
+ "src": "2980:78:0",
+ "text": " @notice return Oracle address\n @return Oracle address"
+ },
+ "functionSelector": "833b1fce",
+ "id": 163,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOracle",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 154,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3081:2:0"
+ },
+ "returnParameters": {
+ "id": 157,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 156,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 163,
+ "src": "3107:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 155,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3107:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3106:9:0"
+ },
+ "scope": 397,
+ "src": "3063:95:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 176,
+ "nodeType": "Block",
+ "src": "3404:53:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 172,
+ "name": "OTOKEN_IMPL",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14,
+ "src": "3425:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 173,
+ "name": "_otokenImpl",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 166,
+ "src": "3438:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 171,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "3414:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 174,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3414:36:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 175,
+ "nodeType": "ExpressionStatement",
+ "src": "3414:36:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 164,
+ "nodeType": "StructuredDocumentation",
+ "src": "3164:172:0",
+ "text": " @notice set Otoken implementation address\n @dev can only be called by the addressbook owner\n @param _otokenImpl Otoken implementation address"
+ },
+ "functionSelector": "b508ac99",
+ "id": 177,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 169,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 168,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "3394:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "3394:9:0"
+ }
+ ],
+ "name": "setOtokenImpl",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 167,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 166,
+ "mutability": "mutable",
+ "name": "_otokenImpl",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 177,
+ "src": "3364:19:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 165,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3364:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3363:21:0"
+ },
+ "returnParameters": {
+ "id": 170,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3404:0:0"
+ },
+ "scope": 397,
+ "src": "3341:116:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 190,
+ "nodeType": "Block",
+ "src": "3696:59:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 186,
+ "name": "OTOKEN_FACTORY",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 20,
+ "src": "3717:14:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 187,
+ "name": "_otokenFactory",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 180,
+ "src": "3733:14:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 185,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "3706:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 188,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3706:42:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 189,
+ "nodeType": "ExpressionStatement",
+ "src": "3706:42:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 178,
+ "nodeType": "StructuredDocumentation",
+ "src": "3463:159:0",
+ "text": " @notice set OtokenFactory address\n @dev can only be called by the addressbook owner\n @param _otokenFactory OtokenFactory address"
+ },
+ "functionSelector": "d94f323e",
+ "id": 191,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 183,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 182,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "3686:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "3686:9:0"
+ }
+ ],
+ "name": "setOtokenFactory",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 181,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 180,
+ "mutability": "mutable",
+ "name": "_otokenFactory",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 191,
+ "src": "3653:22:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 179,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3653:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3652:24:0"
+ },
+ "returnParameters": {
+ "id": 184,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3696:0:0"
+ },
+ "scope": 397,
+ "src": "3627:128:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 204,
+ "nodeType": "Block",
+ "src": "3974:50:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 200,
+ "name": "WHITELIST",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 26,
+ "src": "3995:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 201,
+ "name": "_whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 194,
+ "src": "4006:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 199,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "3984:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 202,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3984:33:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 203,
+ "nodeType": "ExpressionStatement",
+ "src": "3984:33:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 192,
+ "nodeType": "StructuredDocumentation",
+ "src": "3761:147:0",
+ "text": " @notice set Whitelist address\n @dev can only be called by the addressbook owner\n @param _whitelist Whitelist address"
+ },
+ "functionSelector": "854cff2f",
+ "id": 205,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 197,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 196,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "3964:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "3964:9:0"
+ }
+ ],
+ "name": "setWhitelist",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 195,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 194,
+ "mutability": "mutable",
+ "name": "_whitelist",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 205,
+ "src": "3935:18:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 193,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3935:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3934:20:0"
+ },
+ "returnParameters": {
+ "id": 198,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3974:0:0"
+ },
+ "scope": 397,
+ "src": "3913:111:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 218,
+ "nodeType": "Block",
+ "src": "4248:52:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 214,
+ "name": "CONTROLLER",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 32,
+ "src": "4269:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 215,
+ "name": "_controller",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 208,
+ "src": "4281:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 213,
+ "name": "updateImpl",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 396,
+ "src": "4258:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 216,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4258:35:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 217,
+ "nodeType": "ExpressionStatement",
+ "src": "4258:35:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 206,
+ "nodeType": "StructuredDocumentation",
+ "src": "4030:150:0",
+ "text": " @notice set Controller address\n @dev can only be called by the addressbook owner\n @param _controller Controller address"
+ },
+ "functionSelector": "92eefe9b",
+ "id": 219,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 211,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 210,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4238:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4238:9:0"
+ }
+ ],
+ "name": "setController",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 209,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 208,
+ "mutability": "mutable",
+ "name": "_controller",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 219,
+ "src": "4208:19:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 207,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4208:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4207:21:0"
+ },
+ "returnParameters": {
+ "id": 212,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4248:0:0"
+ },
+ "scope": 397,
+ "src": "4185:115:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 232,
+ "nodeType": "Block",
+ "src": "4524:53:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 228,
+ "name": "MARGIN_POOL",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 38,
+ "src": "4545:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 229,
+ "name": "_marginPool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 222,
+ "src": "4558:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 227,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "4534:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 230,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4534:36:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 231,
+ "nodeType": "ExpressionStatement",
+ "src": "4534:36:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 220,
+ "nodeType": "StructuredDocumentation",
+ "src": "4306:150:0",
+ "text": " @notice set MarginPool address\n @dev can only be called by the addressbook owner\n @param _marginPool MarginPool address"
+ },
+ "functionSelector": "e7cf7841",
+ "id": 233,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 225,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 224,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4514:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4514:9:0"
+ }
+ ],
+ "name": "setMarginPool",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 223,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 222,
+ "mutability": "mutable",
+ "name": "_marginPool",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 233,
+ "src": "4484:19:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 221,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4484:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4483:21:0"
+ },
+ "returnParameters": {
+ "id": 226,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4524:0:0"
+ },
+ "scope": 397,
+ "src": "4461:116:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 246,
+ "nodeType": "Block",
+ "src": "4831:65:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 242,
+ "name": "MARGIN_CALCULATOR",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 44,
+ "src": "4852:17:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 243,
+ "name": "_marginCalculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 236,
+ "src": "4871:17:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 241,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "4841:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 244,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4841:48:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 245,
+ "nodeType": "ExpressionStatement",
+ "src": "4841:48:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 234,
+ "nodeType": "StructuredDocumentation",
+ "src": "4583:168:0",
+ "text": " @notice set MarginCalculator address\n @dev can only be called by the addressbook owner\n @param _marginCalculator MarginCalculator address"
+ },
+ "functionSelector": "e9f2e8be",
+ "id": 247,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 239,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 238,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4821:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4821:9:0"
+ }
+ ],
+ "name": "setMarginCalculator",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 237,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 236,
+ "mutability": "mutable",
+ "name": "_marginCalculator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 247,
+ "src": "4785:25:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 235,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4785:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4784:27:0"
+ },
+ "returnParameters": {
+ "id": 240,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4831:0:0"
+ },
+ "scope": 397,
+ "src": "4756:140:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 260,
+ "nodeType": "Block",
+ "src": "5160:69:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 256,
+ "name": "LIQUIDATION_MANAGER",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 50,
+ "src": "5181:19:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 257,
+ "name": "_liquidationManager",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 250,
+ "src": "5202:19:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 255,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "5170:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 258,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5170:52:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 259,
+ "nodeType": "ExpressionStatement",
+ "src": "5170:52:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 248,
+ "nodeType": "StructuredDocumentation",
+ "src": "4902:174:0",
+ "text": " @notice set LiquidationManager address\n @dev can only be called by the addressbook owner\n @param _liquidationManager LiquidationManager address"
+ },
+ "functionSelector": "38f92fc7",
+ "id": 261,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 253,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 252,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "5150:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5150:9:0"
+ }
+ ],
+ "name": "setLiquidationManager",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 251,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 250,
+ "mutability": "mutable",
+ "name": "_liquidationManager",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 261,
+ "src": "5112:27:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 249,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5112:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5111:29:0"
+ },
+ "returnParameters": {
+ "id": 254,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5160:0:0"
+ },
+ "scope": 397,
+ "src": "5081:148:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 274,
+ "nodeType": "Block",
+ "src": "5433:44:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 270,
+ "name": "ORACLE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 56,
+ "src": "5454:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 271,
+ "name": "_oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 264,
+ "src": "5462:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 269,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "5443:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 272,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5443:27:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 273,
+ "nodeType": "ExpressionStatement",
+ "src": "5443:27:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 262,
+ "nodeType": "StructuredDocumentation",
+ "src": "5235:138:0",
+ "text": " @notice set Oracle address\n @dev can only be called by the addressbook owner\n @param _oracle Oracle address"
+ },
+ "functionSelector": "7adbf973",
+ "id": 275,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 267,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 266,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "5423:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5423:9:0"
+ }
+ ],
+ "name": "setOracle",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 265,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 264,
+ "mutability": "mutable",
+ "name": "_oracle",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 275,
+ "src": "5397:15:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 263,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5397:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5396:17:0"
+ },
+ "returnParameters": {
+ "id": 268,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5433:0:0"
+ },
+ "scope": 397,
+ "src": "5378:99:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 287,
+ "nodeType": "Block",
+ "src": "5667:39:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 283,
+ "name": "addresses",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 61,
+ "src": "5684:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ }
+ },
+ "id": 285,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 284,
+ "name": "_key",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 278,
+ "src": "5694:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5684:15:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 282,
+ "id": 286,
+ "nodeType": "Return",
+ "src": "5677:22:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 276,
+ "nodeType": "StructuredDocumentation",
+ "src": "5483:115:0",
+ "text": " @notice return an address for specific key\n @param _key key address\n @return address"
+ },
+ "functionSelector": "21f8a721",
+ "id": 288,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getAddress",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 279,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 278,
+ "mutability": "mutable",
+ "name": "_key",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 288,
+ "src": "5623:12:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 277,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "5623:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5622:14:0"
+ },
+ "returnParameters": {
+ "id": 282,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 281,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 288,
+ "src": "5658:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 280,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5658:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5657:9:0"
+ },
+ "scope": 397,
+ "src": "5603:103:0",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 309,
+ "nodeType": "Block",
+ "src": "5964:87:0",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 302,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 298,
+ "name": "addresses",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 61,
+ "src": "5974:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ }
+ },
+ "id": 300,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 299,
+ "name": "_key",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 291,
+ "src": "5984:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "5974:15:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 301,
+ "name": "_address",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 293,
+ "src": "5992:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "5974:26:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 303,
+ "nodeType": "ExpressionStatement",
+ "src": "5974:26:0"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 305,
+ "name": "_key",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 291,
+ "src": "6029:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 306,
+ "name": "_address",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 293,
+ "src": "6035:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 304,
+ "name": "AddressAdded",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 75,
+ "src": "6016:12:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 307,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6016:28:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 308,
+ "nodeType": "EmitStatement",
+ "src": "6011:33:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 289,
+ "nodeType": "StructuredDocumentation",
+ "src": "5712:178:0",
+ "text": " @notice set a specific address for a specific key\n @dev can only be called by the addressbook owner\n @param _key key\n @param _address address"
+ },
+ "functionSelector": "ca446dd9",
+ "id": 310,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 296,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 295,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "5954:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5954:9:0"
+ }
+ ],
+ "name": "setAddress",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 294,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 291,
+ "mutability": "mutable",
+ "name": "_key",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 310,
+ "src": "5915:12:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 290,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "5915:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 293,
+ "mutability": "mutable",
+ "name": "_address",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 310,
+ "src": "5929:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 292,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5929:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5914:32:0"
+ },
+ "returnParameters": {
+ "id": 297,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5964:0:0"
+ },
+ "scope": 397,
+ "src": "5895:156:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 395,
+ "nodeType": "Block",
+ "src": "6346:623:0",
+ "statements": [
+ {
+ "assignments": [
+ 321
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 321,
+ "mutability": "mutable",
+ "name": "proxyAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 395,
+ "src": "6356:28:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ "typeName": {
+ "id": 320,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6356:15:0",
+ "stateMutability": "payable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 331,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 327,
+ "name": "_id",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 313,
+ "src": "6414:3:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 326,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 288,
+ "src": "6403:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32) view returns (address)"
+ }
+ },
+ "id": 328,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6403:15:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 325,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6395:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint160_$",
+ "typeString": "type(uint160)"
+ },
+ "typeName": {
+ "id": 324,
+ "name": "uint160",
+ "nodeType": "ElementaryTypeName",
+ "src": "6395:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 329,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6395:24:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint160",
+ "typeString": "uint160"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint160",
+ "typeString": "uint160"
+ }
+ ],
+ "id": 323,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6387:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 322,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6387:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 330,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6387:33:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6356:64:0"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ "id": 337,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 332,
+ "name": "proxyAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 321,
+ "src": "6435:12:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 335,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6459:1:0",
+ "subdenomination": null,
+ "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": 334,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6451:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 333,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6451:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 336,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6451:10:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "6435:26:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 393,
+ "nodeType": "Block",
+ "src": "6825:138:0",
+ "statements": [
+ {
+ "assignments": [
+ 382
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 382,
+ "mutability": "mutable",
+ "name": "proxy",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 393,
+ "src": "6839:30:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 381,
+ "name": "OwnedUpgradeabilityProxy",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 15550,
+ "src": "6839:24:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 386,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 384,
+ "name": "proxyAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 321,
+ "src": "6897:12:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ ],
+ "id": 383,
+ "name": "OwnedUpgradeabilityProxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15550,
+ "src": "6872:24:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OwnedUpgradeabilityProxy_$15550_$",
+ "typeString": "type(contract OwnedUpgradeabilityProxy)"
+ }
+ },
+ "id": 385,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6872:38:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6839:71:0"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 390,
+ "name": "_newAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 315,
+ "src": "6940:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 387,
+ "name": "proxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 382,
+ "src": "6924:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ },
+ "id": 389,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "upgradeTo",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 15517,
+ "src": "6924:15:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address) external"
+ }
+ },
+ "id": 391,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6924:28:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 392,
+ "nodeType": "ExpressionStatement",
+ "src": "6924:28:0"
+ }
+ ]
+ },
+ "id": 394,
+ "nodeType": "IfStatement",
+ "src": "6431:532:0",
+ "trueBody": {
+ "id": 380,
+ "nodeType": "Block",
+ "src": "6463:356:0",
+ "statements": [
+ {
+ "assignments": [
+ 339
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 339,
+ "mutability": "mutable",
+ "name": "params",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 380,
+ "src": "6477:19:0",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 338,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6477:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 350,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "696e697469616c697a6528616464726573732c6164647265737329",
+ "id": 342,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6523:29:0",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_485cc955cd05f29985ce37d87ac35dcf2fdbc60b9106f66a532e31a2f1d5743b",
+ "typeString": "literal_string \"initialize(address,address)\""
+ },
+ "value": "initialize(address,address)"
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 345,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -28,
+ "src": "6562:4:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBook_$397",
+ "typeString": "contract AddressBook"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_AddressBook_$397",
+ "typeString": "contract AddressBook"
+ }
+ ],
+ "id": 344,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6554:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 343,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6554:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 346,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6554:13:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 347,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13772,
+ "src": "6569:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 348,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6569:7:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_485cc955cd05f29985ce37d87ac35dcf2fdbc60b9106f66a532e31a2f1d5743b",
+ "typeString": "literal_string \"initialize(address,address)\""
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 340,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "6499:3:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodeWithSignature",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "6499:23:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 349,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6499:78:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6477:100:0"
+ },
+ {
+ "assignments": [
+ 352
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 352,
+ "mutability": "mutable",
+ "name": "proxy",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 380,
+ "src": "6591:30:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 351,
+ "name": "OwnedUpgradeabilityProxy",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 15550,
+ "src": "6591:24:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 356,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 354,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "6624:28:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_OwnedUpgradeabilityProxy_$15550_$",
+ "typeString": "function () returns (contract OwnedUpgradeabilityProxy)"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 353,
+ "name": "OwnedUpgradeabilityProxy",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 15550,
+ "src": "6628:24:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ }
+ },
+ "id": 355,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6624:30:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6591:63:0"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 358,
+ "name": "_id",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 313,
+ "src": "6679:3:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 361,
+ "name": "proxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 352,
+ "src": "6692:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ ],
+ "id": 360,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6684:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 359,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6684:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 362,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6684:14:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ ],
+ "id": 357,
+ "name": "setAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 310,
+ "src": "6668:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 363,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6668:31:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 364,
+ "nodeType": "ExpressionStatement",
+ "src": "6668:31:0"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 366,
+ "name": "_id",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 313,
+ "src": "6731:3:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 369,
+ "name": "proxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 352,
+ "src": "6744:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ ],
+ "id": 368,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6736:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 367,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6736:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 370,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6736:14:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ ],
+ "id": 365,
+ "name": "ProxyCreated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 68,
+ "src": "6718:12:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
+ "typeString": "function (bytes32,address)"
+ }
+ },
+ "id": 371,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6718:33:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 372,
+ "nodeType": "EmitStatement",
+ "src": "6713:38:0"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 376,
+ "name": "_newAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 315,
+ "src": "6788:11:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 377,
+ "name": "params",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 339,
+ "src": "6801:6:0",
+ "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": {
+ "argumentTypes": null,
+ "id": 373,
+ "name": "proxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 352,
+ "src": "6765:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnedUpgradeabilityProxy_$15550",
+ "typeString": "contract OwnedUpgradeabilityProxy"
+ }
+ },
+ "id": 375,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "upgradeToAndCall",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 15549,
+ "src": "6765:22:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,bytes memory) payable external"
+ }
+ },
+ "id": 378,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6765:43:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 379,
+ "nodeType": "ExpressionStatement",
+ "src": "6765:43:0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 311,
+ "nodeType": "StructuredDocumentation",
+ "src": "6057:213:0",
+ "text": " @dev function to update the implementation of a specific component of the protocol\n @param _id id of the contract to be updated\n @param _newAddress address of the new implementation*"
+ },
+ "functionSelector": "2b6bfeaa",
+ "id": 396,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 318,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 317,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "6336:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "6336:9:0"
+ }
+ ],
+ "name": "updateImpl",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 316,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 313,
+ "mutability": "mutable",
+ "name": "_id",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 396,
+ "src": "6295:11:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 312,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "6295:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 315,
+ "mutability": "mutable",
+ "name": "_newAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 396,
+ "src": "6308:19:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 314,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6308:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6294:34:0"
+ },
+ "returnParameters": {
+ "id": 319,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6346:0:0"
+ },
+ "scope": 397,
+ "src": "6275:694:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 398,
+ "src": "285:6686:0"
+ }
+ ],
+ "src": "47:6925:0"
+ },
+ "id": 0
+ },
+ "contracts/core/Controller.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/Controller.sol",
+ "exportedSymbols": {
+ "Controller": [
+ 3230
+ ]
+ },
+ "id": 3231,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 399,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "47:24:1"
+ },
+ {
+ "id": 400,
+ "literals": [
+ "experimental",
+ "ABIEncoderV2"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "73:33:1"
+ },
+ {
+ "absolutePath": "contracts/packages/oz/upgradeability/OwnableUpgradeSafe.sol",
+ "file": "../packages/oz/upgradeability/OwnableUpgradeSafe.sol",
+ "id": 402,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 15411,
+ "src": "108:88:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 401,
+ "name": "OwnableUpgradeSafe",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "116:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol",
+ "file": "../packages/oz/upgradeability/ReentrancyGuardUpgradeSafe.sol",
+ "id": 404,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 15631,
+ "src": "197:104:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 403,
+ "name": "ReentrancyGuardUpgradeSafe",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "205:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/upgradeability/Initializable.sol",
+ "file": "../packages/oz/upgradeability/Initializable.sol",
+ "id": 406,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 15281,
+ "src": "302:78:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 405,
+ "name": "Initializable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "310:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/SafeMath.sol",
+ "file": "../packages/oz/SafeMath.sol",
+ "id": 408,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 14286,
+ "src": "381:53:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 407,
+ "name": "SafeMath",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "389:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/libs/MarginVault.sol",
+ "file": "../libs/MarginVault.sol",
+ "id": 410,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 11512,
+ "src": "435:52:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 409,
+ "name": "MarginVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "443:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/libs/Actions.sol",
+ "file": "../libs/Actions.sol",
+ "id": 412,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 10522,
+ "src": "488:44:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 411,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "496:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/AddressBookInterface.sol",
+ "file": "../interfaces/AddressBookInterface.sol",
+ "id": 414,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9226,
+ "src": "533:76:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 413,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "541:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/OtokenInterface.sol",
+ "file": "../interfaces/OtokenInterface.sol",
+ "id": 416,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9726,
+ "src": "610:66:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 415,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "618:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/MarginCalculatorInterface.sol",
+ "file": "../interfaces/MarginCalculatorInterface.sol",
+ "id": 418,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9429,
+ "src": "677:86:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 417,
+ "name": "MarginCalculatorInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "685:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/OracleInterface.sol",
+ "file": "../interfaces/OracleInterface.sol",
+ "id": 420,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9642,
+ "src": "764:66:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 419,
+ "name": "OracleInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "772:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/WhitelistInterface.sol",
+ "file": "../interfaces/WhitelistInterface.sol",
+ "id": 422,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9843,
+ "src": "831:72:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 421,
+ "name": "WhitelistInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "839:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/MarginPoolInterface.sol",
+ "file": "../interfaces/MarginPoolInterface.sol",
+ "id": 424,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9505,
+ "src": "904:74:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 423,
+ "name": "MarginPoolInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "912:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/CalleeInterface.sol",
+ "file": "../interfaces/CalleeInterface.sol",
+ "id": 426,
+ "nodeType": "ImportDirective",
+ "scope": 3231,
+ "sourceUnit": 9300,
+ "src": "979:66:1",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 425,
+ "name": "CalleeInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "987:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 428,
+ "name": "Initializable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 15280,
+ "src": "2860:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Initializable_$15280",
+ "typeString": "contract Initializable"
+ }
+ },
+ "id": 429,
+ "nodeType": "InheritanceSpecifier",
+ "src": "2860:13:1"
+ },
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 430,
+ "name": "OwnableUpgradeSafe",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 15410,
+ "src": "2875:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OwnableUpgradeSafe_$15410",
+ "typeString": "contract OwnableUpgradeSafe"
+ }
+ },
+ "id": 431,
+ "nodeType": "InheritanceSpecifier",
+ "src": "2875:18:1"
+ },
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 432,
+ "name": "ReentrancyGuardUpgradeSafe",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 15630,
+ "src": "2895:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ReentrancyGuardUpgradeSafe_$15630",
+ "typeString": "contract ReentrancyGuardUpgradeSafe"
+ }
+ },
+ "id": 433,
+ "nodeType": "InheritanceSpecifier",
+ "src": "2895:26:1"
+ }
+ ],
+ "contractDependencies": [
+ 15127,
+ 15280,
+ 15410,
+ 15630
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 427,
+ "nodeType": "StructuredDocumentation",
+ "src": "2693:143:1",
+ "text": " @title Controller\n @author Opyn Team\n @notice Contract that controls the Gamma Protocol and the interaction of all sub contracts"
+ },
+ "fullyImplemented": true,
+ "id": 3230,
+ "linearizedBaseContracts": [
+ 3230,
+ 15630,
+ 15410,
+ 15127,
+ 15280
+ ],
+ "name": "Controller",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 436,
+ "libraryName": {
+ "contractScope": null,
+ "id": 434,
+ "name": "MarginVault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 11511,
+ "src": "2934:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginVault_$11511",
+ "typeString": "library MarginVault"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "2928:40:1",
+ "typeName": {
+ "contractScope": null,
+ "id": 435,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "2950:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ }
+ },
+ {
+ "id": 439,
+ "libraryName": {
+ "contractScope": null,
+ "id": 437,
+ "name": "SafeMath",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 14285,
+ "src": "2979:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SafeMath_$14285",
+ "typeString": "library SafeMath"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "2973:27:1",
+ "typeName": {
+ "id": 438,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2992:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "functionSelector": "70dc320c",
+ "id": 441,
+ "mutability": "mutable",
+ "name": "addressbook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3006:39:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 440,
+ "name": "AddressBookInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9225,
+ "src": "3006:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "93e59dc1",
+ "id": 443,
+ "mutability": "mutable",
+ "name": "whitelist",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3051:35:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 442,
+ "name": "WhitelistInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9842,
+ "src": "3051:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "7dc0d1d0",
+ "id": 445,
+ "mutability": "mutable",
+ "name": "oracle",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3092:29:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 444,
+ "name": "OracleInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9641,
+ "src": "3092:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "ce3e39c0",
+ "id": 447,
+ "mutability": "mutable",
+ "name": "calculator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3127:43:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 446,
+ "name": "MarginCalculatorInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9428,
+ "src": "3127:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "16f0115b",
+ "id": 449,
+ "mutability": "mutable",
+ "name": "pool",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3176:31:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 448,
+ "name": "MarginPoolInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9504,
+ "src": "3176:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 450,
+ "nodeType": "StructuredDocumentation",
+ "src": "3214:38:1",
+ "text": "@dev scale used in MarginCalculator"
+ },
+ "id": 453,
+ "mutability": "constant",
+ "name": "BASE",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3257:34:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 451,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3257:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "38",
+ "id": 452,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3290:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 454,
+ "nodeType": "StructuredDocumentation",
+ "src": "3298:145:1",
+ "text": "@notice address that has permission to partially pause the system, where system functionality is paused\n except redeem and settleVault"
+ },
+ "functionSelector": "9db93891",
+ "id": 456,
+ "mutability": "mutable",
+ "name": "partialPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3448:28:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 455,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3448:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 457,
+ "nodeType": "StructuredDocumentation",
+ "src": "3483:107:1",
+ "text": "@notice address that has permission to fully pause the system, where all system functionality is paused"
+ },
+ "functionSelector": "29729d88",
+ "id": 459,
+ "mutability": "mutable",
+ "name": "fullPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3595:25:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 458,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3595:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 460,
+ "nodeType": "StructuredDocumentation",
+ "src": "3627:89:1",
+ "text": "@notice True if all system functionality is paused other than redeem and settle vault"
+ },
+ "functionSelector": "cdee058a",
+ "id": 462,
+ "mutability": "mutable",
+ "name": "systemPartiallyPaused",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3721:33:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 461,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3721:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 463,
+ "nodeType": "StructuredDocumentation",
+ "src": "3761:54:1",
+ "text": "@notice True if all system functionality is paused"
+ },
+ "functionSelector": "eab7775b",
+ "id": 465,
+ "mutability": "mutable",
+ "name": "systemFullyPaused",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3820:29:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 464,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3820:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 466,
+ "nodeType": "StructuredDocumentation",
+ "src": "3856:78:1",
+ "text": "@notice True if a call action can only be executed to a whitelisted callee"
+ },
+ "functionSelector": "6c0c3b99",
+ "id": 468,
+ "mutability": "mutable",
+ "name": "callRestricted",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "3939:26:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 467,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3939:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 469,
+ "nodeType": "StructuredDocumentation",
+ "src": "3972:80:1",
+ "text": "@dev mapping between an owner address and the number of owner address vaults"
+ },
+ "id": 473,
+ "mutability": "mutable",
+ "name": "accountVaultCounter",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "4057:56:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 472,
+ "keyType": {
+ "id": 470,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4065:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4057:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 471,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4076:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 474,
+ "nodeType": "StructuredDocumentation",
+ "src": "4119:79:1",
+ "text": "@dev mapping between an owner address and a specific vault using a vault id"
+ },
+ "id": 480,
+ "mutability": "mutable",
+ "name": "vaults",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "4203:73:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault))"
+ },
+ "typeName": {
+ "id": 479,
+ "keyType": {
+ "id": 475,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4211:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4203:57:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault))"
+ },
+ "valueType": {
+ "id": 478,
+ "keyType": {
+ "id": 476,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4230:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4222:37:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault)"
+ },
+ "valueType": {
+ "contractScope": null,
+ "id": 477,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "4241:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 481,
+ "nodeType": "StructuredDocumentation",
+ "src": "4282:92:1",
+ "text": "@dev mapping between an account owner and their approved or unapproved account operators"
+ },
+ "id": 487,
+ "mutability": "mutable",
+ "name": "operators",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "4379:63:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ },
+ "typeName": {
+ "id": 486,
+ "keyType": {
+ "id": 482,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4387:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4379:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ },
+ "valueType": {
+ "id": 485,
+ "keyType": {
+ "id": 483,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4406:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4398:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "valueType": {
+ "id": 484,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4417:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 488,
+ "nodeType": "StructuredDocumentation",
+ "src": "4603:129:1",
+ "text": "@dev mapping to map vault by each vault type, naked margin vault should be set to 1, spread/max loss vault should be set to 0"
+ },
+ "id": 494,
+ "mutability": "mutable",
+ "name": "vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "4737:66:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ },
+ "typeName": {
+ "id": 493,
+ "keyType": {
+ "id": 489,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4745:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4737:47:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ },
+ "valueType": {
+ "id": 492,
+ "keyType": {
+ "id": 490,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4764:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4756:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ },
+ "valueType": {
+ "id": 491,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4775:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 495,
+ "nodeType": "StructuredDocumentation",
+ "src": "4809:160:1",
+ "text": "@dev mapping to store the timestamp at which the vault was last updated, will be updated in every action that changes the vault state or when calling sync()"
+ },
+ "id": 501,
+ "mutability": "mutable",
+ "name": "vaultLatestUpdate",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "4974:74:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ },
+ "typeName": {
+ "id": 500,
+ "keyType": {
+ "id": 496,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4982:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4974:47:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ },
+ "valueType": {
+ "id": 499,
+ "keyType": {
+ "id": 497,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5001:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "4993:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ },
+ "valueType": {
+ "id": 498,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5012:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 502,
+ "nodeType": "StructuredDocumentation",
+ "src": "5055:126:1",
+ "text": "@dev mapping to store cap amount for naked margin vault per options collateral asset (scaled by collateral asset decimals)"
+ },
+ "id": 506,
+ "mutability": "mutable",
+ "name": "nakedCap",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "5186:45:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 505,
+ "keyType": {
+ "id": 503,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5194:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "5186:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 504,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5205:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 507,
+ "nodeType": "StructuredDocumentation",
+ "src": "5238:63:1",
+ "text": "@dev mapping to store amount of naked margin vaults in pool"
+ },
+ "id": 511,
+ "mutability": "mutable",
+ "name": "nakedPoolBalance",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3230,
+ "src": "5306:53:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 510,
+ "keyType": {
+ "id": 508,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5314:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "5306:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 509,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5325:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 512,
+ "nodeType": "StructuredDocumentation",
+ "src": "5366:91:1",
+ "text": "@notice emits an event when an account operator is updated for a specific account owner"
+ },
+ "id": 520,
+ "name": "AccountOperatorUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 519,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 514,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 520,
+ "src": "5491:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 513,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5491:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 516,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "operator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 520,
+ "src": "5521:24:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 515,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5521:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 518,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isSet",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 520,
+ "src": "5547:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 517,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "5547:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5490:68:1"
+ },
+ "src": "5462:97:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 521,
+ "nodeType": "StructuredDocumentation",
+ "src": "5564:53:1",
+ "text": "@notice emits an event when a new vault is opened"
+ },
+ "id": 529,
+ "name": "VaultOpened",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 528,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 523,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 529,
+ "src": "5640:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 522,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5640:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 525,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 529,
+ "src": "5670:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 524,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5670:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 527,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 529,
+ "src": "5687:25:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 526,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5687:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5639:74:1"
+ },
+ "src": "5622:92:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 530,
+ "nodeType": "StructuredDocumentation",
+ "src": "5719:71:1",
+ "text": "@notice emits an event when a long oToken is deposited into a vault"
+ },
+ "id": 542,
+ "name": "LongOtokenDeposited",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 541,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 532,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 542,
+ "src": "5830:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 531,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5830:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 534,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 542,
+ "src": "5862:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 533,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5862:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 536,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "from",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 542,
+ "src": "5900:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 535,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5900:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 538,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 542,
+ "src": "5930:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 537,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5930:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 540,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 542,
+ "src": "5955:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 539,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5955:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5820:155:1"
+ },
+ "src": "5795:181:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 543,
+ "nodeType": "StructuredDocumentation",
+ "src": "5981:71:1",
+ "text": "@notice emits an event when a long oToken is withdrawn from a vault"
+ },
+ "id": 555,
+ "name": "LongOtokenWithdrawed",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 554,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 545,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 555,
+ "src": "6093:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 544,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6093:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 547,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "AccountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 555,
+ "src": "6125:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 546,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6125:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 549,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "to",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 555,
+ "src": "6163:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 548,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6163:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 551,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 555,
+ "src": "6191:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 550,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6191:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 553,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 555,
+ "src": "6216:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 552,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6216:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6083:153:1"
+ },
+ "src": "6057:180:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 556,
+ "nodeType": "StructuredDocumentation",
+ "src": "6242:76:1",
+ "text": "@notice emits an event when a collateral asset is deposited into a vault"
+ },
+ "id": 568,
+ "name": "CollateralAssetDeposited",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 567,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 558,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 568,
+ "src": "6363:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 557,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6363:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 560,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 568,
+ "src": "6394:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 559,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6394:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 562,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "from",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 568,
+ "src": "6432:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 561,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6432:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 564,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 568,
+ "src": "6462:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 563,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6462:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 566,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 568,
+ "src": "6487:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 565,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6487:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6353:154:1"
+ },
+ "src": "6323:185:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 569,
+ "nodeType": "StructuredDocumentation",
+ "src": "6513:76:1",
+ "text": "@notice emits an event when a collateral asset is withdrawn from a vault"
+ },
+ "id": 581,
+ "name": "CollateralAssetWithdrawed",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 580,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 571,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 581,
+ "src": "6635:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 570,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6635:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 573,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "AccountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 581,
+ "src": "6666:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 572,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6666:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 575,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "to",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 581,
+ "src": "6704:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 574,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6704:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 577,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 581,
+ "src": "6732:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 576,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6732:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 579,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 581,
+ "src": "6757:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 578,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6757:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6625:152:1"
+ },
+ "src": "6594:184:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 582,
+ "nodeType": "StructuredDocumentation",
+ "src": "6783:69:1",
+ "text": "@notice emits an event when a short oToken is minted from a vault"
+ },
+ "id": 594,
+ "name": "ShortOtokenMinted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 593,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 584,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 594,
+ "src": "6890:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 583,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6890:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 586,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "AccountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 594,
+ "src": "6922:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 585,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6922:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 588,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "to",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 594,
+ "src": "6960:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 587,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6960:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 590,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 594,
+ "src": "6988:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 589,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6988:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 592,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 594,
+ "src": "7013:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 591,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7013:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6880:153:1"
+ },
+ "src": "6857:177:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 595,
+ "nodeType": "StructuredDocumentation",
+ "src": "7039:56:1",
+ "text": "@notice emits an event when a short oToken is burned"
+ },
+ "id": 607,
+ "name": "ShortOtokenBurned",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 606,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 597,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 607,
+ "src": "7133:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 596,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7133:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 599,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "AccountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 607,
+ "src": "7165:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 598,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7165:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 601,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "from",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 607,
+ "src": "7203:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 600,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7203:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 603,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 607,
+ "src": "7233:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 602,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7233:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 605,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 607,
+ "src": "7258:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 604,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7258:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7123:155:1"
+ },
+ "src": "7100:179:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 608,
+ "nodeType": "StructuredDocumentation",
+ "src": "7284:53:1",
+ "text": "@notice emits an event when an oToken is redeemed"
+ },
+ "id": 622,
+ "name": "Redeem",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 621,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 610,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 622,
+ "src": "7364:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 609,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7364:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 612,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "redeemer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 622,
+ "src": "7396:24:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 611,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7396:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 614,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "receiver",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 622,
+ "src": "7430:24:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 613,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7430:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 616,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 622,
+ "src": "7464:23:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 615,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7464:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 618,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "otokenBurned",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 622,
+ "src": "7497:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 617,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7497:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 620,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "payout",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 622,
+ "src": "7527:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 619,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7527:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7354:193:1"
+ },
+ "src": "7342:206:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 623,
+ "nodeType": "StructuredDocumentation",
+ "src": "7553:50:1",
+ "text": "@notice emits an event when a vault is settled"
+ },
+ "id": 637,
+ "name": "VaultSettled",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 636,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 625,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 637,
+ "src": "7636:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 624,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7636:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 627,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "oTokenAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 637,
+ "src": "7674:29:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 626,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7674:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 629,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "to",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 637,
+ "src": "7713:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 628,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7713:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 631,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "payout",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 637,
+ "src": "7733:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 630,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7733:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 633,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 637,
+ "src": "7757:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 632,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7757:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 635,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 637,
+ "src": "7782:25:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 634,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7782:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7626:187:1"
+ },
+ "src": "7608:206:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 638,
+ "nodeType": "StructuredDocumentation",
+ "src": "7819:53:1",
+ "text": "@notice emits an event when a vault is liquidated"
+ },
+ "id": 656,
+ "name": "VaultLiquidated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 655,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 640,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "liquidator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "7908:26:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 639,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7908:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 642,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "receiver",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "7944:24:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 641,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7944:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 644,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "vaultOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "7978:26:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 643,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7978:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 646,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "auctionPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "8014:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 645,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8014:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 648,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "auctionStartingRound",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "8044:28:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 647,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8044:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 650,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "collateralPayout",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "8082:24:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 649,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8082:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 652,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "debtAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "8116:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 651,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8116:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 654,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 656,
+ "src": "8144:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 653,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8144:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7898:267:1"
+ },
+ "src": "7877:289:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 657,
+ "nodeType": "StructuredDocumentation",
+ "src": "8171:57:1",
+ "text": "@notice emits an event when a call action is executed"
+ },
+ "id": 665,
+ "name": "CallExecuted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 664,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 659,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "from",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 665,
+ "src": "8252:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 658,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8252:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 661,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "to",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 665,
+ "src": "8274:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 660,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8274:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 663,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "data",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 665,
+ "src": "8294:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 662,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "8294:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8251:54:1"
+ },
+ "src": "8233:73:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 666,
+ "nodeType": "StructuredDocumentation",
+ "src": "8311:62:1",
+ "text": "@notice emits an event when the fullPauser address changes"
+ },
+ "id": 672,
+ "name": "FullPauserUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 671,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 668,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "oldFullPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 672,
+ "src": "8402:29:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 667,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8402:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 670,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "newFullPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 672,
+ "src": "8433:29:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 669,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8433:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8401:62:1"
+ },
+ "src": "8378:86:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 673,
+ "nodeType": "StructuredDocumentation",
+ "src": "8469:65:1",
+ "text": "@notice emits an event when the partialPauser address changes"
+ },
+ "id": 679,
+ "name": "PartialPauserUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 678,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 675,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "oldPartialPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 679,
+ "src": "8566:32:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 674,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8566:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 677,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "newPartialPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 679,
+ "src": "8600:32:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 676,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8600:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8565:68:1"
+ },
+ "src": "8539:95:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 680,
+ "nodeType": "StructuredDocumentation",
+ "src": "8639:72:1",
+ "text": "@notice emits an event when the system partial paused status changes"
+ },
+ "id": 684,
+ "name": "SystemPartiallyPaused",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 683,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 682,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isPaused",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 684,
+ "src": "8744:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 681,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "8744:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8743:15:1"
+ },
+ "src": "8716:43:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 685,
+ "nodeType": "StructuredDocumentation",
+ "src": "8764:70:1",
+ "text": "@notice emits an event when the system fully paused status changes"
+ },
+ "id": 689,
+ "name": "SystemFullyPaused",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 688,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 687,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isPaused",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 689,
+ "src": "8863:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 686,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "8863:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8862:15:1"
+ },
+ "src": "8839:39:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 690,
+ "nodeType": "StructuredDocumentation",
+ "src": "8883:67:1",
+ "text": "@notice emits an event when the call action restriction changes"
+ },
+ "id": 694,
+ "name": "CallRestricted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 693,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 692,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isRestricted",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 694,
+ "src": "8976:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 691,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "8976:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8975:19:1"
+ },
+ "src": "8955:40:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 695,
+ "nodeType": "StructuredDocumentation",
+ "src": "9000:60:1",
+ "text": "@notice emits an event when a donation transfer executed"
+ },
+ "id": 703,
+ "name": "Donated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 702,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 697,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "donator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 703,
+ "src": "9079:23:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 696,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9079:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 699,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 703,
+ "src": "9104:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 698,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9104:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 701,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 703,
+ "src": "9127:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 700,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9127:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9078:64:1"
+ },
+ "src": "9065:78:1"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 704,
+ "nodeType": "StructuredDocumentation",
+ "src": "9148:52:1",
+ "text": "@notice emits an event when naked cap is updated"
+ },
+ "id": 710,
+ "name": "NakedCapUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 709,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 706,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 710,
+ "src": "9227:26:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 705,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9227:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 708,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "cap",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 710,
+ "src": "9255:11:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 707,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9255:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9226:41:1"
+ },
+ "src": "9205:63:1"
+ },
+ {
+ "body": {
+ "id": 717,
+ "nodeType": "Block",
+ "src": "9437:52:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 713,
+ "name": "_isNotPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 794,
+ "src": "9447:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$__$",
+ "typeString": "function () view"
+ }
+ },
+ "id": 714,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9447:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 715,
+ "nodeType": "ExpressionStatement",
+ "src": "9447:23:1"
+ },
+ {
+ "id": 716,
+ "nodeType": "PlaceholderStatement",
+ "src": "9481:1:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 711,
+ "nodeType": "StructuredDocumentation",
+ "src": "9274:128:1",
+ "text": " @notice modifier to check if the system is not partially paused, where only redeem and settleVault is allowed"
+ },
+ "id": 718,
+ "name": "notPartiallyPaused",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 712,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9434:2:1"
+ },
+ "src": "9407:82:1",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 725,
+ "nodeType": "Block",
+ "src": "9639:48:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 721,
+ "name": "_isNotFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 805,
+ "src": "9649:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$__$",
+ "typeString": "function () view"
+ }
+ },
+ "id": 722,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9649:19:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 723,
+ "nodeType": "ExpressionStatement",
+ "src": "9649:19:1"
+ },
+ {
+ "id": 724,
+ "nodeType": "PlaceholderStatement",
+ "src": "9679:1:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 719,
+ "nodeType": "StructuredDocumentation",
+ "src": "9495:113:1",
+ "text": " @notice modifier to check if the system is not fully paused, where no functionality is allowed"
+ },
+ "id": 726,
+ "name": "notFullyPaused",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 720,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9636:2:1"
+ },
+ "src": "9613:74:1",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 738,
+ "nodeType": "Block",
+ "src": "9804:68:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 733,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 730,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "9822:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 731,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "9822:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 732,
+ "name": "fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 459,
+ "src": "9836:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "9822:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4331",
+ "id": 734,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9848:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7c8a46b75fb4f22ffcb6a001d21cdfe621df9af052bfee526b19a22f3dd9d853",
+ "typeString": "literal_string \"C1\""
+ },
+ "value": "C1"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7c8a46b75fb4f22ffcb6a001d21cdfe621df9af052bfee526b19a22f3dd9d853",
+ "typeString": "literal_string \"C1\""
+ }
+ ],
+ "id": 729,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "9814:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 735,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9814:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 736,
+ "nodeType": "ExpressionStatement",
+ "src": "9814:39:1"
+ },
+ {
+ "id": 737,
+ "nodeType": "PlaceholderStatement",
+ "src": "9864:1:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 727,
+ "nodeType": "StructuredDocumentation",
+ "src": "9693:80:1",
+ "text": " @notice modifier to check if sender is the fullPauser address"
+ },
+ "id": 739,
+ "name": "onlyFullPauser",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 728,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9801:2:1"
+ },
+ "src": "9778:94:1",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 751,
+ "nodeType": "Block",
+ "src": "9999:71:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 746,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 743,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "10017:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 744,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "10017:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 745,
+ "name": "partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 456,
+ "src": "10031:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10017:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4332",
+ "id": 747,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10046:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_2959894a21d50210554cb61f9b2c0dcac76cbc263e353486849b0bbd476c3bdb",
+ "typeString": "literal_string \"C2\""
+ },
+ "value": "C2"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_2959894a21d50210554cb61f9b2c0dcac76cbc263e353486849b0bbd476c3bdb",
+ "typeString": "literal_string \"C2\""
+ }
+ ],
+ "id": 742,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "10009:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 748,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10009:42:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 749,
+ "nodeType": "ExpressionStatement",
+ "src": "10009:42:1"
+ },
+ {
+ "id": 750,
+ "nodeType": "PlaceholderStatement",
+ "src": "10062:1:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 740,
+ "nodeType": "StructuredDocumentation",
+ "src": "9878:87:1",
+ "text": " @notice modifier to check if the sender is the partialPauser address"
+ },
+ "id": 752,
+ "name": "onlyPartialPauser",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 741,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9996:2:1"
+ },
+ "src": "9970:100:1",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 765,
+ "nodeType": "Block",
+ "src": "10343:66:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 760,
+ "name": "_sender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10367:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 761,
+ "name": "_accountOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10376:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 759,
+ "name": "_isAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 829,
+ "src": "10353:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address) view"
+ }
+ },
+ "id": 762,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10353:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 763,
+ "nodeType": "ExpressionStatement",
+ "src": "10353:37:1"
+ },
+ {
+ "id": 764,
+ "nodeType": "PlaceholderStatement",
+ "src": "10401:1:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 753,
+ "nodeType": "StructuredDocumentation",
+ "src": "10076:198:1",
+ "text": " @notice modifier to check if the sender is the account owner or an approved account operator\n @param _sender sender address\n @param _accountOwner account owner address"
+ },
+ "id": 766,
+ "name": "onlyAuthorized",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 758,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 755,
+ "mutability": "mutable",
+ "name": "_sender",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 766,
+ "src": "10303:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 754,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10303:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 757,
+ "mutability": "mutable",
+ "name": "_accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 766,
+ "src": "10320:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 756,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10320:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10302:40:1"
+ },
+ "src": "10279:130:1",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 782,
+ "nodeType": "Block",
+ "src": "10603:117:1",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 771,
+ "name": "callRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "10617:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 780,
+ "nodeType": "IfStatement",
+ "src": "10613:89:1",
+ "trueBody": {
+ "id": 779,
+ "nodeType": "Block",
+ "src": "10633:69:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 774,
+ "name": "_callee",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 769,
+ "src": "10676:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 773,
+ "name": "_isCalleeWhitelisted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3045,
+ "src": "10655:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 775,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10655:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4333",
+ "id": 776,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10686:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f2ae31beec64484c8c07847f3b0c46e7b0b495ac766bb2fe8d1d28804232d20f",
+ "typeString": "literal_string \"C3\""
+ },
+ "value": "C3"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f2ae31beec64484c8c07847f3b0c46e7b0b495ac766bb2fe8d1d28804232d20f",
+ "typeString": "literal_string \"C3\""
+ }
+ ],
+ "id": 772,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "10647:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 777,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10647:44:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 778,
+ "nodeType": "ExpressionStatement",
+ "src": "10647:44:1"
+ }
+ ]
+ }
+ },
+ {
+ "id": 781,
+ "nodeType": "PlaceholderStatement",
+ "src": "10712:1:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 767,
+ "nodeType": "StructuredDocumentation",
+ "src": "10415:135:1",
+ "text": " @notice modifier to check if the called address is a whitelisted callee address\n @param _callee called address"
+ },
+ "id": 783,
+ "name": "onlyWhitelistedCallee",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 770,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 769,
+ "mutability": "mutable",
+ "name": "_callee",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 783,
+ "src": "10586:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 768,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10586:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10585:17:1"
+ },
+ "src": "10555:165:1",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 793,
+ "nodeType": "Block",
+ "src": "10855:54:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 789,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "10873:22:1",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 788,
+ "name": "systemPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 462,
+ "src": "10874:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4334",
+ "id": 790,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10897:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_df00219f623e2bb2442f04dffe60fd9ad1efb43243074e440ae0d72b471c07d0",
+ "typeString": "literal_string \"C4\""
+ },
+ "value": "C4"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_df00219f623e2bb2442f04dffe60fd9ad1efb43243074e440ae0d72b471c07d0",
+ "typeString": "literal_string \"C4\""
+ }
+ ],
+ "id": 787,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "10865:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 791,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10865:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 792,
+ "nodeType": "ExpressionStatement",
+ "src": "10865:37:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 784,
+ "nodeType": "StructuredDocumentation",
+ "src": "10726:77:1",
+ "text": " @dev check if the system is not in a partiallyPaused state"
+ },
+ "id": 794,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isNotPartiallyPaused",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 785,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "10838:2:1"
+ },
+ "returnParameters": {
+ "id": 786,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "10855:0:1"
+ },
+ "scope": 3230,
+ "src": "10808:101:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 804,
+ "nodeType": "Block",
+ "src": "11037:50:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "11055:18:1",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 799,
+ "name": "systemFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 465,
+ "src": "11056:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4335",
+ "id": 801,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11075:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f92de81805d417a4d81547fc755e199080341ccf53847358ad5b94291cb38701",
+ "typeString": "literal_string \"C5\""
+ },
+ "value": "C5"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f92de81805d417a4d81547fc755e199080341ccf53847358ad5b94291cb38701",
+ "typeString": "literal_string \"C5\""
+ }
+ ],
+ "id": 798,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "11047:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 802,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11047:33:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 803,
+ "nodeType": "ExpressionStatement",
+ "src": "11047:33:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 795,
+ "nodeType": "StructuredDocumentation",
+ "src": "10915:74:1",
+ "text": " @dev check if the system is not in an fullyPaused state"
+ },
+ "id": 805,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isNotFullyPaused",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 796,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11020:2:1"
+ },
+ "returnParameters": {
+ "id": 797,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11037:0:1"
+ },
+ "scope": 3230,
+ "src": "10994:93:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 828,
+ "nodeType": "Block",
+ "src": "11322:97:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 824,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 816,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 814,
+ "name": "_sender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 808,
+ "src": "11341:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 815,
+ "name": "_accountOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 810,
+ "src": "11352:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "11341:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 817,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "11340:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 818,
+ "name": "operators",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 487,
+ "src": "11371:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 820,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 819,
+ "name": "_accountOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 810,
+ "src": "11381:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11371:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 822,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 821,
+ "name": "_sender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 808,
+ "src": "11396:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11371:33:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 823,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "11370:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "11340:65:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4336",
+ "id": 825,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11407:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_08802aafd45ffe04e43665a4e73fa867b58a6aa1b0fc56d65920e39094511334",
+ "typeString": "literal_string \"C6\""
+ },
+ "value": "C6"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_08802aafd45ffe04e43665a4e73fa867b58a6aa1b0fc56d65920e39094511334",
+ "typeString": "literal_string \"C6\""
+ }
+ ],
+ "id": 813,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "11332:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 826,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11332:80:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 827,
+ "nodeType": "ExpressionStatement",
+ "src": "11332:80:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 806,
+ "nodeType": "StructuredDocumentation",
+ "src": "11093:147:1",
+ "text": " @dev check if the sender is an authorized operator\n @param _sender msg.sender\n @param _accountOwner owner of a vault"
+ },
+ "id": 829,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isAuthorized",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 811,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 808,
+ "mutability": "mutable",
+ "name": "_sender",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 829,
+ "src": "11268:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 807,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11268:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 810,
+ "mutability": "mutable",
+ "name": "_accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 829,
+ "src": "11285:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 809,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11285:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11267:40:1"
+ },
+ "returnParameters": {
+ "id": 812,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11322:0:1"
+ },
+ "scope": 3230,
+ "src": "11245:174:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 879,
+ "nodeType": "Block",
+ "src": "11656:305:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 845,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 840,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 832,
+ "src": "11674:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 843,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11698:1:1",
+ "subdenomination": null,
+ "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": 842,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "11690:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 841,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11690:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 844,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11690:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "11674:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4337",
+ "id": 846,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11702:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8a7879743007ca2539a3548096290359373334e80374011ca01b75dbb463d1bf",
+ "typeString": "literal_string \"C7\""
+ },
+ "value": "C7"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8a7879743007ca2539a3548096290359373334e80374011ca01b75dbb463d1bf",
+ "typeString": "literal_string \"C7\""
+ }
+ ],
+ "id": 839,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "11666:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 847,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11666:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 848,
+ "nodeType": "ExpressionStatement",
+ "src": "11666:41:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 855,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 850,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 834,
+ "src": "11725:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 853,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11743:1:1",
+ "subdenomination": null,
+ "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": 852,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "11735:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 851,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11735:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 854,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11735:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "11725:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4338",
+ "id": 856,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11747:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ee71bb46878ab3ab0cce2757bcada527d74c5aaba85f6a0a1840f56143a3a090",
+ "typeString": "literal_string \"C8\""
+ },
+ "value": "C8"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_ee71bb46878ab3ab0cce2757bcada527d74c5aaba85f6a0a1840f56143a3a090",
+ "typeString": "literal_string \"C8\""
+ }
+ ],
+ "id": 849,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "11717:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 857,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11717:35:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 858,
+ "nodeType": "ExpressionStatement",
+ "src": "11717:35:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 860,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 834,
+ "src": "11778:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 859,
+ "name": "__Ownable_init",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15313,
+ "src": "11763:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 861,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11763:22:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 862,
+ "nodeType": "ExpressionStatement",
+ "src": "11763:22:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 863,
+ "name": "__ReentrancyGuard_init_unchained",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15607,
+ "src": "11795:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
+ "typeString": "function ()"
+ }
+ },
+ "id": 864,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11795:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 865,
+ "nodeType": "ExpressionStatement",
+ "src": "11795:34:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 870,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 866,
+ "name": "addressbook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "11840:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 868,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 832,
+ "src": "11875:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 867,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "11854:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 869,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11854:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "src": "11840:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 871,
+ "nodeType": "ExpressionStatement",
+ "src": "11840:48:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 872,
+ "name": "_refreshConfigInternal",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3229,
+ "src": "11898:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
+ "typeString": "function ()"
+ }
+ },
+ "id": 873,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11898:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 874,
+ "nodeType": "ExpressionStatement",
+ "src": "11898:24:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 877,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 875,
+ "name": "callRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "11933:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 876,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11950:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "src": "11933:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 878,
+ "nodeType": "ExpressionStatement",
+ "src": "11933:21:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 830,
+ "nodeType": "StructuredDocumentation",
+ "src": "11425:147:1",
+ "text": " @notice initalize the deployed contract\n @param _addressBook addressbook module\n @param _owner account owner address"
+ },
+ "functionSelector": "485cc955",
+ "id": 880,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 837,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 836,
+ "name": "initializer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15253,
+ "src": "11644:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "11644:11:1"
+ }
+ ],
+ "name": "initialize",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 835,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 832,
+ "mutability": "mutable",
+ "name": "_addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 880,
+ "src": "11597:20:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 831,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11597:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 834,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 880,
+ "src": "11619:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 833,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11619:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11596:38:1"
+ },
+ "returnParameters": {
+ "id": 838,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11656:0:1"
+ },
+ "scope": 3230,
+ "src": "11577:384:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 904,
+ "nodeType": "Block",
+ "src": "12262:117:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 891,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 883,
+ "src": "12292:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 892,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "12300:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 893,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "12300:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 894,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 885,
+ "src": "12312:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 888,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "12272:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 890,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToPool",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9470,
+ "src": "12272:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 895,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12272:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 896,
+ "nodeType": "ExpressionStatement",
+ "src": "12272:48:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 898,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "12344:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 899,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "12344:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 900,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 883,
+ "src": "12356:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 901,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 885,
+ "src": "12364:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 897,
+ "name": "Donated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 703,
+ "src": "12336:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 902,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12336:36:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 903,
+ "nodeType": "EmitStatement",
+ "src": "12331:41:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 881,
+ "nodeType": "StructuredDocumentation",
+ "src": "11967:232:1",
+ "text": " @notice send asset amount to margin pool\n @dev use donate() instead of direct transfer() to store the balance in assetBalance\n @param _asset asset address\n @param _amount amount to donate to pool"
+ },
+ "functionSelector": "e69d849d",
+ "id": 905,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "donate",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 886,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 883,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 905,
+ "src": "12220:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 882,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12220:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 885,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 905,
+ "src": "12236:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 884,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12236:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12219:33:1"
+ },
+ "returnParameters": {
+ "id": 887,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "12262:0:1"
+ },
+ "scope": 3230,
+ "src": "12204:175:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 928,
+ "nodeType": "Block",
+ "src": "12755:184:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 916,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 914,
+ "name": "systemPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 462,
+ "src": "12773:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 915,
+ "name": "_partiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 908,
+ "src": "12798:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "12773:41:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4339",
+ "id": 917,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12816:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ },
+ "value": "C9"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ }
+ ],
+ "id": 913,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "12765:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 918,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12765:56:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 919,
+ "nodeType": "ExpressionStatement",
+ "src": "12765:56:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 922,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 920,
+ "name": "systemPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 462,
+ "src": "12832:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 921,
+ "name": "_partiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 908,
+ "src": "12856:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "12832:40:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 923,
+ "nodeType": "ExpressionStatement",
+ "src": "12832:40:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 925,
+ "name": "systemPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 462,
+ "src": "12910:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 924,
+ "name": "SystemPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 684,
+ "src": "12888:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
+ "typeString": "function (bool)"
+ }
+ },
+ "id": 926,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12888:44:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 927,
+ "nodeType": "EmitStatement",
+ "src": "12883:49:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 906,
+ "nodeType": "StructuredDocumentation",
+ "src": "12385:281:1",
+ "text": " @notice allows the partialPauser to toggle the systemPartiallyPaused variable and partially pause or partially unpause the system\n @dev can only be called by the partialPauser\n @param _partiallyPaused new boolean value to set systemPartiallyPaused to"
+ },
+ "functionSelector": "573c473e",
+ "id": 929,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 911,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 910,
+ "name": "onlyPartialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 752,
+ "src": "12737:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "12737:17:1"
+ }
+ ],
+ "name": "setSystemPartiallyPaused",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 909,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 908,
+ "mutability": "mutable",
+ "name": "_partiallyPaused",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 929,
+ "src": "12705:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 907,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "12705:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12704:23:1"
+ },
+ "returnParameters": {
+ "id": 912,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "12755:0:1"
+ },
+ "scope": 3230,
+ "src": "12671:268:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 952,
+ "nodeType": "Block",
+ "src": "13279:160:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 940,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 938,
+ "name": "systemFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 465,
+ "src": "13297:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 939,
+ "name": "_fullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 932,
+ "src": "13318:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "13297:33:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4339",
+ "id": 941,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13332:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ },
+ "value": "C9"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ }
+ ],
+ "id": 937,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "13289:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 942,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13289:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 943,
+ "nodeType": "ExpressionStatement",
+ "src": "13289:48:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 946,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 944,
+ "name": "systemFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 465,
+ "src": "13348:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 945,
+ "name": "_fullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 932,
+ "src": "13368:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "13348:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 947,
+ "nodeType": "ExpressionStatement",
+ "src": "13348:32:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 949,
+ "name": "systemFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 465,
+ "src": "13414:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 948,
+ "name": "SystemFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 689,
+ "src": "13396:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
+ "typeString": "function (bool)"
+ }
+ },
+ "id": 950,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13396:36:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 951,
+ "nodeType": "EmitStatement",
+ "src": "13391:41:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 930,
+ "nodeType": "StructuredDocumentation",
+ "src": "12945:256:1",
+ "text": " @notice allows the fullPauser to toggle the systemFullyPaused variable and fully pause or fully unpause the system\n @dev can only be called by the fullyPauser\n @param _fullyPaused new boolean value to set systemFullyPaused to"
+ },
+ "functionSelector": "9f677ed9",
+ "id": 953,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 935,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 934,
+ "name": "onlyFullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 739,
+ "src": "13264:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "13264:14:1"
+ }
+ ],
+ "name": "setSystemFullyPaused",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 933,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 932,
+ "mutability": "mutable",
+ "name": "_fullyPaused",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 953,
+ "src": "13236:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 931,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "13236:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "13235:19:1"
+ },
+ "returnParameters": {
+ "id": 936,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "13279:0:1"
+ },
+ "scope": 3230,
+ "src": "13206:233:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 987,
+ "nodeType": "Block",
+ "src": "13679:199:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 967,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 962,
+ "name": "_fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 956,
+ "src": "13697:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 965,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13720:1:1",
+ "subdenomination": null,
+ "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": 964,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "13712:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 963,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13712:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 966,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13712:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "13697:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433130",
+ "id": 968,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13724:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_3264b58dc1764753ee6525b480e17fe1649f5f763e299aecea6e63d7cdcdb8af",
+ "typeString": "literal_string \"C10\""
+ },
+ "value": "C10"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_3264b58dc1764753ee6525b480e17fe1649f5f763e299aecea6e63d7cdcdb8af",
+ "typeString": "literal_string \"C10\""
+ }
+ ],
+ "id": 961,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "13689:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 969,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13689:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 970,
+ "nodeType": "ExpressionStatement",
+ "src": "13689:41:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 974,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 972,
+ "name": "fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 459,
+ "src": "13748:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 973,
+ "name": "_fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 956,
+ "src": "13762:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "13748:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4339",
+ "id": 975,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13775:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ },
+ "value": "C9"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ }
+ ],
+ "id": 971,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "13740:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 976,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13740:40:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 977,
+ "nodeType": "ExpressionStatement",
+ "src": "13740:40:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 979,
+ "name": "fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 459,
+ "src": "13813:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 980,
+ "name": "_fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 956,
+ "src": "13825:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 978,
+ "name": "FullPauserUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 672,
+ "src": "13795:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address)"
+ }
+ },
+ "id": 981,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13795:42:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 982,
+ "nodeType": "EmitStatement",
+ "src": "13790:47:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 985,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 983,
+ "name": "fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 459,
+ "src": "13847:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 984,
+ "name": "_fullPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 956,
+ "src": "13860:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "13847:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 986,
+ "nodeType": "ExpressionStatement",
+ "src": "13847:24:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 954,
+ "nodeType": "StructuredDocumentation",
+ "src": "13445:166:1",
+ "text": " @notice allows the owner to set the fullPauser address\n @dev can only be called by the owner\n @param _fullPauser new fullPauser address"
+ },
+ "functionSelector": "beca75d7",
+ "id": 988,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 959,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 958,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15355,
+ "src": "13669:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "13669:9:1"
+ }
+ ],
+ "name": "setFullPauser",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 957,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 956,
+ "mutability": "mutable",
+ "name": "_fullPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 988,
+ "src": "13639:19:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 955,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13639:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "13638:21:1"
+ },
+ "returnParameters": {
+ "id": 960,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "13679:0:1"
+ },
+ "scope": 3230,
+ "src": "13616:262:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1022,
+ "nodeType": "Block",
+ "src": "14133:223:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1002,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 997,
+ "name": "_partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 991,
+ "src": "14151:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 1000,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "14177:1:1",
+ "subdenomination": null,
+ "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": 999,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "14169:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 998,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "14169:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 1001,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14169:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "14151:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433131",
+ "id": 1003,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "14181:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_40e51876b49c3108c5288e9f6d92c50374995870a966b78e81c018937f0939ed",
+ "typeString": "literal_string \"C11\""
+ },
+ "value": "C11"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_40e51876b49c3108c5288e9f6d92c50374995870a966b78e81c018937f0939ed",
+ "typeString": "literal_string \"C11\""
+ }
+ ],
+ "id": 996,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "14143:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1004,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14143:44:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1005,
+ "nodeType": "ExpressionStatement",
+ "src": "14143:44:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1009,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1007,
+ "name": "partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 456,
+ "src": "14205:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 1008,
+ "name": "_partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 991,
+ "src": "14222:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "14205:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4339",
+ "id": 1010,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "14238:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ },
+ "value": "C9"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ }
+ ],
+ "id": 1006,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "14197:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1011,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14197:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1012,
+ "nodeType": "ExpressionStatement",
+ "src": "14197:46:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1014,
+ "name": "partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 456,
+ "src": "14279:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1015,
+ "name": "_partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 991,
+ "src": "14294:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1013,
+ "name": "PartialPauserUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 679,
+ "src": "14258:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address)"
+ }
+ },
+ "id": 1016,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14258:51:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1017,
+ "nodeType": "EmitStatement",
+ "src": "14253:56:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1020,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 1018,
+ "name": "partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 456,
+ "src": "14319:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1019,
+ "name": "_partialPauser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 991,
+ "src": "14335:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "14319:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1021,
+ "nodeType": "ExpressionStatement",
+ "src": "14319:30:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 989,
+ "nodeType": "StructuredDocumentation",
+ "src": "13884:175:1",
+ "text": " @notice allows the owner to set the partialPauser address\n @dev can only be called by the owner\n @param _partialPauser new partialPauser address"
+ },
+ "functionSelector": "bc463a3d",
+ "id": 1023,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 994,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 993,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15355,
+ "src": "14123:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "14123:9:1"
+ }
+ ],
+ "name": "setPartialPauser",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 992,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 991,
+ "mutability": "mutable",
+ "name": "_partialPauser",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1023,
+ "src": "14090:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 990,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "14090:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "14089:24:1"
+ },
+ "returnParameters": {
+ "id": 995,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "14133:0:1"
+ },
+ "scope": 3230,
+ "src": "14064:292:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1046,
+ "nodeType": "Block",
+ "src": "14717:150:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 1034,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1032,
+ "name": "callRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "14735:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 1033,
+ "name": "_isRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1026,
+ "src": "14753:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "14735:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4339",
+ "id": 1035,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "14768:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ },
+ "value": "C9"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ }
+ ],
+ "id": 1031,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "14727:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1036,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14727:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1037,
+ "nodeType": "ExpressionStatement",
+ "src": "14727:46:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1040,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 1038,
+ "name": "callRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "14784:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1039,
+ "name": "_isRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1026,
+ "src": "14801:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "14784:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1041,
+ "nodeType": "ExpressionStatement",
+ "src": "14784:30:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1043,
+ "name": "callRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "14845:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 1042,
+ "name": "CallRestricted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 694,
+ "src": "14830:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
+ "typeString": "function (bool)"
+ }
+ },
+ "id": 1044,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14830:30:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1045,
+ "nodeType": "EmitStatement",
+ "src": "14825:35:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1024,
+ "nodeType": "StructuredDocumentation",
+ "src": "14362:283:1",
+ "text": " @notice allows the owner to toggle the restriction on whitelisted call actions and only allow whitelisted\n call addresses or allow any arbitrary call addresses\n @dev can only be called by the owner\n @param _isRestricted new call restriction state"
+ },
+ "functionSelector": "cab2e805",
+ "id": 1047,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1029,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1028,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15355,
+ "src": "14707:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "14707:9:1"
+ }
+ ],
+ "name": "setCallRestriction",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1027,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1026,
+ "mutability": "mutable",
+ "name": "_isRestricted",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1047,
+ "src": "14678:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1025,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "14678:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "14677:20:1"
+ },
+ "returnParameters": {
+ "id": 1030,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "14717:0:1"
+ },
+ "scope": 3230,
+ "src": "14650:217:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1083,
+ "nodeType": "Block",
+ "src": "15343:210:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 1063,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1056,
+ "name": "operators",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 487,
+ "src": "15361:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 1059,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1057,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "15371:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1058,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "15371:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "15361:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 1061,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1060,
+ "name": "_operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1050,
+ "src": "15383:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "15361:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 1062,
+ "name": "_isOperator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1052,
+ "src": "15397:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "15361:47:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4339",
+ "id": 1064,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "15410:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ },
+ "value": "C9"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_dfdfbe7f60e6893b044e2f17e1eb6759c0c9559ea76490ebe72e1513fa65d049",
+ "typeString": "literal_string \"C9\""
+ }
+ ],
+ "id": 1055,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "15353:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1065,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "15353:62:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1066,
+ "nodeType": "ExpressionStatement",
+ "src": "15353:62:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1074,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1067,
+ "name": "operators",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 487,
+ "src": "15426:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 1071,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1068,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "15436:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1069,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "15436:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "15426:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 1072,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1070,
+ "name": "_operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1050,
+ "src": "15448:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "15426:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1073,
+ "name": "_isOperator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1052,
+ "src": "15461:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "15426:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1075,
+ "nodeType": "ExpressionStatement",
+ "src": "15426:46:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1077,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "15511:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1078,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "15511:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1079,
+ "name": "_operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1050,
+ "src": "15523:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1080,
+ "name": "_isOperator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1052,
+ "src": "15534:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 1076,
+ "name": "AccountOperatorUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 520,
+ "src": "15488:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
+ "typeString": "function (address,address,bool)"
+ }
+ },
+ "id": 1081,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "15488:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1082,
+ "nodeType": "EmitStatement",
+ "src": "15483:63:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1048,
+ "nodeType": "StructuredDocumentation",
+ "src": "14873:398:1",
+ "text": " @notice allows a user to give or revoke privileges to an operator which can act on their behalf on their vaults\n @dev can only be updated by the vault owner\n @param _operator operator that the sender wants to give privileges to or revoke them from\n @param _isOperator new boolean value that expresses if the sender is giving or revoking privileges for _operator"
+ },
+ "functionSelector": "558a7297",
+ "id": 1084,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "setOperator",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1053,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1050,
+ "mutability": "mutable",
+ "name": "_operator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1084,
+ "src": "15297:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1049,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "15297:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1052,
+ "mutability": "mutable",
+ "name": "_isOperator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1084,
+ "src": "15316:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1051,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "15316:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "15296:37:1"
+ },
+ "returnParameters": {
+ "id": 1054,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "15343:0:1"
+ },
+ "scope": 3230,
+ "src": "15276:277:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1093,
+ "nodeType": "Block",
+ "src": "15715:41:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 1090,
+ "name": "_refreshConfigInternal",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3229,
+ "src": "15725:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
+ "typeString": "function ()"
+ }
+ },
+ "id": 1091,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "15725:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1092,
+ "nodeType": "ExpressionStatement",
+ "src": "15725:24:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1085,
+ "nodeType": "StructuredDocumentation",
+ "src": "15559:100:1",
+ "text": " @dev updates the configuration of the controller. can only be called by the owner"
+ },
+ "functionSelector": "64681083",
+ "id": 1094,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1088,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1087,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15355,
+ "src": "15705:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "15705:9:1"
+ }
+ ],
+ "name": "refreshConfiguration",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1086,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "15693:2:1"
+ },
+ "returnParameters": {
+ "id": 1089,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "15715:0:1"
+ },
+ "scope": 3230,
+ "src": "15664:92:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1122,
+ "nodeType": "Block",
+ "src": "16093:130:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1107,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1105,
+ "name": "_cap",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1099,
+ "src": "16111:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 1106,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16118:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "16111:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433336",
+ "id": 1108,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16121:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7693b2dfc98a67602a00349d3fd89406f8dd4da88e08bb890b76c5e3b42cb4aa",
+ "typeString": "literal_string \"C36\""
+ },
+ "value": "C36"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7693b2dfc98a67602a00349d3fd89406f8dd4da88e08bb890b76c5e3b42cb4aa",
+ "typeString": "literal_string \"C36\""
+ }
+ ],
+ "id": 1104,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "16103:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1109,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16103:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1110,
+ "nodeType": "ExpressionStatement",
+ "src": "16103:24:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1115,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1111,
+ "name": "nakedCap",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 506,
+ "src": "16138:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 1113,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1112,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1097,
+ "src": "16147:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "16138:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1114,
+ "name": "_cap",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1099,
+ "src": "16162:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "16138:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1116,
+ "nodeType": "ExpressionStatement",
+ "src": "16138:28:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1118,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1097,
+ "src": "16198:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1119,
+ "name": "_cap",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1099,
+ "src": "16211:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1117,
+ "name": "NakedCapUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 710,
+ "src": "16182:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 1120,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16182:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1121,
+ "nodeType": "EmitStatement",
+ "src": "16177:39:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1095,
+ "nodeType": "StructuredDocumentation",
+ "src": "15762:251:1",
+ "text": " @notice set cap amount for collateral asset used in naked margin\n @dev can only be called by owner\n @param _collateral collateral asset address\n @param _cap cap amount, should be scaled by collateral asset decimals"
+ },
+ "functionSelector": "2eb1c3a7",
+ "id": 1123,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1102,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1101,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15355,
+ "src": "16083:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "16083:9:1"
+ }
+ ],
+ "name": "setNakedCap",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1100,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1097,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1123,
+ "src": "16039:19:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1096,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "16039:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1099,
+ "mutability": "mutable",
+ "name": "_cap",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1123,
+ "src": "16060:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1098,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16060:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "16038:35:1"
+ },
+ "returnParameters": {
+ "id": 1103,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "16093:0:1"
+ },
+ "scope": 3230,
+ "src": "16018:205:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1160,
+ "nodeType": "Block",
+ "src": "16516:245:1",
+ "statements": [
+ {
+ "assignments": [
+ 1135,
+ 1137,
+ 1139
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1135,
+ "mutability": "mutable",
+ "name": "vaultUpdated",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1160,
+ "src": "16527:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1134,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "16527:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1137,
+ "mutability": "mutable",
+ "name": "vaultOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1160,
+ "src": "16546:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1136,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "16546:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1139,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1160,
+ "src": "16566:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1138,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16566:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1143,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1141,
+ "name": "_actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1127,
+ "src": "16597:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory[] memory"
+ }
+ ],
+ "id": 1140,
+ "name": "_runActions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1760,
+ "src": "16585:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr_$returns$_t_bool_$_t_address_$_t_uint256_$",
+ "typeString": "function (struct Actions.ActionArgs memory[] memory) returns (bool,address,uint256)"
+ }
+ },
+ "id": 1142,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16585:21:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(bool,address,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "16526:80:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 1144,
+ "name": "vaultUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1135,
+ "src": "16620:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 1159,
+ "nodeType": "IfStatement",
+ "src": "16616:139:1",
+ "trueBody": {
+ "id": 1158,
+ "nodeType": "Block",
+ "src": "16634:121:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1146,
+ "name": "vaultOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1137,
+ "src": "16666:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1147,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1139,
+ "src": "16678:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1145,
+ "name": "_verifyFinalState",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1793,
+ "src": "16648:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) view"
+ }
+ },
+ "id": 1148,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16648:38:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1149,
+ "nodeType": "ExpressionStatement",
+ "src": "16648:38:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1156,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1150,
+ "name": "vaultLatestUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 501,
+ "src": "16700:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 1153,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1151,
+ "name": "vaultOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1137,
+ "src": "16718:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "16700:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 1154,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1152,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1139,
+ "src": "16730:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "16700:38:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1155,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "16741:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "16700:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1157,
+ "nodeType": "ExpressionStatement",
+ "src": "16700:44:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1124,
+ "nodeType": "StructuredDocumentation",
+ "src": "16229:190:1",
+ "text": " @notice execute a number of actions on specific vaults\n @dev can only be called when the system is not fully paused\n @param _actions array of actions arguments"
+ },
+ "functionSelector": "b617f0c6",
+ "id": 1161,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1130,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1129,
+ "name": "nonReentrant",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15625,
+ "src": "16488:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "16488:12:1"
+ },
+ {
+ "arguments": null,
+ "id": 1132,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1131,
+ "name": "notFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 726,
+ "src": "16501:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "16501:14:1"
+ }
+ ],
+ "name": "operate",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1128,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1127,
+ "mutability": "mutable",
+ "name": "_actions",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1161,
+ "src": "16441:36:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr",
+ "typeString": "struct Actions.ActionArgs[]"
+ },
+ "typeName": {
+ "baseType": {
+ "contractScope": null,
+ "id": 1125,
+ "name": "Actions.ActionArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9969,
+ "src": "16441:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_storage_ptr",
+ "typeString": "struct Actions.ActionArgs"
+ }
+ },
+ "id": 1126,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "16441:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_storage_$dyn_storage_ptr",
+ "typeString": "struct Actions.ActionArgs[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "16440:38:1"
+ },
+ "returnParameters": {
+ "id": 1133,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "16516:0:1"
+ },
+ "scope": 3230,
+ "src": "16424:337:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1186,
+ "nodeType": "Block",
+ "src": "17155:103:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1174,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1164,
+ "src": "17183:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1175,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1166,
+ "src": "17191:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1173,
+ "name": "_verifyFinalState",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1793,
+ "src": "17165:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) view"
+ }
+ },
+ "id": 1176,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "17165:35:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1177,
+ "nodeType": "ExpressionStatement",
+ "src": "17165:35:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1184,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1178,
+ "name": "vaultLatestUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 501,
+ "src": "17210:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 1181,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1179,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1164,
+ "src": "17228:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "17210:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 1182,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1180,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1166,
+ "src": "17236:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "17210:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1183,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "17248:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "17210:41:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1185,
+ "nodeType": "ExpressionStatement",
+ "src": "17210:41:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1162,
+ "nodeType": "StructuredDocumentation",
+ "src": "16767:298:1",
+ "text": " @notice sync vault latest update timestamp\n @dev anyone can update the latest time the vault was touched by calling this function\n vaultLatestUpdate will sync if the vault is well collateralized\n @param _owner vault owner address\n @param _vaultId vault id"
+ },
+ "functionSelector": "ef4fcafa",
+ "id": 1187,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1169,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1168,
+ "name": "nonReentrant",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15625,
+ "src": "17127:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "17127:12:1"
+ },
+ {
+ "arguments": null,
+ "id": 1171,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1170,
+ "name": "notFullyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 726,
+ "src": "17140:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "17140:14:1"
+ }
+ ],
+ "name": "sync",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1167,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1164,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1187,
+ "src": "17084:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1163,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "17084:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1166,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1187,
+ "src": "17100:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1165,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "17100:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "17083:34:1"
+ },
+ "returnParameters": {
+ "id": 1172,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "17155:0:1"
+ },
+ "scope": 3230,
+ "src": "17070:188:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1203,
+ "nodeType": "Block",
+ "src": "17619:52:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1197,
+ "name": "operators",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 487,
+ "src": "17636:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 1199,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1198,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1190,
+ "src": "17646:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "17636:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 1201,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1200,
+ "name": "_operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1192,
+ "src": "17654:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "17636:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1196,
+ "id": 1202,
+ "nodeType": "Return",
+ "src": "17629:35:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1188,
+ "nodeType": "StructuredDocumentation",
+ "src": "17264:266:1",
+ "text": " @notice check if a specific address is an operator for an owner account\n @param _owner account owner address\n @param _operator account operator address\n @return True if the _operator is an approved operator for the _owner account"
+ },
+ "functionSelector": "b6363cf2",
+ "id": 1204,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isOperator",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1193,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1190,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1204,
+ "src": "17555:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1189,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "17555:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1192,
+ "mutability": "mutable",
+ "name": "_operator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1204,
+ "src": "17571:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1191,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "17571:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "17554:35:1"
+ },
+ "returnParameters": {
+ "id": 1196,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1195,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1204,
+ "src": "17613:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1194,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "17613:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "17612:6:1"
+ },
+ "scope": 3230,
+ "src": "17535:136:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1234,
+ "nodeType": "Block",
+ "src": "18160:97:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1218,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "18186:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ ],
+ "id": 1217,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "18178:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1216,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18178:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 1219,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18178:18:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1222,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 445,
+ "src": "18206:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ ],
+ "id": 1221,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "18198:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1220,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18198:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 1223,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18198:15:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1226,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "18223:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ ],
+ "id": 1225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "18215:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1224,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18215:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 1227,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18215:19:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1230,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "18244:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ ],
+ "id": 1229,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "18236:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1228,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18236:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 1231,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18236:13:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 1232,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "18177:73:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_address_$",
+ "typeString": "tuple(address,address,address,address)"
+ }
+ },
+ "functionReturnParameters": 1215,
+ "id": 1233,
+ "nodeType": "Return",
+ "src": "18170:80:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1205,
+ "nodeType": "StructuredDocumentation",
+ "src": "17677:305:1",
+ "text": " @notice returns the current controller configuration\n @return whitelist, the address of the whitelist module\n @return oracle, the address of the oracle module\n @return calculator, the address of the calculator module\n @return pool, the address of the pool module"
+ },
+ "functionSelector": "6bd50cef",
+ "id": 1235,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getConfiguration",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1206,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "18012:2:1"
+ },
+ "returnParameters": {
+ "id": 1215,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1208,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1235,
+ "src": "18075:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1207,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18075:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1210,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1235,
+ "src": "18096:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1209,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18096:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1212,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1235,
+ "src": "18117:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1211,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18117:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1214,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1235,
+ "src": "18138:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1213,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18138:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "18061:94:1"
+ },
+ "scope": 3230,
+ "src": "17987:270:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1273,
+ "nodeType": "Block",
+ "src": "18644:265:1",
+ "statements": [
+ {
+ "assignments": [
+ 1248,
+ 1250,
+ null
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1248,
+ "mutability": "mutable",
+ "name": "vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1273,
+ "src": "18655:30:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1247,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "18655:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1250,
+ "mutability": "mutable",
+ "name": "typeVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1273,
+ "src": "18687:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1249,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "18687:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 1255,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1252,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1238,
+ "src": "18730:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1253,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1240,
+ "src": "18738:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1251,
+ "name": "getVaultWithDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1462,
+ "src": "18710:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "id": 1254,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18710:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "18654:93:1"
+ },
+ {
+ "assignments": [
+ 1257,
+ 1259
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1257,
+ "mutability": "mutable",
+ "name": "netValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1273,
+ "src": "18759:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1256,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "18759:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1259,
+ "mutability": "mutable",
+ "name": "isExcess",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1273,
+ "src": "18777:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1258,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "18777:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1265,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1262,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1248,
+ "src": "18825:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1263,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1250,
+ "src": "18832:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1260,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "18794:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "id": 1261,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getExcessCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9410,
+ "src": "18794:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_bool_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256) view external returns (uint256,bool)"
+ }
+ },
+ "id": 1264,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18794:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "18758:84:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 1267,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "18857:9:1",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 1266,
+ "name": "isExcess",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1259,
+ "src": "18858:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 1270,
+ "nodeType": "IfStatement",
+ "src": "18853:23:1",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 1268,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "18875:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "functionReturnParameters": 1244,
+ "id": 1269,
+ "nodeType": "Return",
+ "src": "18868:8:1"
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1271,
+ "name": "netValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1257,
+ "src": "18894:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1244,
+ "id": 1272,
+ "nodeType": "Return",
+ "src": "18887:15:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1236,
+ "nodeType": "StructuredDocumentation",
+ "src": "18263:290:1",
+ "text": " @notice return a vault's proceeds pre or post expiry, the amount of collateral that can be removed from a vault\n @param _owner account owner of the vault\n @param _vaultId vaultId to return balances for\n @return amount of collateral that can be taken out"
+ },
+ "functionSelector": "c220101d",
+ "id": 1274,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getProceed",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1241,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1238,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1274,
+ "src": "18578:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1237,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "18578:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1240,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1274,
+ "src": "18594:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1239,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "18594:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "18577:34:1"
+ },
+ "returnParameters": {
+ "id": 1244,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1243,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1274,
+ "src": "18635:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1242,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "18635:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "18634:9:1"
+ },
+ "scope": 3230,
+ "src": "18558:351:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1307,
+ "nodeType": "Block",
+ "src": "19513:159:1",
+ "statements": [
+ {
+ "assignments": [
+ null,
+ 1291,
+ 1293,
+ 1295
+ ],
+ "declarations": [
+ null,
+ {
+ "constant": false,
+ "id": 1291,
+ "mutability": "mutable",
+ "name": "isUnderCollat",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1307,
+ "src": "19526:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1290,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "19526:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1293,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1307,
+ "src": "19546:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1292,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19546:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1295,
+ "mutability": "mutable",
+ "name": "dust",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1307,
+ "src": "19561:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1294,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19561:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1301,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1297,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1277,
+ "src": "19593:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1298,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1279,
+ "src": "19601:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1299,
+ "name": "_roundId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1281,
+ "src": "19611:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1296,
+ "name": "_isLiquidatable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3097,
+ "src": "19577:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256,uint256) view returns (struct MarginVault.Vault memory,bool,uint256,uint256)"
+ }
+ },
+ "id": 1300,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "19577:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,bool,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "19523:97:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 1302,
+ "name": "isUnderCollat",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1291,
+ "src": "19638:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1303,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1293,
+ "src": "19653:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1304,
+ "name": "dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1295,
+ "src": "19660:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 1305,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "19637:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(bool,uint256,uint256)"
+ }
+ },
+ "functionReturnParameters": 1289,
+ "id": 1306,
+ "nodeType": "Return",
+ "src": "19630:35:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1275,
+ "nodeType": "StructuredDocumentation",
+ "src": "18915:366:1",
+ "text": " @notice check if a vault is liquidatable in a specific round id\n @param _owner vault owner address\n @param _vaultId vault id to check\n @param _roundId chainlink round id to check vault status at\n @return isUnderCollat, true if vault is undercollateralized, the price of 1 repaid otoken and the otoken collateral dust amount"
+ },
+ "functionSelector": "eaa33e14",
+ "id": 1308,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isLiquidatable",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1282,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1277,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1308,
+ "src": "19319:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1276,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "19319:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1279,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1308,
+ "src": "19343:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1278,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19343:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1281,
+ "mutability": "mutable",
+ "name": "_roundId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1308,
+ "src": "19369:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1280,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19369:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "19309:82:1"
+ },
+ "returnParameters": {
+ "id": 1289,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1284,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1308,
+ "src": "19452:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1283,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "19452:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1286,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1308,
+ "src": "19470:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1285,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19470:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1288,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1308,
+ "src": "19491:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1287,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19491:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "19438:70:1"
+ },
+ "scope": 3230,
+ "src": "19286:386:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1331,
+ "nodeType": "Block",
+ "src": "20046:91:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1328,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "hexValue": "3130",
+ "id": 1326,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "20121:2:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "**",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 1327,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 453,
+ "src": "20125:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "20121:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1323,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1313,
+ "src": "20108:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1320,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1311,
+ "src": "20095:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1318,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "20063:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "id": 1319,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getExpiredPayoutRate",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9399,
+ "src": "20063:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
+ "typeString": "function (address) view external returns (uint256)"
+ }
+ },
+ "id": 1321,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20063:40:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1322,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14198,
+ "src": "20063:44:1",
+ "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": 1324,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20063:53:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1325,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14215,
+ "src": "20063:57:1",
+ "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": 1329,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20063:67:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1317,
+ "id": 1330,
+ "nodeType": "Return",
+ "src": "20056:74:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1309,
+ "nodeType": "StructuredDocumentation",
+ "src": "19678:280:1",
+ "text": " @notice get an oToken's payout/cash value after expiry, in the collateral asset\n @param _otoken oToken address\n @param _amount amount of the oToken to calculate the payout for, always represented in 1e8\n @return amount of collateral to pay out"
+ },
+ "functionSelector": "565eea19",
+ "id": 1332,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getPayout",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1314,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1311,
+ "mutability": "mutable",
+ "name": "_otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1332,
+ "src": "19982:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1310,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "19982:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1313,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1332,
+ "src": "19999:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1312,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19999:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "19981:34:1"
+ },
+ "returnParameters": {
+ "id": 1317,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1316,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1332,
+ "src": "20037:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1315,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "20037:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "20036:9:1"
+ },
+ "scope": 3230,
+ "src": "19963:174:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1359,
+ "nodeType": "Block",
+ "src": "20458:191:1",
+ "statements": [
+ {
+ "assignments": [
+ 1341,
+ 1343,
+ 1345,
+ 1347
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1341,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1359,
+ "src": "20469:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1340,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "20469:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1343,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1359,
+ "src": "20489:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1342,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "20489:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1345,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1359,
+ "src": "20505:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1344,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "20505:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1347,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1359,
+ "src": "20525:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1346,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "20525:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1351,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1349,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1335,
+ "src": "20561:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1348,
+ "name": "_getOtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3159,
+ "src": "20543:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "function (address) view returns (address,address,address,uint256)"
+ }
+ },
+ "id": 1350,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20543:26:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(address,address,address,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "20468:101:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1353,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1341,
+ "src": "20603:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1354,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1343,
+ "src": "20615:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1355,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1345,
+ "src": "20623:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1356,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1347,
+ "src": "20635:6:1",
+ "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": 1352,
+ "name": "_canSettleAssets",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3192,
+ "src": "20586:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,address,address,uint256) view returns (bool)"
+ }
+ },
+ "id": 1357,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20586:56:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1339,
+ "id": 1358,
+ "nodeType": "Return",
+ "src": "20579:63:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1333,
+ "nodeType": "StructuredDocumentation",
+ "src": "20143:235:1",
+ "text": " @dev return if an expired oToken is ready to be settled, only true when price for underlying,\n strike and collateral assets at this specific expiry is available in our Oracle module\n @param _otoken oToken"
+ },
+ "functionSelector": "e723406c",
+ "id": 1360,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isSettlementAllowed",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1336,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1335,
+ "mutability": "mutable",
+ "name": "_otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1360,
+ "src": "20412:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1334,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "20412:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "20411:17:1"
+ },
+ "returnParameters": {
+ "id": 1339,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1338,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1360,
+ "src": "20452:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1337,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "20452:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "20451:6:1"
+ },
+ "scope": 3230,
+ "src": "20383:266:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1381,
+ "nodeType": "Block",
+ "src": "21236:84:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1375,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1363,
+ "src": "21270:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1376,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1365,
+ "src": "21283:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1377,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1367,
+ "src": "21292:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1378,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1369,
+ "src": "21305:7:1",
+ "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": 1374,
+ "name": "_canSettleAssets",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3192,
+ "src": "21253:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,address,address,uint256) view returns (bool)"
+ }
+ },
+ "id": 1379,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21253:60:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1373,
+ "id": 1380,
+ "nodeType": "Return",
+ "src": "21246:67:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1361,
+ "nodeType": "StructuredDocumentation",
+ "src": "20655:408:1",
+ "text": " @dev return if underlying, strike, collateral are all allowed to be settled\n @param _underlying oToken underlying asset\n @param _strike oToken strike asset\n @param _collateral oToken collateral asset\n @param _expiry otoken expiry timestamp\n @return True if the oToken has expired AND all oracle prices at the expiry timestamp have been finalized, False if not"
+ },
+ "functionSelector": "14b93faf",
+ "id": 1382,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "canSettleAssets",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1370,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1363,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1382,
+ "src": "21102:19:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1362,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "21102:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1365,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1382,
+ "src": "21131:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1364,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "21131:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1367,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1382,
+ "src": "21156:19:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1366,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "21156:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1369,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1382,
+ "src": "21185:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1368,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "21185:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "21092:114:1"
+ },
+ "returnParameters": {
+ "id": 1373,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1372,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1382,
+ "src": "21230:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1371,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "21230:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "21229:6:1"
+ },
+ "scope": 3230,
+ "src": "21068:252:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1394,
+ "nodeType": "Block",
+ "src": "21581:58:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1390,
+ "name": "accountVaultCounter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 473,
+ "src": "21598:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 1392,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1391,
+ "name": "_accountOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1385,
+ "src": "21618:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "21598:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1389,
+ "id": 1393,
+ "nodeType": "Return",
+ "src": "21591:41:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1383,
+ "nodeType": "StructuredDocumentation",
+ "src": "21326:163:1",
+ "text": " @notice get the number of vaults for a specified account owner\n @param _accountOwner account owner address\n @return number of vaults"
+ },
+ "functionSelector": "caa6d21a",
+ "id": 1395,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getAccountVaultCounter",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1386,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1385,
+ "mutability": "mutable",
+ "name": "_accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1395,
+ "src": "21526:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1384,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "21526:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "21525:23:1"
+ },
+ "returnParameters": {
+ "id": 1389,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1388,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1395,
+ "src": "21572:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1387,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "21572:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "21571:9:1"
+ },
+ "scope": 3230,
+ "src": "21494:145:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1411,
+ "nodeType": "Block",
+ "src": "21870:73:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1409,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1403,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "21887:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1405,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1398,
+ "src": "21910:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1404,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "21894:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 1406,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21894:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 1407,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "21894:40:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 1408,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21894:42:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "21887:49:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1402,
+ "id": 1410,
+ "nodeType": "Return",
+ "src": "21880:56:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1396,
+ "nodeType": "StructuredDocumentation",
+ "src": "21645:154:1",
+ "text": " @notice check if an oToken has expired\n @param _otoken oToken address\n @return True if the otoken has expired, False if not"
+ },
+ "functionSelector": "f77bc88b",
+ "id": 1412,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "hasExpired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1399,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1398,
+ "mutability": "mutable",
+ "name": "_otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1412,
+ "src": "21824:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1397,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "21824:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "21823:17:1"
+ },
+ "returnParameters": {
+ "id": 1402,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1401,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1412,
+ "src": "21864:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1400,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "21864:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "21863:6:1"
+ },
+ "scope": 3230,
+ "src": "21804:139:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1429,
+ "nodeType": "Block",
+ "src": "22262:50:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1422,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "22280:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 1424,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1423,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1415,
+ "src": "22287:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22280:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 1426,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1425,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1417,
+ "src": "22295:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22280:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ }
+ ],
+ "id": 1427,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "22279:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "functionReturnParameters": 1421,
+ "id": 1428,
+ "nodeType": "Return",
+ "src": "22272:33:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1413,
+ "nodeType": "StructuredDocumentation",
+ "src": "21949:207:1",
+ "text": " @notice return a specific vault\n @param _owner account owner\n @param _vaultId vault id of vault to return\n @return Vault struct that corresponds to the _vaultId of _owner"
+ },
+ "functionSelector": "d99d13f5",
+ "id": 1430,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getVault",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1418,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1415,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1430,
+ "src": "22179:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1414,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "22179:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1417,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1430,
+ "src": "22195:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1416,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "22195:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "22178:34:1"
+ },
+ "returnParameters": {
+ "id": 1421,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1420,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1430,
+ "src": "22236:24:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1419,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "22236:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "22235:26:1"
+ },
+ "scope": 3230,
+ "src": "22161:151:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1461,
+ "nodeType": "Block",
+ "src": "22796:116:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1444,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "22814:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 1446,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1445,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1433,
+ "src": "22821:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22814:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 1448,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1447,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1435,
+ "src": "22829:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22814:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1449,
+ "name": "vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 494,
+ "src": "22840:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 1451,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1450,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1433,
+ "src": "22850:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22840:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 1453,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1452,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1435,
+ "src": "22858:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22840:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1454,
+ "name": "vaultLatestUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 501,
+ "src": "22869:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 1456,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1455,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1433,
+ "src": "22887:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22869:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 1458,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1457,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1435,
+ "src": "22895:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "22869:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 1459,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "22813:92:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_storage_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault storage ref,uint256,uint256)"
+ }
+ },
+ "functionReturnParameters": 1443,
+ "id": 1460,
+ "nodeType": "Return",
+ "src": "22806:99:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1431,
+ "nodeType": "StructuredDocumentation",
+ "src": "22318:271:1",
+ "text": " @notice return a specific vault\n @param _owner account owner\n @param _vaultId vault id of vault to return\n @return Vault struct that corresponds to the _vaultId of _owner, vault type and the latest timestamp when the vault was updated"
+ },
+ "functionSelector": "9daafbe8",
+ "id": 1462,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getVaultWithDetails",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1436,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1433,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1462,
+ "src": "22623:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1432,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "22623:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1435,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1462,
+ "src": "22639:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1434,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "22639:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "22622:34:1"
+ },
+ "returnParameters": {
+ "id": 1443,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1438,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1462,
+ "src": "22715:24:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1437,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "22715:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1440,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1462,
+ "src": "22753:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1439,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "22753:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1442,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1462,
+ "src": "22774:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1441,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "22774:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "22701:90:1"
+ },
+ "scope": 3230,
+ "src": "22594:318:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1474,
+ "nodeType": "Block",
+ "src": "23126:40:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1470,
+ "name": "nakedCap",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 506,
+ "src": "23143:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 1472,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1471,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1465,
+ "src": "23152:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "23143:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1469,
+ "id": 1473,
+ "nodeType": "Return",
+ "src": "23136:23:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1463,
+ "nodeType": "StructuredDocumentation",
+ "src": "22918:134:1",
+ "text": " @notice get cap amount for collateral asset\n @param _asset collateral asset address\n @return cap amount"
+ },
+ "functionSelector": "c644d3a2",
+ "id": 1475,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getNakedCap",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1466,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1465,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1475,
+ "src": "23078:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1464,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "23078:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "23077:16:1"
+ },
+ "returnParameters": {
+ "id": 1469,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1468,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1475,
+ "src": "23117:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1467,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "23117:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "23116:9:1"
+ },
+ "scope": 3230,
+ "src": "23057:109:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1487,
+ "nodeType": "Block",
+ "src": "23422:48:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1483,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "23439:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 1485,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1484,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1478,
+ "src": "23456:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "23439:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1482,
+ "id": 1486,
+ "nodeType": "Return",
+ "src": "23432:31:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1476,
+ "nodeType": "StructuredDocumentation",
+ "src": "23172:168:1",
+ "text": " @notice get amount of collateral deposited in all naked margin vaults\n @param _asset collateral asset address\n @return naked pool balance"
+ },
+ "functionSelector": "d66dd43e",
+ "id": 1488,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getNakedPoolBalance",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1479,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1478,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1488,
+ "src": "23374:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1477,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "23374:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "23373:16:1"
+ },
+ "returnParameters": {
+ "id": 1482,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1481,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1488,
+ "src": "23413:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1480,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "23413:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "23412:9:1"
+ },
+ "scope": 3230,
+ "src": "23345:125:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 1759,
+ "nodeType": "Block",
+ "src": "24175:2731:1",
+ "statements": [
+ {
+ "assignments": [
+ 1502
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1502,
+ "mutability": "mutable",
+ "name": "vaultOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1759,
+ "src": "24185:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1501,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "24185:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1503,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24185:18:1"
+ },
+ {
+ "assignments": [
+ 1505
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1505,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1759,
+ "src": "24213:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1504,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "24213:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1506,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24213:15:1"
+ },
+ {
+ "assignments": [
+ 1508
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1508,
+ "mutability": "mutable",
+ "name": "vaultUpdated",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1759,
+ "src": "24238:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1507,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "24238:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1509,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24238:17:1"
+ },
+ {
+ "body": {
+ "id": 1752,
+ "nodeType": "Block",
+ "src": "24312:2535:1",
+ "statements": [
+ {
+ "assignments": [
+ 1524
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1524,
+ "mutability": "mutable",
+ "name": "action",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1752,
+ "src": "24326:32:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1523,
+ "name": "Actions.ActionArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9969,
+ "src": "24326:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_storage_ptr",
+ "typeString": "struct Actions.ActionArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1528,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1525,
+ "name": "_actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1492,
+ "src": "24361:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory[] memory"
+ }
+ },
+ "id": 1527,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1526,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1511,
+ "src": "24370:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "24361:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24326:46:1"
+ },
+ {
+ "assignments": [
+ 1532
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1532,
+ "mutability": "mutable",
+ "name": "actionType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1752,
+ "src": "24386:29:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1531,
+ "name": "Actions.ActionType",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9952,
+ "src": "24386:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1535,
+ "initialValue": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1533,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "24418:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ },
+ "id": 1534,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "actionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9954,
+ "src": "24418:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24386:49:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 1562,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 1555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 1548,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1540,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1536,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "24628:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1537,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "24642:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1538,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "24642:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1539,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "SettleVault",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "24642:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "24628:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 1541,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "24627:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1546,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1542,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "24694:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1543,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "24708:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1544,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "24708:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1545,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "Redeem",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "24708:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "24694:39:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 1547,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "24693:41:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "24627:107:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1553,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1549,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "24755:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1550,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "24769:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1551,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "24769:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1552,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "Liquidate",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "24769:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "24755:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 1554,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "24754:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "24627:171:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1560,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1556,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "24819:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1557,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "24833:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1558,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "24833:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1559,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "Call",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "24833:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "24819:37:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 1561,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "24818:39:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "24627:230:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 1597,
+ "nodeType": "IfStatement",
+ "src": "24606:713:1",
+ "trueBody": {
+ "id": 1596,
+ "nodeType": "Block",
+ "src": "24872:447:1",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 1563,
+ "name": "vaultUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1508,
+ "src": "25023:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 1581,
+ "nodeType": "IfStatement",
+ "src": "25019:164:1",
+ "trueBody": {
+ "id": 1580,
+ "nodeType": "Block",
+ "src": "25037:146:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1568,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1565,
+ "name": "vaultOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1502,
+ "src": "25067:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1566,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25081:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ },
+ "id": 1567,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9956,
+ "src": "25081:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "25067:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433132",
+ "id": 1569,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "25095:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_880a31444eba2014d94c20efe80912bff3d7207fb57aac0331ab79218a53686d",
+ "typeString": "literal_string \"C12\""
+ },
+ "value": "C12"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_880a31444eba2014d94c20efe80912bff3d7207fb57aac0331ab79218a53686d",
+ "typeString": "literal_string \"C12\""
+ }
+ ],
+ "id": 1564,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "25059:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1570,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25059:42:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1571,
+ "nodeType": "ExpressionStatement",
+ "src": "25059:42:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1576,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1573,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1505,
+ "src": "25131:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1574,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25142:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ },
+ "id": 1575,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9962,
+ "src": "25142:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "25131:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433133",
+ "id": 1577,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "25158:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_38310d758d11a04c32f3336971733c73340099c314f002d52dd79774630737d6",
+ "typeString": "literal_string \"C13\""
+ },
+ "value": "C13"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_38310d758d11a04c32f3336971733c73340099c314f002d52dd79774630737d6",
+ "typeString": "literal_string \"C13\""
+ }
+ ],
+ "id": 1572,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "25123:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1578,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25123:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1579,
+ "nodeType": "ExpressionStatement",
+ "src": "25123:41:1"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1584,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 1582,
+ "name": "vaultUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1508,
+ "src": "25200:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 1583,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "25215:4:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "src": "25200:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1585,
+ "nodeType": "ExpressionStatement",
+ "src": "25200:19:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1589,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 1586,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1505,
+ "src": "25237:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1587,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25247:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ },
+ "id": 1588,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9962,
+ "src": "25247:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "25237:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1590,
+ "nodeType": "ExpressionStatement",
+ "src": "25237:24:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1594,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 1591,
+ "name": "vaultOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1502,
+ "src": "25279:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1592,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25292:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ },
+ "id": 1593,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9956,
+ "src": "25292:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "25279:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1595,
+ "nodeType": "ExpressionStatement",
+ "src": "25279:25:1"
+ }
+ ]
+ }
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1602,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1598,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "25337:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1599,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25351:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1600,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "25351:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1601,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "OpenVault",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "25351:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "25337:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1615,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1611,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "25471:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1612,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25485:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1613,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "25485:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1614,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "DepositLongOption",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "25485:36:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "25471:50:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1628,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1624,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "25613:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1625,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25627:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1626,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "25627:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1627,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "WithdrawLongOption",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "25627:37:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "25613:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1641,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1637,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "25758:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1638,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25772:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1639,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "25772:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1640,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "DepositCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "25772:36:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "25758:50:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1654,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1650,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "25906:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1651,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25920:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1652,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "25920:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1653,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "WithdrawCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "25920:37:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "25906:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1667,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1663,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "26057:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1664,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26071:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1665,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "26071:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "MintShortOption",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "26071:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "26057:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1680,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1676,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "26193:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1677,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26207:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1678,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "26207:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1679,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "BurnShortOption",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "26207:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "26193:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1693,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1689,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "26329:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1690,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26343:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1691,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "26343:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1692,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "Redeem",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "26343:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "26329:39:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1706,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1702,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "26454:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1703,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26468:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1704,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "26468:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1705,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "SettleVault",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "26468:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "26454:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1719,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1715,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "26594:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1716,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26608:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "26608:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1718,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "Liquidate",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "26608:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "26594:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ },
+ "id": 1732,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1728,
+ "name": "actionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1532,
+ "src": "26728:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1729,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26742:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1730,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ActionType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9952,
+ "src": "26742:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_enum$_ActionType_$9952_$",
+ "typeString": "type(enum Actions.ActionType)"
+ }
+ },
+ "id": 1731,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "Call",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "26742:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_enum$_ActionType_$9952",
+ "typeString": "enum Actions.ActionType"
+ }
+ },
+ "src": "26728:37:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 1741,
+ "nodeType": "IfStatement",
+ "src": "26724:113:1",
+ "trueBody": {
+ "id": 1740,
+ "nodeType": "Block",
+ "src": "26767:70:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1736,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26814:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1734,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26791:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1735,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseCallArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10520,
+ "src": "26791:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_CallArgs_$10058_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.CallArgs memory)"
+ }
+ },
+ "id": 1737,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26791:30:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ ],
+ "id": 1733,
+ "name": "_call",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2982,
+ "src": "26785:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_CallArgs_$10058_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.CallArgs memory)"
+ }
+ },
+ "id": 1738,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26785:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1739,
+ "nodeType": "ExpressionStatement",
+ "src": "26785:37:1"
+ }
+ ]
+ }
+ },
+ "id": 1742,
+ "nodeType": "IfStatement",
+ "src": "26590:247:1",
+ "trueBody": {
+ "id": 1727,
+ "nodeType": "Block",
+ "src": "26638:80:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1723,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26695:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1721,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26667:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1722,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseLiquidateArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10484,
+ "src": "26667:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_LiquidateArgs_$10053_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.LiquidateArgs memory)"
+ }
+ },
+ "id": 1724,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26667:35:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ ],
+ "id": 1720,
+ "name": "_liquidate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2949,
+ "src": "26656:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_LiquidateArgs_$10053_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.LiquidateArgs memory)"
+ }
+ },
+ "id": 1725,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26656:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1726,
+ "nodeType": "ExpressionStatement",
+ "src": "26656:47:1"
+ }
+ ]
+ }
+ },
+ "id": 1743,
+ "nodeType": "IfStatement",
+ "src": "26450:387:1",
+ "trueBody": {
+ "id": 1714,
+ "nodeType": "Block",
+ "src": "26500:84:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1710,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26561:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1708,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26531:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1709,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseSettleVaultArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10413,
+ "src": "26531:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_SettleVaultArgs_$10042_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.SettleVaultArgs memory)"
+ }
+ },
+ "id": 1711,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26531:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ ],
+ "id": 1707,
+ "name": "_settleVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2778,
+ "src": "26518:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SettleVaultArgs_$10042_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.SettleVaultArgs memory)"
+ }
+ },
+ "id": 1712,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26518:51:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1713,
+ "nodeType": "ExpressionStatement",
+ "src": "26518:51:1"
+ }
+ ]
+ }
+ },
+ "id": 1744,
+ "nodeType": "IfStatement",
+ "src": "26325:512:1",
+ "trueBody": {
+ "id": 1701,
+ "nodeType": "Block",
+ "src": "26370:74:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1697,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26421:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1695,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26396:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1696,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseRedeemArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10364,
+ "src": "26396:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_RedeemArgs_$10022_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.RedeemArgs memory)"
+ }
+ },
+ "id": 1698,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26396:32:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ ],
+ "id": 1694,
+ "name": "_redeem",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2571,
+ "src": "26388:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RedeemArgs_$10022_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.RedeemArgs memory)"
+ }
+ },
+ "id": 1699,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26388:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1700,
+ "nodeType": "ExpressionStatement",
+ "src": "26388:41:1"
+ }
+ ]
+ }
+ },
+ "id": 1745,
+ "nodeType": "IfStatement",
+ "src": "26189:648:1",
+ "trueBody": {
+ "id": 1688,
+ "nodeType": "Block",
+ "src": "26243:76:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1684,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26296:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1682,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26273:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseBurnArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10211,
+ "src": "26273:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_BurnArgs_$9995_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.BurnArgs memory)"
+ }
+ },
+ "id": 1685,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26273:30:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ ],
+ "id": 1681,
+ "name": "_burnOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2476,
+ "src": "26261:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_BurnArgs_$9995_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.BurnArgs memory)"
+ }
+ },
+ "id": 1686,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26261:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1687,
+ "nodeType": "ExpressionStatement",
+ "src": "26261:43:1"
+ }
+ ]
+ }
+ },
+ "id": 1746,
+ "nodeType": "IfStatement",
+ "src": "26053:784:1",
+ "trueBody": {
+ "id": 1675,
+ "nodeType": "Block",
+ "src": "26107:76:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1671,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26160:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1669,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "26137:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1670,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseMintArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10167,
+ "src": "26137:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_MintArgs_$9982_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.MintArgs memory)"
+ }
+ },
+ "id": 1672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26137:30:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ ],
+ "id": 1668,
+ "name": "_mintOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2380,
+ "src": "26125:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_MintArgs_$9982_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.MintArgs memory)"
+ }
+ },
+ "id": 1673,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26125:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1674,
+ "nodeType": "ExpressionStatement",
+ "src": "26125:43:1"
+ }
+ ]
+ }
+ },
+ "id": 1747,
+ "nodeType": "IfStatement",
+ "src": "25902:935:1",
+ "trueBody": {
+ "id": 1662,
+ "nodeType": "Block",
+ "src": "25959:88:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1658,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "26024:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1656,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25997:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1657,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseWithdrawArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10326,
+ "src": "25997:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_WithdrawArgs_$10035_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.WithdrawArgs memory)"
+ }
+ },
+ "id": 1659,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25997:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ ],
+ "id": 1655,
+ "name": "_withdrawCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2292,
+ "src": "25977:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_WithdrawArgs_$10035_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.WithdrawArgs memory)"
+ }
+ },
+ "id": 1660,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25977:55:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1661,
+ "nodeType": "ExpressionStatement",
+ "src": "25977:55:1"
+ }
+ ]
+ }
+ },
+ "id": 1748,
+ "nodeType": "IfStatement",
+ "src": "25754:1083:1",
+ "trueBody": {
+ "id": 1649,
+ "nodeType": "Block",
+ "src": "25810:86:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1645,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25873:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1643,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25847:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1644,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseDepositArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10263,
+ "src": "25847:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_DepositArgs_$10015_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.DepositArgs memory)"
+ }
+ },
+ "id": 1646,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25847:33:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ ],
+ "id": 1642,
+ "name": "_depositCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2171,
+ "src": "25828:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DepositArgs_$10015_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.DepositArgs memory)"
+ }
+ },
+ "id": 1647,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25828:53:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1648,
+ "nodeType": "ExpressionStatement",
+ "src": "25828:53:1"
+ }
+ ]
+ }
+ },
+ "id": 1749,
+ "nodeType": "IfStatement",
+ "src": "25609:1228:1",
+ "trueBody": {
+ "id": 1636,
+ "nodeType": "Block",
+ "src": "25666:82:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1632,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25725:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1630,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25698:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1631,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseWithdrawArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10326,
+ "src": "25698:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_WithdrawArgs_$10035_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.WithdrawArgs memory)"
+ }
+ },
+ "id": 1633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25698:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ ],
+ "id": 1629,
+ "name": "_withdrawLong",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2039,
+ "src": "25684:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_WithdrawArgs_$10035_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.WithdrawArgs memory)"
+ }
+ },
+ "id": 1634,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25684:49:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1635,
+ "nodeType": "ExpressionStatement",
+ "src": "25684:49:1"
+ }
+ ]
+ }
+ },
+ "id": 1750,
+ "nodeType": "IfStatement",
+ "src": "25467:1370:1",
+ "trueBody": {
+ "id": 1623,
+ "nodeType": "Block",
+ "src": "25523:80:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1619,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25580:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1617,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25554:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1618,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseDepositArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10263,
+ "src": "25554:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_DepositArgs_$10015_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.DepositArgs memory)"
+ }
+ },
+ "id": 1620,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25554:33:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ ],
+ "id": 1616,
+ "name": "_depositLong",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1958,
+ "src": "25541:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DepositArgs_$10015_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.DepositArgs memory)"
+ }
+ },
+ "id": 1621,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25541:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1622,
+ "nodeType": "ExpressionStatement",
+ "src": "25541:47:1"
+ }
+ ]
+ }
+ },
+ "id": 1751,
+ "nodeType": "IfStatement",
+ "src": "25333:1504:1",
+ "trueBody": {
+ "id": 1610,
+ "nodeType": "Block",
+ "src": "25381:80:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1606,
+ "name": "action",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1524,
+ "src": "25438:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1604,
+ "name": "Actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10521,
+ "src": "25410:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Actions_$10521_$",
+ "typeString": "type(library Actions)"
+ }
+ },
+ "id": 1605,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_parseOpenVaultArgs",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10123,
+ "src": "25410:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_ActionArgs_$9969_memory_ptr_$returns$_t_struct$_OpenVaultArgs_$10002_memory_ptr_$",
+ "typeString": "function (struct Actions.ActionArgs memory) pure returns (struct Actions.OpenVaultArgs memory)"
+ }
+ },
+ "id": 1607,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25410:35:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ ],
+ "id": 1603,
+ "name": "_openVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1851,
+ "src": "25399:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpenVaultArgs_$10002_memory_ptr_$returns$__$",
+ "typeString": "function (struct Actions.OpenVaultArgs memory)"
+ }
+ },
+ "id": 1608,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25399:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1609,
+ "nodeType": "ExpressionStatement",
+ "src": "25399:47:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1517,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1514,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1511,
+ "src": "24286:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1515,
+ "name": "_actions",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1492,
+ "src": "24290:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr",
+ "typeString": "struct Actions.ActionArgs memory[] memory"
+ }
+ },
+ "id": 1516,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "24290:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "24286:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1753,
+ "initializationExpression": {
+ "assignments": [
+ 1511
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1511,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1753,
+ "src": "24271:9:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1510,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "24271:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1513,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 1512,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "24283:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24271:13:1"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1519,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "24307:3:1",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 1518,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1511,
+ "src": "24307:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1520,
+ "nodeType": "ExpressionStatement",
+ "src": "24307:3:1"
+ },
+ "nodeType": "ForStatement",
+ "src": "24266:2581:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 1754,
+ "name": "vaultUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1508,
+ "src": "26865:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1755,
+ "name": "vaultOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1502,
+ "src": "26879:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1756,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1505,
+ "src": "26891:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 1757,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "26864:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(bool,address,uint256)"
+ }
+ },
+ "functionReturnParameters": 1500,
+ "id": 1758,
+ "nodeType": "Return",
+ "src": "26857:42:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1489,
+ "nodeType": "StructuredDocumentation",
+ "src": "23476:527:1",
+ "text": " @notice execute a variety of actions\n @dev for each action in the action array, execute the corresponding action, only one vault can be modified\n for all actions except SettleVault, Redeem, and Call\n @param _actions array of type Actions.ActionArgs[], which expresses which actions the user wants to execute\n @return vaultUpdated, indicates if a vault has changed\n @return owner, the vault owner if a vault has changed\n @return vaultId, the vault Id if a vault has changed"
+ },
+ "id": 1760,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_runActions",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1493,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1492,
+ "mutability": "mutable",
+ "name": "_actions",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1760,
+ "src": "24029:36:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_memory_ptr_$dyn_memory_ptr",
+ "typeString": "struct Actions.ActionArgs[]"
+ },
+ "typeName": {
+ "baseType": {
+ "contractScope": null,
+ "id": 1490,
+ "name": "Actions.ActionArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9969,
+ "src": "24029:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ActionArgs_$9969_storage_ptr",
+ "typeString": "struct Actions.ActionArgs"
+ }
+ },
+ "id": 1491,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "24029:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_struct$_ActionArgs_$9969_storage_$dyn_storage_ptr",
+ "typeString": "struct Actions.ActionArgs[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "24028:38:1"
+ },
+ "returnParameters": {
+ "id": 1500,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1495,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1760,
+ "src": "24114:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1494,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "24114:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1497,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1760,
+ "src": "24132:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1496,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "24132:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1499,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1760,
+ "src": "24153:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1498,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "24153:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "24100:70:1"
+ },
+ "scope": 3230,
+ "src": "24008:2898:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1792,
+ "nodeType": "Block",
+ "src": "27169:231:1",
+ "statements": [
+ {
+ "assignments": [
+ 1771,
+ 1773,
+ null
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1771,
+ "mutability": "mutable",
+ "name": "vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1792,
+ "src": "27180:30:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1770,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "27180:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1773,
+ "mutability": "mutable",
+ "name": "typeVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1792,
+ "src": "27212:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1772,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "27212:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 1778,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1775,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1763,
+ "src": "27255:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1776,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1765,
+ "src": "27263:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1774,
+ "name": "getVaultWithDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1462,
+ "src": "27235:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "id": 1777,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27235:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "27179:93:1"
+ },
+ {
+ "assignments": [
+ null,
+ 1780
+ ],
+ "declarations": [
+ null,
+ {
+ "constant": false,
+ "id": 1780,
+ "mutability": "mutable",
+ "name": "isValidVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1792,
+ "src": "27285:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1779,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "27285:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1786,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1783,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1771,
+ "src": "27337:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1784,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1773,
+ "src": "27344:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1781,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "27306:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "id": 1782,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getExcessCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9410,
+ "src": "27306:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_bool_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256) view external returns (uint256,bool)"
+ }
+ },
+ "id": 1785,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27306:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "27282:72:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 1788,
+ "name": "isValidVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1780,
+ "src": "27373:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433134",
+ "id": 1789,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "27387:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0a03758fc9f451b8b2c5f1802598447a452e1d00ed129b5f2c4eeec7c343064a",
+ "typeString": "literal_string \"C14\""
+ },
+ "value": "C14"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_0a03758fc9f451b8b2c5f1802598447a452e1d00ed129b5f2c4eeec7c343064a",
+ "typeString": "literal_string \"C14\""
+ }
+ ],
+ "id": 1787,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "27365:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1790,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27365:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1791,
+ "nodeType": "ExpressionStatement",
+ "src": "27365:28:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1761,
+ "nodeType": "StructuredDocumentation",
+ "src": "26912:177:1",
+ "text": " @notice verify the vault final state after executing all actions\n @param _owner account owner address\n @param _vaultId vault id of the final vault"
+ },
+ "id": 1793,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_verifyFinalState",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1766,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1763,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1793,
+ "src": "27121:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1762,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "27121:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1765,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1793,
+ "src": "27137:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1764,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "27137:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "27120:34:1"
+ },
+ "returnParameters": {
+ "id": 1767,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "27169:0:1"
+ },
+ "scope": 3230,
+ "src": "27094:306:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1850,
+ "nodeType": "Block",
+ "src": "27796:330:1",
+ "statements": [
+ {
+ "assignments": [
+ 1808
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1808,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1850,
+ "src": "27806:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1807,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "27806:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1816,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 1814,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "27861:1:1",
+ "subdenomination": null,
+ "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"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1809,
+ "name": "accountVaultCounter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 473,
+ "src": "27824:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 1812,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1810,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "27844:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1811,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9997,
+ "src": "27844:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "27824:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1813,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "27824:36:1",
+ "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": 1815,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27824:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "27806:57:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1821,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1818,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "27882:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1819,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9999,
+ "src": "27882:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 1820,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1808,
+ "src": "27899:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "27882:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433135",
+ "id": 1822,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "27908:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_875d342a4a0fa0f8d5a09ecc0331aa8a9868cdf8d5ff5a4d1ffde433c15b38f5",
+ "typeString": "literal_string \"C15\""
+ },
+ "value": "C15"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_875d342a4a0fa0f8d5a09ecc0331aa8a9868cdf8d5ff5a4d1ffde433c15b38f5",
+ "typeString": "literal_string \"C15\""
+ }
+ ],
+ "id": 1817,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "27874:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1823,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27874:40:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1824,
+ "nodeType": "ExpressionStatement",
+ "src": "27874:40:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1830,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1825,
+ "name": "accountVaultCounter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 473,
+ "src": "27952:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 1828,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1826,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "27972:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1827,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9997,
+ "src": "27972:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "27952:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 1829,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1808,
+ "src": "27987:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "27952:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1831,
+ "nodeType": "ExpressionStatement",
+ "src": "27952:42:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 1840,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1832,
+ "name": "vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 494,
+ "src": "28004:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(address => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 1836,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1833,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "28014:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1834,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9997,
+ "src": "28014:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "28004:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 1837,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 1835,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1808,
+ "src": "28027:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "28004:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1838,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "28038:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1839,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10001,
+ "src": "28038:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "28004:49:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1841,
+ "nodeType": "ExpressionStatement",
+ "src": "28004:49:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1843,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "28081:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1844,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9997,
+ "src": "28081:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 1845,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1808,
+ "src": "28094:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1846,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "28103:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1847,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10001,
+ "src": "28103:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1842,
+ "name": "VaultOpened",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 529,
+ "src": "28069:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256,uint256)"
+ }
+ },
+ "id": 1848,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28069:50:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1849,
+ "nodeType": "EmitStatement",
+ "src": "28064:55:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1794,
+ "nodeType": "StructuredDocumentation",
+ "src": "27406:233:1",
+ "text": " @notice open a new vault inside an account\n @dev only the account owner or operator can open a vault, cannot be called when system is partiallyPaused or fullyPaused\n @param _args OpenVaultArgs structure"
+ },
+ "id": 1851,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1799,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1798,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "27725:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "27725:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1801,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "27767:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1802,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "27767:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1803,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1796,
+ "src": "27779:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs memory"
+ }
+ },
+ "id": 1804,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9997,
+ "src": "27779:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 1805,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1800,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "27752:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "27752:39:1"
+ }
+ ],
+ "name": "_openVault",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1797,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1796,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1851,
+ "src": "27664:34:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_memory_ptr",
+ "typeString": "struct Actions.OpenVaultArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1795,
+ "name": "Actions.OpenVaultArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10002,
+ "src": "27664:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OpenVaultArgs_$10002_storage_ptr",
+ "typeString": "struct Actions.OpenVaultArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "27663:36:1"
+ },
+ "returnParameters": {
+ "id": 1806,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "27796:0:1"
+ },
+ "scope": 3230,
+ "src": "27644:482:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1957,
+ "nodeType": "Block",
+ "src": "28529:686:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1867,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28561:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1868,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "28561:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1869,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28574:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1870,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "28574:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1866,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "28547:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 1871,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28547:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 1872,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "28590:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 1865,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "28539:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1873,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28539:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1874,
+ "nodeType": "ExpressionStatement",
+ "src": "28539:57:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 1888,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1880,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1876,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28690:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1877,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "28690:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1878,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "28704:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1879,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "28704:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "28690:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 1881,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "28689:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1886,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1882,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28720:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1883,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "28720:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1884,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28734:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1885,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "28734:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "28720:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 1887,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "28719:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "28689:57:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433136",
+ "id": 1889,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "28748:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_2ceaf8b36992a3033003bbbd5c76d7b26b697a887f38b59ad660dfd94558003d",
+ "typeString": "literal_string \"C16\""
+ },
+ "value": "C16"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_2ceaf8b36992a3033003bbbd5c76d7b26b697a887f38b59ad660dfd94558003d",
+ "typeString": "literal_string \"C16\""
+ }
+ ],
+ "id": 1875,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "28681:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1890,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28681:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1891,
+ "nodeType": "ExpressionStatement",
+ "src": "28681:73:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1895,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28803:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1896,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "28803:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1893,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "28773:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 1894,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isWhitelistedOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9782,
+ "src": "28773:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view external returns (bool)"
+ }
+ },
+ "id": 1897,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28773:42:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433137",
+ "id": 1898,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "28817:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_e934b39f5e7964c847a08933927cb720b7668d28f0ec950e25808f980de1170c",
+ "typeString": "literal_string \"C17\""
+ },
+ "value": "C17"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_e934b39f5e7964c847a08933927cb720b7668d28f0ec950e25808f980de1170c",
+ "typeString": "literal_string \"C17\""
+ }
+ ],
+ "id": 1892,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "28765:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1899,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28765:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1900,
+ "nodeType": "ExpressionStatement",
+ "src": "28765:58:1"
+ },
+ {
+ "assignments": [
+ 1902
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1902,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1957,
+ "src": "28834:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1901,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "28834:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1907,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1904,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28875:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1905,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "28875:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1903,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "28859:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 1906,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28859:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "28834:53:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1913,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1909,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "28906:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1910,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1902,
+ "src": "28912:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 1911,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "28912:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 1912,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28912:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "28906:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433138",
+ "id": 1914,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "28938:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5d52c5479b976857f3e393183405b3e7bbd6b0c0a993a93e64d0b52b44c0f039",
+ "typeString": "literal_string \"C18\""
+ },
+ "value": "C18"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5d52c5479b976857f3e393183405b3e7bbd6b0c0a993a93e64d0b52b44c0f039",
+ "typeString": "literal_string \"C18\""
+ }
+ ],
+ "id": 1908,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "28898:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1915,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28898:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1916,
+ "nodeType": "ExpressionStatement",
+ "src": "28898:46:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1925,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28998:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1926,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "28998:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1927,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29011:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1928,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "29011:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1929,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29025:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1930,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "index",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10012,
+ "src": "29025:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1917,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "28955:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 1922,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1918,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28962:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1919,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "28962:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "28955:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 1923,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1920,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28975:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1921,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "28975:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "28955:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 1924,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "addLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11274,
+ "src": "28955:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 1931,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28955:82:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1932,
+ "nodeType": "ExpressionStatement",
+ "src": "28955:82:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1936,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29068:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1937,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "29068:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1938,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29081:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1939,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "29081:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1940,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29093:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1941,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "29093:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1933,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "29048:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 1935,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToPool",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9470,
+ "src": "29048:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 1942,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29048:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1943,
+ "nodeType": "ExpressionStatement",
+ "src": "29048:58:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1945,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29142:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1946,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "29142:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1947,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29155:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1948,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "29155:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1949,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29168:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1950,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "29168:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1951,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29180:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1952,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "29180:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1953,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "29195:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1954,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "29195:12:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1944,
+ "name": "LongOtokenDeposited",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 542,
+ "src": "29122:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 1955,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29122:86:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1956,
+ "nodeType": "EmitStatement",
+ "src": "29117:91:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1852,
+ "nodeType": "StructuredDocumentation",
+ "src": "28132:240:1",
+ "text": " @notice deposit a long oToken into a vault\n @dev only the account owner or operator can deposit a long oToken, cannot be called when system is partiallyPaused or fullyPaused\n @param _args DepositArgs structure"
+ },
+ "id": 1958,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1857,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1856,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "28458:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "28458:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1859,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "28500:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1860,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "28500:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1861,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1854,
+ "src": "28512:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 1862,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "28512:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 1863,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1858,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "28485:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "28485:39:1"
+ }
+ ],
+ "name": "_depositLong",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1855,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1854,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 1958,
+ "src": "28399:32:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1853,
+ "name": "Actions.DepositArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10015,
+ "src": "28399:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_storage_ptr",
+ "typeString": "struct Actions.DepositArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "28398:34:1"
+ },
+ "returnParameters": {
+ "id": 1864,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "28529:0:1"
+ },
+ "scope": 3230,
+ "src": "28377:838:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2038,
+ "nodeType": "Block",
+ "src": "29623:459:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1974,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29655:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 1975,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "29655:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1976,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29668:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 1977,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "29668:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1973,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "29641:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 1978,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29641:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 1979,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "29684:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 1972,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "29633:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1980,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29633:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1981,
+ "nodeType": "ExpressionStatement",
+ "src": "29633:57:1"
+ },
+ {
+ "assignments": [
+ 1983
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1983,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2038,
+ "src": "29701:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1982,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "29701:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 1988,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1985,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29742:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 1986,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "29742:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1984,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "29726:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 1987,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29726:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "29701:53:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1994,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 1990,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "29773:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 1991,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1983,
+ "src": "29779:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 1992,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "29779:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 1993,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29779:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "29773:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433139",
+ "id": 1995,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "29805:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d4317bf07dc0401965f49c440c1e6433263589c25695bb0d5798fb634a8e0bd4",
+ "typeString": "literal_string \"C19\""
+ },
+ "value": "C19"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d4317bf07dc0401965f49c440c1e6433263589c25695bb0d5798fb634a8e0bd4",
+ "typeString": "literal_string \"C19\""
+ }
+ ],
+ "id": 1989,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "29765:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1996,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29765:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1997,
+ "nodeType": "ExpressionStatement",
+ "src": "29765:46:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2006,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29868:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2007,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "29868:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2008,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29881:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2009,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "29881:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2010,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29895:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2011,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "index",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10032,
+ "src": "29895:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 1998,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "29822:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2003,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1999,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29829:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2000,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "29829:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "29822:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2004,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2001,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29842:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2002,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "29842:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "29822:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2005,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "removeLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11335,
+ "src": "29822:45:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2012,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29822:85:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2013,
+ "nodeType": "ExpressionStatement",
+ "src": "29822:85:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2017,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29938:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2018,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "29938:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2019,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29951:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2020,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10028,
+ "src": "29951:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2021,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29961:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2022,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "29961:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2014,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "29918:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 2016,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToUser",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9479,
+ "src": "29918:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 2023,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29918:56:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2024,
+ "nodeType": "ExpressionStatement",
+ "src": "29918:56:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2026,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "30011:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2027,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "30011:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2028,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "30024:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2029,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "30024:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2030,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "30037:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2031,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10028,
+ "src": "30037:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2032,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "30047:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2033,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "30047:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2034,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "30062:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2035,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "30062:12:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2025,
+ "name": "LongOtokenWithdrawed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 555,
+ "src": "29990:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 2036,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29990:85:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2037,
+ "nodeType": "EmitStatement",
+ "src": "29985:90:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1959,
+ "nodeType": "StructuredDocumentation",
+ "src": "29221:243:1",
+ "text": " @notice withdraw a long oToken from a vault\n @dev only the account owner or operator can withdraw a long oToken, cannot be called when system is partiallyPaused or fullyPaused\n @param _args WithdrawArgs structure"
+ },
+ "id": 2039,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 1964,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1963,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "29552:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "29552:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1966,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "29594:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1967,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "29594:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 1968,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1961,
+ "src": "29606:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 1969,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "29606:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 1970,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 1965,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "29579:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "29579:39:1"
+ }
+ ],
+ "name": "_withdrawLong",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 1962,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1961,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2039,
+ "src": "29492:33:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 1960,
+ "name": "Actions.WithdrawArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10035,
+ "src": "29492:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_storage_ptr",
+ "typeString": "struct Actions.WithdrawArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "29491:35:1"
+ },
+ "returnParameters": {
+ "id": 1971,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "29623:0:1"
+ },
+ "scope": 3230,
+ "src": "29469:613:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2170,
+ "nodeType": "Block",
+ "src": "30493:882:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2055,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30525:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2056,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "30525:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2057,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30538:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2058,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "30538:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2054,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "30511:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2059,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30511:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 2060,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "30554:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 2053,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "30503:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2061,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30503:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2062,
+ "nodeType": "ExpressionStatement",
+ "src": "30503:57:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 2076,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 2068,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2064,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30653:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2065,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "30653:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2066,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "30667:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2067,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "30667:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "30653:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 2069,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "30652:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 2074,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2070,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30683:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2071,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "30683:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2072,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30697:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2073,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "30697:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "30683:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 2075,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "30682:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "30652:57:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433230",
+ "id": 2077,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "30711:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0d364037da3448d2adf9013994d244a7e660e86ca63bacd528f933cd9b3acd61",
+ "typeString": "literal_string \"C20\""
+ },
+ "value": "C20"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_0d364037da3448d2adf9013994d244a7e660e86ca63bacd528f933cd9b3acd61",
+ "typeString": "literal_string \"C20\""
+ }
+ ],
+ "id": 2063,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "30644:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2078,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30644:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2079,
+ "nodeType": "ExpressionStatement",
+ "src": "30644:73:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2083,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30770:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2084,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "30770:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2081,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "30736:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 2082,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isWhitelistedCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9775,
+ "src": "30736:33:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view external returns (bool)"
+ }
+ },
+ "id": 2085,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30736:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433231",
+ "id": 2086,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "30784:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_66482ae68b38ef45c1644f88617a18fc0d6a3da22d898a32ef977e8752764d5f",
+ "typeString": "literal_string \"C21\""
+ },
+ "value": "C21"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_66482ae68b38ef45c1644f88617a18fc0d6a3da22d898a32ef977e8752764d5f",
+ "typeString": "literal_string \"C21\""
+ }
+ ],
+ "id": 2080,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "30728:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2087,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30728:62:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2088,
+ "nodeType": "ExpressionStatement",
+ "src": "30728:62:1"
+ },
+ {
+ "assignments": [
+ null,
+ 2090,
+ null
+ ],
+ "declarations": [
+ null,
+ {
+ "constant": false,
+ "id": 2090,
+ "mutability": "mutable",
+ "name": "typeVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2170,
+ "src": "30804:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2089,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "30804:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 2097,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2092,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30847:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2093,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "30847:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2094,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30860:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2095,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "30860:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2091,
+ "name": "getVaultWithDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1462,
+ "src": "30827:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "id": 2096,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30827:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "30801:73:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2100,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2098,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2090,
+ "src": "30889:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 2099,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "30902:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "30889:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 2129,
+ "nodeType": "IfStatement",
+ "src": "30885:209:1",
+ "trueBody": {
+ "id": 2128,
+ "nodeType": "Block",
+ "src": "30905:189:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 2113,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2101,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "30919:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2104,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2102,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30936:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2103,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "30936:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "30919:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2110,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30985:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2111,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "30985:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2105,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "30951:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2108,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2106,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30968:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2107,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "30968:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "30951:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2109,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "30951:33:1",
+ "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": 2112,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30951:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "30919:79:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2114,
+ "nodeType": "ExpressionStatement",
+ "src": "30919:79:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2124,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2116,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "31021:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2119,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2117,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31038:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2118,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "31038:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "31021:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2120,
+ "name": "nakedCap",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 506,
+ "src": "31054:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2123,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2121,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31063:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2122,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "31063:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "31054:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "31021:54:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433337",
+ "id": 2125,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "31077:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9371d948ab97e3f8b5f3b4a6112e609b15f51186b4be6b6baa76f232e62d8175",
+ "typeString": "literal_string \"C37\""
+ },
+ "value": "C37"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9371d948ab97e3f8b5f3b4a6112e609b15f51186b4be6b6baa76f232e62d8175",
+ "typeString": "literal_string \"C37\""
+ }
+ ],
+ "id": 2115,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "31013:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2126,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31013:70:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2127,
+ "nodeType": "ExpressionStatement",
+ "src": "31013:70:1"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2138,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31153:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2139,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "31153:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2140,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31166:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2141,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "31166:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2142,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31180:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2143,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "index",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10012,
+ "src": "31180:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2130,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "31104:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2135,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2131,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31111:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2132,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "31111:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "31104:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2136,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2133,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31124:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2134,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "31124:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "31104:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2137,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "addCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11449,
+ "src": "31104:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2144,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31104:88:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2145,
+ "nodeType": "ExpressionStatement",
+ "src": "31104:88:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2149,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31223:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2150,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "31223:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2151,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31236:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2152,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "31236:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2153,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31248:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2154,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "31248:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2146,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "31203:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 2148,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToPool",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9470,
+ "src": "31203:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 2155,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31203:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2156,
+ "nodeType": "ExpressionStatement",
+ "src": "31203:58:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2158,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31302:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2159,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10010,
+ "src": "31302:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2160,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31315:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2161,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "31315:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2162,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31328:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2163,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10008,
+ "src": "31328:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2164,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31340:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2165,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10006,
+ "src": "31340:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2166,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "31355:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2167,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10014,
+ "src": "31355:12:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2157,
+ "name": "CollateralAssetDeposited",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 568,
+ "src": "31277:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 2168,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31277:91:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2169,
+ "nodeType": "EmitStatement",
+ "src": "31272:96:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2040,
+ "nodeType": "StructuredDocumentation",
+ "src": "30088:242:1",
+ "text": " @notice deposit a collateral asset into a vault\n @dev only the account owner or operator can deposit collateral, cannot be called when system is partiallyPaused or fullyPaused\n @param _args DepositArgs structure"
+ },
+ "id": 2171,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 2045,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2044,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "30422:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "30422:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2047,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "30464:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2048,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "30464:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2049,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2042,
+ "src": "30476:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs memory"
+ }
+ },
+ "id": 2050,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10004,
+ "src": "30476:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 2051,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2046,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "30449:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "30449:39:1"
+ }
+ ],
+ "name": "_depositCollateral",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2043,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2042,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2171,
+ "src": "30363:32:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_memory_ptr",
+ "typeString": "struct Actions.DepositArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2041,
+ "name": "Actions.DepositArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10015,
+ "src": "30363:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_DepositArgs_$10015_storage_ptr",
+ "typeString": "struct Actions.DepositArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "30362:34:1"
+ },
+ "returnParameters": {
+ "id": 2052,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "30493:0:1"
+ },
+ "scope": 3230,
+ "src": "30335:1040:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2291,
+ "nodeType": "Block",
+ "src": "31791:793:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2187,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "31823:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2188,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "31823:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2189,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "31836:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2190,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "31836:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2186,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "31809:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2191,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31809:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 2192,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "31852:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 2185,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "31801:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2193,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31801:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2194,
+ "nodeType": "ExpressionStatement",
+ "src": "31801:57:1"
+ },
+ {
+ "assignments": [
+ 2198,
+ 2200,
+ null
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2198,
+ "mutability": "mutable",
+ "name": "vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2291,
+ "src": "31870:30:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2197,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "31870:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2200,
+ "mutability": "mutable",
+ "name": "typeVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2291,
+ "src": "31902:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2199,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "31902:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 2207,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2202,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "31945:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2203,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "31945:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2204,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "31958:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2205,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "31958:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2201,
+ "name": "getVaultWithDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1462,
+ "src": "31925:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "id": 2206,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31925:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "31869:103:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2209,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2198,
+ "src": "31999:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2210,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "31999:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ ],
+ "id": 2208,
+ "name": "_isNotEmpty",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3031,
+ "src": "31987:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address[] memory) pure returns (bool)"
+ }
+ },
+ "id": 2211,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "31987:31:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 2231,
+ "nodeType": "IfStatement",
+ "src": "31983:186:1",
+ "trueBody": {
+ "id": 2230,
+ "nodeType": "Block",
+ "src": "32020:149:1",
+ "statements": [
+ {
+ "assignments": [
+ 2213
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2213,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2230,
+ "src": "32034:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2212,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "32034:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2220,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2215,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2198,
+ "src": "32075:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2216,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "32075:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2218,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2217,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "32094:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "32075:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2214,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "32059:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2219,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32059:38:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "32034:63:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2226,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2222,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "32120:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2223,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2213,
+ "src": "32126:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2224,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "32126:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 2225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32126:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "32120:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433232",
+ "id": 2227,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "32152:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a201b3203f536f1ebce3e7160667c53727b63db39bff89e34917b9b09ceae426",
+ "typeString": "literal_string \"C22\""
+ },
+ "value": "C22"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_a201b3203f536f1ebce3e7160667c53727b63db39bff89e34917b9b09ceae426",
+ "typeString": "literal_string \"C22\""
+ }
+ ],
+ "id": 2221,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "32112:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2228,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32112:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2229,
+ "nodeType": "ExpressionStatement",
+ "src": "32112:46:1"
+ }
+ ]
+ }
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2234,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2232,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2200,
+ "src": "32183:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 2233,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "32196:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "32183:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 2250,
+ "nodeType": "IfStatement",
+ "src": "32179:124:1",
+ "trueBody": {
+ "id": 2249,
+ "nodeType": "Block",
+ "src": "32199:104:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 2247,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2235,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "32213:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2238,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2236,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32230:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2237,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "32230:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "32213:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2244,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32279:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2245,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "32279:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2239,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "32245:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2242,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2240,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32262:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2241,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "32262:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "32245:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2243,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "32245:33:1",
+ "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": 2246,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32245:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "32213:79:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2248,
+ "nodeType": "ExpressionStatement",
+ "src": "32213:79:1"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2259,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32365:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2260,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "32365:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2261,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32378:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2262,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "32378:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2263,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32392:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2264,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "index",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10032,
+ "src": "32392:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2251,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "32313:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2256,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2252,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32320:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2253,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "32320:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "32313:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2257,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2254,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32333:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2255,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "32333:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "32313:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2258,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "removeCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11510,
+ "src": "32313:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2265,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32313:91:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2266,
+ "nodeType": "ExpressionStatement",
+ "src": "32313:91:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2270,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32435:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2271,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "32435:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2272,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32448:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2273,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10028,
+ "src": "32448:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2274,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32458:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2275,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "32458:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2267,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "32415:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 2269,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToUser",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9479,
+ "src": "32415:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 2276,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32415:56:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2277,
+ "nodeType": "ExpressionStatement",
+ "src": "32415:56:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2279,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32513:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2280,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "asset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10030,
+ "src": "32513:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2281,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32526:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2282,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "32526:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2283,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32539:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2284,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10028,
+ "src": "32539:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2285,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32549:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2286,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10026,
+ "src": "32549:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2287,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "32564:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2288,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10034,
+ "src": "32564:12:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2278,
+ "name": "CollateralAssetWithdrawed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 581,
+ "src": "32487:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 2289,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32487:90:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2290,
+ "nodeType": "EmitStatement",
+ "src": "32482:95:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2172,
+ "nodeType": "StructuredDocumentation",
+ "src": "31381:245:1",
+ "text": " @notice withdraw a collateral asset from a vault\n @dev only the account owner or operator can withdraw collateral, cannot be called when system is partiallyPaused or fullyPaused\n @param _args WithdrawArgs structure"
+ },
+ "id": 2292,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 2177,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2176,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "31720:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "31720:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2179,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "31762:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2180,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "31762:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2181,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2174,
+ "src": "31774:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs memory"
+ }
+ },
+ "id": 2182,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10024,
+ "src": "31774:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 2183,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2178,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "31747:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "31747:39:1"
+ }
+ ],
+ "name": "_withdrawCollateral",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2175,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2174,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2292,
+ "src": "31660:33:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_memory_ptr",
+ "typeString": "struct Actions.WithdrawArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2173,
+ "name": "Actions.WithdrawArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10035,
+ "src": "31660:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WithdrawArgs_$10035_storage_ptr",
+ "typeString": "struct Actions.WithdrawArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "31659:35:1"
+ },
+ "returnParameters": {
+ "id": 2184,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "31791:0:1"
+ },
+ "scope": 3230,
+ "src": "31631:953:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2379,
+ "nodeType": "Block",
+ "src": "33028:511:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2308,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33060:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2309,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9971,
+ "src": "33060:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2310,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33073:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2311,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9973,
+ "src": "33073:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2307,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "33046:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2312,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33046:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 2313,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "33089:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 2306,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "33038:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2314,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33038:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2315,
+ "nodeType": "ExpressionStatement",
+ "src": "33038:57:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2319,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33143:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2320,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9977,
+ "src": "33143:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2317,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "33113:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 2318,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isWhitelistedOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9782,
+ "src": "33113:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view external returns (bool)"
+ }
+ },
+ "id": 2321,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33113:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433233",
+ "id": 2322,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "33158:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_3ed4eb60a6f4b5c625a68d3bfc7e467eb68621ee41566e737bf63f6ae73f5b7c",
+ "typeString": "literal_string \"C23\""
+ },
+ "value": "C23"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_3ed4eb60a6f4b5c625a68d3bfc7e467eb68621ee41566e737bf63f6ae73f5b7c",
+ "typeString": "literal_string \"C23\""
+ }
+ ],
+ "id": 2316,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "33105:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2323,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33105:59:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2324,
+ "nodeType": "ExpressionStatement",
+ "src": "33105:59:1"
+ },
+ {
+ "assignments": [
+ 2326
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2326,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2379,
+ "src": "33175:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2325,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "33175:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2331,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2328,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33216:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2329,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9977,
+ "src": "33216:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2327,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "33200:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2330,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33200:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "33175:54:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2337,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2333,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "33248:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2334,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2326,
+ "src": "33254:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2335,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "33254:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 2336,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33254:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "33248:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433234",
+ "id": 2338,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "33280:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8d70e1d98647aab959e5cc858348d3867ba4e1782f41bcb2785eb3de050fcf1b",
+ "typeString": "literal_string \"C24\""
+ },
+ "value": "C24"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8d70e1d98647aab959e5cc858348d3867ba4e1782f41bcb2785eb3de050fcf1b",
+ "typeString": "literal_string \"C24\""
+ }
+ ],
+ "id": 2332,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "33240:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2339,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33240:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2340,
+ "nodeType": "ExpressionStatement",
+ "src": "33240:46:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2349,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33341:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2350,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9977,
+ "src": "33341:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2351,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33355:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2352,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9981,
+ "src": "33355:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2353,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33369:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2354,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "index",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9979,
+ "src": "33369:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2341,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "33297:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2346,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2342,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33304:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2343,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9971,
+ "src": "33304:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "33297:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2347,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2344,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33317:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2345,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9973,
+ "src": "33317:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "33297:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2348,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "addShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11099,
+ "src": "33297:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2355,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33297:84:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2356,
+ "nodeType": "ExpressionStatement",
+ "src": "33297:84:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2360,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33410:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2361,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9975,
+ "src": "33410:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2362,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33420:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2363,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9981,
+ "src": "33420:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2357,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2326,
+ "src": "33392:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2359,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mintOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9717,
+ "src": "33392:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) external"
+ }
+ },
+ "id": 2364,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33392:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2365,
+ "nodeType": "ExpressionStatement",
+ "src": "33392:41:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2367,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33467:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2368,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9977,
+ "src": "33467:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2369,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33481:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2370,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9971,
+ "src": "33481:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2371,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33494:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2372,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9975,
+ "src": "33494:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2373,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33504:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2374,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9973,
+ "src": "33504:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2375,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33519:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2376,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9981,
+ "src": "33519:12:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2366,
+ "name": "ShortOtokenMinted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 594,
+ "src": "33449:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 2377,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33449:83:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2378,
+ "nodeType": "EmitStatement",
+ "src": "33444:88:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2293,
+ "nodeType": "StructuredDocumentation",
+ "src": "32590:285:1",
+ "text": " @notice mint short oTokens from a vault which creates an obligation that is recorded in the vault\n @dev only the account owner or operator can mint an oToken, cannot be called when system is partiallyPaused or fullyPaused\n @param _args MintArgs structure"
+ },
+ "id": 2380,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 2298,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2297,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "32957:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "32957:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2300,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "32999:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2301,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "32999:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2302,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2295,
+ "src": "33011:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs memory"
+ }
+ },
+ "id": 2303,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9971,
+ "src": "33011:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 2304,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2299,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "32984:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "32984:39:1"
+ }
+ ],
+ "name": "_mintOtoken",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2296,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2295,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2380,
+ "src": "32901:29:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_memory_ptr",
+ "typeString": "struct Actions.MintArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2294,
+ "name": "Actions.MintArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9982,
+ "src": "32901:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_MintArgs_$9982_storage_ptr",
+ "typeString": "struct Actions.MintArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "32900:31:1"
+ },
+ "returnParameters": {
+ "id": 2305,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "33028:0:1"
+ },
+ "scope": 3230,
+ "src": "32880:659:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2475,
+ "nodeType": "Block",
+ "src": "33975:766:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2396,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34068:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2397,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9984,
+ "src": "34068:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2398,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34081:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2399,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9986,
+ "src": "34081:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2395,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "34054:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2400,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34054:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 2401,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34097:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 2394,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "34046:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2402,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34046:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2403,
+ "nodeType": "ExpressionStatement",
+ "src": "34046:57:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 2417,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 2409,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2405,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34189:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2406,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9988,
+ "src": "34189:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2407,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "34203:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2408,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "34203:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "34189:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 2410,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "34188:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 2415,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2411,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34219:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2412,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9988,
+ "src": "34219:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2413,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34233:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2414,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9984,
+ "src": "34233:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "34219:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 2416,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "34218:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "34188:57:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433235",
+ "id": 2418,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34247:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_3f9e37b167f8b94986dc5590aafdd6f722fc3ac96b6aa44e23a99ed6f6c9b44a",
+ "typeString": "literal_string \"C25\""
+ },
+ "value": "C25"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_3f9e37b167f8b94986dc5590aafdd6f722fc3ac96b6aa44e23a99ed6f6c9b44a",
+ "typeString": "literal_string \"C25\""
+ }
+ ],
+ "id": 2404,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "34180:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2419,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34180:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2420,
+ "nodeType": "ExpressionStatement",
+ "src": "34180:73:1"
+ },
+ {
+ "assignments": [
+ 2422
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2422,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2475,
+ "src": "34264:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2421,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "34264:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2427,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2424,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34305:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2425,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9990,
+ "src": "34305:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2423,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "34289:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2426,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34289:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "34264:54:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2433,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2429,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "34384:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2430,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2422,
+ "src": "34390:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2431,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "34390:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 2432,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34390:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "34384:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433236",
+ "id": 2434,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34416:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1cbedd4f008a446d5bfc68749546b00cdccea2df73c9e65743a9dccab34d2b94",
+ "typeString": "literal_string \"C26\""
+ },
+ "value": "C26"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1cbedd4f008a446d5bfc68749546b00cdccea2df73c9e65743a9dccab34d2b94",
+ "typeString": "literal_string \"C26\""
+ }
+ ],
+ "id": 2428,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "34376:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2435,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34376:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2436,
+ "nodeType": "ExpressionStatement",
+ "src": "34376:46:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2445,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34516:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2446,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9990,
+ "src": "34516:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2447,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34530:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2448,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9994,
+ "src": "34530:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2449,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34544:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2450,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "index",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9992,
+ "src": "34544:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2437,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "34469:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2442,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2438,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34476:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2439,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9984,
+ "src": "34476:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34469:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2443,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2440,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34489:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2441,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9986,
+ "src": "34489:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34469:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2444,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "removeShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11160,
+ "src": "34469:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2451,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34469:87:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2452,
+ "nodeType": "ExpressionStatement",
+ "src": "34469:87:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2456,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34608:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2457,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9988,
+ "src": "34608:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2458,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34620:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2459,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9994,
+ "src": "34620:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2453,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2422,
+ "src": "34590:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2455,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "burnOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9724,
+ "src": "34590:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) external"
+ }
+ },
+ "id": 2460,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34590:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2461,
+ "nodeType": "ExpressionStatement",
+ "src": "34590:43:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2463,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34667:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2464,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9990,
+ "src": "34667:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2465,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34681:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2466,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9984,
+ "src": "34681:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2467,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34694:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2468,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "from",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9988,
+ "src": "34694:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2469,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34706:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2470,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9986,
+ "src": "34706:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2471,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "34721:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2472,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9994,
+ "src": "34721:12:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2462,
+ "name": "ShortOtokenBurned",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 607,
+ "src": "34649:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 2473,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34649:85:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2474,
+ "nodeType": "EmitStatement",
+ "src": "34644:90:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2381,
+ "nodeType": "StructuredDocumentation",
+ "src": "33545:277:1",
+ "text": " @notice burn oTokens to reduce or remove the minted oToken obligation recorded in a vault\n @dev only the account owner or operator can burn an oToken, cannot be called when system is partiallyPaused or fullyPaused\n @param _args MintArgs structure"
+ },
+ "id": 2476,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 2386,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2385,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "33904:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "33904:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2388,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "33946:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2389,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "33946:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2390,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2383,
+ "src": "33958:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs memory"
+ }
+ },
+ "id": 2391,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9984,
+ "src": "33958:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 2392,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2387,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "33931:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "33931:39:1"
+ }
+ ],
+ "name": "_burnOtoken",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2384,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2383,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2476,
+ "src": "33848:29:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_memory_ptr",
+ "typeString": "struct Actions.BurnArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2382,
+ "name": "Actions.BurnArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9995,
+ "src": "33848:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_BurnArgs_$9995_storage_ptr",
+ "typeString": "struct Actions.BurnArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "33847:31:1"
+ },
+ "returnParameters": {
+ "id": 2393,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "33975:0:1"
+ },
+ "scope": 3230,
+ "src": "33827:914:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2570,
+ "nodeType": "Block",
+ "src": "35024:768:1",
+ "statements": [
+ {
+ "assignments": [
+ 2483
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2483,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2570,
+ "src": "35034:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2482,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "35034:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2488,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2485,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35075:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2486,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10019,
+ "src": "35075:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2484,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "35059:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2487,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35059:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "35034:54:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2492,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35191:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2493,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10019,
+ "src": "35191:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2490,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "35161:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 2491,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isWhitelistedOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9782,
+ "src": "35161:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view external returns (bool)"
+ }
+ },
+ "id": 2494,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35161:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433237",
+ "id": 2495,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "35206:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ead2819c090cf7721d70cf12dc63532ae612f7ab6bb89e5ce8008acce95f7b25",
+ "typeString": "literal_string \"C27\""
+ },
+ "value": "C27"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_ead2819c090cf7721d70cf12dc63532ae612f7ab6bb89e5ce8008acce95f7b25",
+ "typeString": "literal_string \"C27\""
+ }
+ ],
+ "id": 2489,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "35153:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2496,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35153:59:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2497,
+ "nodeType": "ExpressionStatement",
+ "src": "35153:59:1"
+ },
+ {
+ "assignments": [
+ 2499,
+ 2501,
+ 2503,
+ 2505
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2499,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2570,
+ "src": "35224:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2498,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "35224:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2501,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2570,
+ "src": "35244:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2500,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "35244:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2503,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2570,
+ "src": "35264:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2502,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "35264:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2505,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2570,
+ "src": "35280:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2504,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "35280:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2512,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2509,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2483,
+ "src": "35324:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ ],
+ "id": 2508,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "35316:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 2507,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "35316:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 2510,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35316:15:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2506,
+ "name": "_getOtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3159,
+ "src": "35298:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "function (address) view returns (address,address,address,uint256)"
+ }
+ },
+ "id": 2511,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35298:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(address,address,address,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "35223:109:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2516,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2514,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "35398:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 2515,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2505,
+ "src": "35405:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "35398:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433238",
+ "id": 2517,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "35413:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c410593c0f07ed3371bdb0476ba4b77402a6dbfe56a8d2d23651836543360756",
+ "typeString": "literal_string \"C28\""
+ },
+ "value": "C28"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c410593c0f07ed3371bdb0476ba4b77402a6dbfe56a8d2d23651836543360756",
+ "typeString": "literal_string \"C28\""
+ }
+ ],
+ "id": 2513,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "35390:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2518,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35390:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2519,
+ "nodeType": "ExpressionStatement",
+ "src": "35390:29:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2522,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2501,
+ "src": "35455:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2523,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2503,
+ "src": "35467:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2524,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2499,
+ "src": "35475:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2525,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2505,
+ "src": "35487:6:1",
+ "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": 2521,
+ "name": "_canSettleAssets",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3192,
+ "src": "35438:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,address,address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2526,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35438:56:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433239",
+ "id": 2527,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "35496:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b43cede28d4e34683a8087b61274f0b360f252229bcfc6d4a139836c067d9c91",
+ "typeString": "literal_string \"C29\""
+ },
+ "value": "C29"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b43cede28d4e34683a8087b61274f0b360f252229bcfc6d4a139836c067d9c91",
+ "typeString": "literal_string \"C29\""
+ }
+ ],
+ "id": 2520,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "35430:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2528,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35430:72:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2529,
+ "nodeType": "ExpressionStatement",
+ "src": "35430:72:1"
+ },
+ {
+ "assignments": [
+ 2531
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2531,
+ "mutability": "mutable",
+ "name": "payout",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2570,
+ "src": "35513:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2530,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "35513:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2538,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2533,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35540:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2534,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10019,
+ "src": "35540:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2535,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35554:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2536,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10021,
+ "src": "35554:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2532,
+ "name": "getPayout",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1332,
+ "src": "35530:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (uint256)"
+ }
+ },
+ "id": 2537,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35530:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "35513:54:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2542,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "35596:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2543,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "35596:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2544,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35608:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2545,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10021,
+ "src": "35608:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2539,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2483,
+ "src": "35578:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2541,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "burnOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9724,
+ "src": "35578:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) external"
+ }
+ },
+ "id": 2546,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35578:43:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2547,
+ "nodeType": "ExpressionStatement",
+ "src": "35578:43:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2551,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2499,
+ "src": "35652:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2552,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35664:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2553,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "receiver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10017,
+ "src": "35664:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2554,
+ "name": "payout",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2531,
+ "src": "35680:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2548,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "35632:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 2550,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToUser",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9479,
+ "src": "35632:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 2555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35632:55:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2556,
+ "nodeType": "ExpressionStatement",
+ "src": "35632:55:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2558,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35710:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2559,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10019,
+ "src": "35710:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2560,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "35724:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2561,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "35724:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2562,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35736:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2563,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "receiver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10017,
+ "src": "35736:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2564,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2499,
+ "src": "35752:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2565,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2479,
+ "src": "35764:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs memory"
+ }
+ },
+ "id": 2566,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10021,
+ "src": "35764:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2567,
+ "name": "payout",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2531,
+ "src": "35778:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2557,
+ "name": "Redeem",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 622,
+ "src": "35703:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,address,uint256,uint256)"
+ }
+ },
+ "id": 2568,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35703:82:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2569,
+ "nodeType": "EmitStatement",
+ "src": "35698:87:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2477,
+ "nodeType": "StructuredDocumentation",
+ "src": "34747:213:1",
+ "text": " @notice redeem an oToken after expiry, receiving the payout of the oToken in the collateral asset\n @dev cannot be called when system is fullyPaused\n @param _args RedeemArgs structure"
+ },
+ "id": 2571,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_redeem",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2480,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2479,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2571,
+ "src": "34982:31:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_memory_ptr",
+ "typeString": "struct Actions.RedeemArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2478,
+ "name": "Actions.RedeemArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10022,
+ "src": "34982:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_RedeemArgs_$10022_storage_ptr",
+ "typeString": "struct Actions.RedeemArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "34981:33:1"
+ },
+ "returnParameters": {
+ "id": 2481,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "35024:0:1"
+ },
+ "scope": 3230,
+ "src": "34965:827:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2777,
+ "nodeType": "Block",
+ "src": "36229:2034:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2585,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "36261:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2586,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10037,
+ "src": "36261:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2587,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "36274:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2588,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10039,
+ "src": "36274:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2584,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "36247:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2589,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36247:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 2590,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "36290:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 2583,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "36239:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2591,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36239:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2592,
+ "nodeType": "ExpressionStatement",
+ "src": "36239:57:1"
+ },
+ {
+ "assignments": [
+ 2596,
+ 2598,
+ null
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2596,
+ "mutability": "mutable",
+ "name": "vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "36308:30:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2595,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "36308:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2598,
+ "mutability": "mutable",
+ "name": "typeVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "36340:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2597,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "36340:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 2605,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2600,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "36383:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2601,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10037,
+ "src": "36383:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2602,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "36396:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2603,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10039,
+ "src": "36396:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2599,
+ "name": "getVaultWithDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1462,
+ "src": "36363:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "id": 2604,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36363:47:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "36307:103:1"
+ },
+ {
+ "assignments": [
+ 2607
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2607,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "36421:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2606,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "36421:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2608,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "36421:22:1"
+ },
+ {
+ "id": 2672,
+ "nodeType": "Block",
+ "src": "36737:497:1",
+ "statements": [
+ {
+ "assignments": [
+ 2610
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2610,
+ "mutability": "mutable",
+ "name": "hasShort",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2672,
+ "src": "36751:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 2609,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "36751:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2615,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2612,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "36779:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2613,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "36779:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ ],
+ "id": 2611,
+ "name": "_isNotEmpty",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3031,
+ "src": "36767:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address[] memory) pure returns (bool)"
+ }
+ },
+ "id": 2614,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36767:31:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "36751:47:1"
+ },
+ {
+ "assignments": [
+ 2617
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2617,
+ "mutability": "mutable",
+ "name": "hasLong",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2672,
+ "src": "36812:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 2616,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "36812:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2622,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2619,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "36839:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2620,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "36839:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ ],
+ "id": 2618,
+ "name": "_isNotEmpty",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3031,
+ "src": "36827:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address[] memory) pure returns (bool)"
+ }
+ },
+ "id": 2621,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36827:30:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "36812:45:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 2626,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2624,
+ "name": "hasShort",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2610,
+ "src": "36880:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 2625,
+ "name": "hasLong",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2617,
+ "src": "36892:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "36880:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433330",
+ "id": 2627,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "36901:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b508bf71c8e58f735230fb147b9e8032f0bdf8f0836214bfc168d896d4c8c228",
+ "typeString": "literal_string \"C30\""
+ },
+ "value": "C30"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b508bf71c8e58f735230fb147b9e8032f0bdf8f0836214bfc168d896d4c8c228",
+ "typeString": "literal_string \"C30\""
+ }
+ ],
+ "id": 2623,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "36872:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2628,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36872:35:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2629,
+ "nodeType": "ExpressionStatement",
+ "src": "36872:35:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 2645,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 2630,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2607,
+ "src": "36922:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "id": 2631,
+ "name": "hasShort",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2610,
+ "src": "36931:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2639,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "36999:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2640,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "36999:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2642,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2641,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37017:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "36999:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2638,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "36983:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2643,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36983:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2644,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "36931:89:1",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2633,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "36958:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2634,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "36958:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2636,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2635,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "36977:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "36958:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2632,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "36942:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2637,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36942:38:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "src": "36922:98:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2646,
+ "nodeType": "ExpressionStatement",
+ "src": "36922:98:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 2647,
+ "name": "hasLong",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2617,
+ "src": "37039:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 2671,
+ "nodeType": "IfStatement",
+ "src": "37035:189:1",
+ "trueBody": {
+ "id": 2670,
+ "nodeType": "Block",
+ "src": "37048:176:1",
+ "statements": [
+ {
+ "assignments": [
+ 2649
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2649,
+ "mutability": "mutable",
+ "name": "longOtoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2670,
+ "src": "37066:26:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2648,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "37066:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2656,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2651,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "37111:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2652,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "37111:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2654,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2653,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37129:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "37111:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2650,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "37095:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2655,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37095:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "37066:66:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2662,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "37181:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ ],
+ "id": 2661,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "37173:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 2660,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37173:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 2663,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37173:13:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2664,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "37188:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2665,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10981,
+ "src": "37188:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 2667,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37206:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "37188:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2657,
+ "name": "longOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2649,
+ "src": "37151:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2659,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "burnOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9724,
+ "src": "37151:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) external"
+ }
+ },
+ "id": 2668,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37151:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2669,
+ "nodeType": "ExpressionStatement",
+ "src": "37151:58:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "assignments": [
+ 2674,
+ 2676,
+ 2678,
+ 2680
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2674,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "37245:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2673,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37245:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2676,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "37265:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2675,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37265:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2678,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "37285:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2677,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37285:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2680,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "37301:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2679,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "37301:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2687,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2684,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2607,
+ "src": "37345:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ ],
+ "id": 2683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "37337:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 2682,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37337:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 2685,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37337:15:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2681,
+ "name": "_getOtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3159,
+ "src": "37319:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "function (address) view returns (address,address,address,uint256)"
+ }
+ },
+ "id": 2686,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37319:34:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(address,address,address,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "37244:109:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2691,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2689,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "37434:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 2690,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2680,
+ "src": "37441:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "37434:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433331",
+ "id": 2692,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37449:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5ddf5d6372377509931656790b740f437e6ebd56b5bf3452422f404a42d27b4d",
+ "typeString": "literal_string \"C31\""
+ },
+ "value": "C31"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5ddf5d6372377509931656790b740f437e6ebd56b5bf3452422f404a42d27b4d",
+ "typeString": "literal_string \"C31\""
+ }
+ ],
+ "id": 2688,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "37426:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2693,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37426:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2694,
+ "nodeType": "ExpressionStatement",
+ "src": "37426:29:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2697,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2676,
+ "src": "37490:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2698,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2678,
+ "src": "37502:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2699,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2674,
+ "src": "37510:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2700,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2680,
+ "src": "37522:6:1",
+ "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": 2696,
+ "name": "_canSettleAssets",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3192,
+ "src": "37473:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,address,address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2701,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37473:56:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433239",
+ "id": 2702,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37531:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b43cede28d4e34683a8087b61274f0b360f252229bcfc6d4a139836c067d9c91",
+ "typeString": "literal_string \"C29\""
+ },
+ "value": "C29"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b43cede28d4e34683a8087b61274f0b360f252229bcfc6d4a139836c067d9c91",
+ "typeString": "literal_string \"C29\""
+ }
+ ],
+ "id": 2695,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "37465:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2703,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37465:72:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2704,
+ "nodeType": "ExpressionStatement",
+ "src": "37465:72:1"
+ },
+ {
+ "assignments": [
+ 2706,
+ 2708
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2706,
+ "mutability": "mutable",
+ "name": "payout",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "37549:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2705,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "37549:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2708,
+ "mutability": "mutable",
+ "name": "isValidVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "37565:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 2707,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "37565:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2714,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2711,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2596,
+ "src": "37617:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2712,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2598,
+ "src": "37624:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2709,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "37586:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "id": 2710,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getExcessCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9410,
+ "src": "37586:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_bool_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256) view external returns (uint256,bool)"
+ }
+ },
+ "id": 2713,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37586:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "37548:86:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2716,
+ "name": "isValidVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2708,
+ "src": "37809:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433332",
+ "id": 2717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37823:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_38870562b3514bd818d3e11444fdc6b012b52c68815af296659b43cb250b3489",
+ "typeString": "literal_string \"C32\""
+ },
+ "value": "C32"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_38870562b3514bd818d3e11444fdc6b012b52c68815af296659b43cb250b3489",
+ "typeString": "literal_string \"C32\""
+ }
+ ],
+ "id": 2715,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "37801:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2718,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37801:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2719,
+ "nodeType": "ExpressionStatement",
+ "src": "37801:28:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 2727,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "delete",
+ "prefix": true,
+ "src": "37840:41:1",
+ "subExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2720,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "37847:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2723,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2721,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "37854:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2722,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10037,
+ "src": "37854:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "37847:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2726,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2724,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "37867:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2725,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10039,
+ "src": "37867:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "37847:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2728,
+ "nodeType": "ExpressionStatement",
+ "src": "37840:41:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2731,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2729,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2598,
+ "src": "37896:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 2730,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "37909:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "37896:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 2744,
+ "nodeType": "IfStatement",
+ "src": "37892:116:1",
+ "trueBody": {
+ "id": 2743,
+ "nodeType": "Block",
+ "src": "37912:96:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 2741,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2732,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "37926:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2734,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 2733,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2674,
+ "src": "37943:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "37926:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2739,
+ "name": "payout",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2706,
+ "src": "37990:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2735,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "37957:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2737,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 2736,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2674,
+ "src": "37974:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "37957:28:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2738,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "37957:32:1",
+ "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": 2740,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37957:40:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "37926:71:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2742,
+ "nodeType": "ExpressionStatement",
+ "src": "37926:71:1"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2748,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2674,
+ "src": "38038:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2749,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "38050:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2750,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10041,
+ "src": "38050:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2751,
+ "name": "payout",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2706,
+ "src": "38060:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2745,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "38018:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 2747,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToUser",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9479,
+ "src": "38018:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 2752,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38018:49:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2753,
+ "nodeType": "ExpressionStatement",
+ "src": "38018:49:1"
+ },
+ {
+ "assignments": [
+ 2755
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2755,
+ "mutability": "mutable",
+ "name": "vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "38078:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2754,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "38078:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2758,
+ "initialValue": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2756,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "38096:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2757,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10039,
+ "src": "38096:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "38078:31:1"
+ },
+ {
+ "assignments": [
+ 2760
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2760,
+ "mutability": "mutable",
+ "name": "payoutRecipient",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2777,
+ "src": "38119:23:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2759,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "38119:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2763,
+ "initialValue": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2761,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "38145:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2762,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "to",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10041,
+ "src": "38145:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "38119:34:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2765,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "38182:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2766,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10037,
+ "src": "38182:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2769,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2607,
+ "src": "38203:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ ],
+ "id": 2768,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "38195:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 2767,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "38195:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 2770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38195:15:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2771,
+ "name": "payoutRecipient",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2760,
+ "src": "38212:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2772,
+ "name": "payout",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2706,
+ "src": "38229:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2773,
+ "name": "vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2755,
+ "src": "38237:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2774,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2598,
+ "src": "38246:9:1",
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2764,
+ "name": "VaultSettled",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 637,
+ "src": "38169:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256,uint256)"
+ }
+ },
+ "id": 2775,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38169:87:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2776,
+ "nodeType": "EmitStatement",
+ "src": "38164:92:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2572,
+ "nodeType": "StructuredDocumentation",
+ "src": "35798:317:1",
+ "text": " @notice settle a vault after expiry, removing the net proceeds/collateral after both long and short oToken payouts have settled\n @dev deletes a vault of vaultId after net proceeds/collateral is removed, cannot be called when system is fullyPaused\n @param _args SettleVaultArgs structure"
+ },
+ "id": 2778,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2577,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "36204:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2578,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "36204:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2579,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2574,
+ "src": "36216:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs memory"
+ }
+ },
+ "id": 2580,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10037,
+ "src": "36216:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 2581,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2576,
+ "name": "onlyAuthorized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 766,
+ "src": "36189:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$_t_address_$",
+ "typeString": "modifier (address,address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "36189:39:1"
+ }
+ ],
+ "name": "_settleVault",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2575,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2574,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2778,
+ "src": "36142:36:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_memory_ptr",
+ "typeString": "struct Actions.SettleVaultArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2573,
+ "name": "Actions.SettleVaultArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10042,
+ "src": "36142:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_SettleVaultArgs_$10042_storage_ptr",
+ "typeString": "struct Actions.SettleVaultArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "36141:38:1"
+ },
+ "returnParameters": {
+ "id": 2582,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "36229:0:1"
+ },
+ "scope": 3230,
+ "src": "36120:2143:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2948,
+ "nodeType": "Block",
+ "src": "38542:2277:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2788,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "38574:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2789,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10044,
+ "src": "38574:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2790,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "38587:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2791,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10048,
+ "src": "38587:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2787,
+ "name": "_checkVaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3006,
+ "src": "38560:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 2792,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38560:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433335",
+ "id": 2793,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "38603:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ },
+ "value": "C35"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6ba4de2e86297b691bd9765b4bf0db4609c33985c9f7e45514d6db908810574e",
+ "typeString": "literal_string \"C35\""
+ }
+ ],
+ "id": 2786,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "38552:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38552:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2795,
+ "nodeType": "ExpressionStatement",
+ "src": "38552:57:1"
+ },
+ {
+ "assignments": [
+ 2799,
+ 2801,
+ 2803,
+ 2805
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2799,
+ "mutability": "mutable",
+ "name": "vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2948,
+ "src": "38884:30:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2798,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "38884:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2801,
+ "mutability": "mutable",
+ "name": "isUnderCollat",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2948,
+ "src": "38916:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 2800,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "38916:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2803,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2948,
+ "src": "38936:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2802,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "38936:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2805,
+ "mutability": "mutable",
+ "name": "collateralDust",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2948,
+ "src": "38951:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2804,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "38951:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2814,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2807,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39006:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2808,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10044,
+ "src": "39006:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2809,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39031:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2810,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10048,
+ "src": "39031:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2811,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39058:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2812,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "roundId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10052,
+ "src": "39058:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2806,
+ "name": "_isLiquidatable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3097,
+ "src": "38977:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256,uint256) view returns (struct MarginVault.Vault memory,bool,uint256,uint256)"
+ }
+ },
+ "id": 2813,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38977:104:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,bool,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "38883:198:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2816,
+ "name": "isUnderCollat",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2801,
+ "src": "39100:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433333",
+ "id": 2817,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39115:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d796b91fc3acd32f70439e683dea3f76557bca9596bfc338008f824627041e84",
+ "typeString": "literal_string \"C33\""
+ },
+ "value": "C33"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d796b91fc3acd32f70439e683dea3f76557bca9596bfc338008f824627041e84",
+ "typeString": "literal_string \"C33\""
+ }
+ ],
+ "id": 2815,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "39092:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2818,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39092:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2819,
+ "nodeType": "ExpressionStatement",
+ "src": "39092:29:1"
+ },
+ {
+ "assignments": [
+ 2821
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 2821,
+ "mutability": "mutable",
+ "name": "collateralToSell",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2948,
+ "src": "39187:24:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2820,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "39187:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 2830,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "316538",
+ "id": 2828,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39242:3:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_100000000_by_1",
+ "typeString": "int_const 100000000"
+ },
+ "value": "1e8"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_100000000_by_1",
+ "typeString": "int_const 100000000"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2825,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2803,
+ "src": "39231:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2822,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39214:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2823,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10050,
+ "src": "39214:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2824,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14198,
+ "src": "39214:16:1",
+ "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": 2826,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39214:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2827,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14215,
+ "src": "39214:27:1",
+ "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": 2829,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39214:32:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "39187:59:1"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2840,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2836,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39460:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2837,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10050,
+ "src": "39460:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2831,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "39434:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2832,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10978,
+ "src": "39434:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 2834,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2833,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39453:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "39434:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2835,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "39434:25:1",
+ "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": 2838,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39434:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2839,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39476:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "39434:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 2855,
+ "nodeType": "IfStatement",
+ "src": "39430:156:1",
+ "trueBody": {
+ "id": 2854,
+ "nodeType": "Block",
+ "src": "39479:107:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2850,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2847,
+ "name": "collateralToSell",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2821,
+ "src": "39532:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2842,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "39501:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2843,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10984,
+ "src": "39501:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 2845,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2844,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39525:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "39501:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2846,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "39501:30:1",
+ "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": 2848,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39501:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 2849,
+ "name": "collateralDust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2805,
+ "src": "39553:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "39501:66:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "433334",
+ "id": 2851,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39569:5:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_874788238a782888048e4ff3aacb432b73541de98f276e732984ced6eb5c27c9",
+ "typeString": "literal_string \"C34\""
+ },
+ "value": "C34"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_874788238a782888048e4ff3aacb432b73541de98f276e732984ced6eb5c27c9",
+ "typeString": "literal_string \"C34\""
+ }
+ ],
+ "id": 2841,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "39493:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 2852,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39493:82:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2853,
+ "nodeType": "ExpressionStatement",
+ "src": "39493:82:1"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2863,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "39832:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2864,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "39832:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2865,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39844:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2866,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10050,
+ "src": "39844:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2857,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "39798:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2858,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "39798:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2860,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2859,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39817:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "39798:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2856,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "39782:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 2861,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39782:38:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 2862,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "burnOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9724,
+ "src": "39782:49:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256) external"
+ }
+ },
+ "id": 2867,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39782:75:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2868,
+ "nodeType": "ExpressionStatement",
+ "src": "39782:75:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2877,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "40032:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2878,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "40032:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2880,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2879,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40055:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40032:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2881,
+ "name": "collateralToSell",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2821,
+ "src": "40059:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2882,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40077:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2869,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "39980:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2874,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2870,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "39987:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2871,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10044,
+ "src": "39987:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "39980:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2875,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2872,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40000:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2873,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10048,
+ "src": "40000:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "39980:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2876,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "removeCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11510,
+ "src": "39980:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2883,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39980:99:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2884,
+ "nodeType": "ExpressionStatement",
+ "src": "39980:99:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2893,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "40253:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2894,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "40253:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2896,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2895,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40272:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40253:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2897,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40276:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2898,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10050,
+ "src": "40276:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2899,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40290:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2885,
+ "name": "vaults",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 480,
+ "src": "40206:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct MarginVault.Vault storage ref))"
+ }
+ },
+ "id": 2890,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2886,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40213:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2887,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10044,
+ "src": "40213:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40206:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Vault_$10985_storage_$",
+ "typeString": "mapping(uint256 => struct MarginVault.Vault storage ref)"
+ }
+ },
+ "id": 2891,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2888,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40226:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2889,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10048,
+ "src": "40226:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40206:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage",
+ "typeString": "struct MarginVault.Vault storage ref"
+ }
+ },
+ "id": 2892,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "removeShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 11160,
+ "src": "40206:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Vault_$10985_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Vault_$10985_storage_ptr_$",
+ "typeString": "function (struct MarginVault.Vault storage pointer,address,uint256,uint256)"
+ }
+ },
+ "id": 2900,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "40206:86:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2901,
+ "nodeType": "ExpressionStatement",
+ "src": "40206:86:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 2917,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2902,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "40363:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2907,
+ "indexExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2903,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "40380:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2904,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "40380:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2906,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2905,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40403:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40380:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "40363:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 2915,
+ "name": "collateralToSell",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2821,
+ "src": "40457:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2908,
+ "name": "nakedPoolBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 511,
+ "src": "40409:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2913,
+ "indexExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2909,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "40426:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2910,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "40426:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2912,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2911,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40449:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40426:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40409:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2914,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "40409:47:1",
+ "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": 2916,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "40409:65:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "40363:111:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 2918,
+ "nodeType": "ExpressionStatement",
+ "src": "40363:111:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2922,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2799,
+ "src": "40505:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 2923,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "40505:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 2925,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2924,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "40528:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "40505:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2926,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40532:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2927,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "receiver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10046,
+ "src": "40532:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2928,
+ "name": "collateralToSell",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2821,
+ "src": "40548:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 2919,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "40485:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 2921,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "transferToUser",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9479,
+ "src": "40485:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256) external"
+ }
+ },
+ "id": 2929,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "40485:80:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2930,
+ "nodeType": "ExpressionStatement",
+ "src": "40485:80:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2932,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "40610:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2933,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "40610:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2934,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40634:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2935,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "receiver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10046,
+ "src": "40634:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2936,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40662:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2937,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "owner",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10044,
+ "src": "40662:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2938,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2803,
+ "src": "40687:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2939,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40706:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2940,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "roundId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10052,
+ "src": "40706:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 2941,
+ "name": "collateralToSell",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2821,
+ "src": "40733:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2942,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40763:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2943,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "amount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10050,
+ "src": "40763:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2944,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2781,
+ "src": "40789:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs memory"
+ }
+ },
+ "id": 2945,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultId",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10048,
+ "src": "40789:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "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"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 2931,
+ "name": "VaultLiquidated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 656,
+ "src": "40581:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,address,uint256,uint256,uint256,uint256,uint256)"
+ }
+ },
+ "id": 2946,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "40581:231:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2947,
+ "nodeType": "EmitStatement",
+ "src": "40576:236:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2779,
+ "nodeType": "StructuredDocumentation",
+ "src": "38269:184:1",
+ "text": " @notice liquidate naked margin vault\n @dev can liquidate different vaults id in the same operate() call\n @param _args liquidation action arguments struct"
+ },
+ "id": 2949,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 2784,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2783,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "38523:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "38523:18:1"
+ }
+ ],
+ "name": "_liquidate",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2782,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2781,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2949,
+ "src": "38478:34:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_memory_ptr",
+ "typeString": "struct Actions.LiquidateArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2780,
+ "name": "Actions.LiquidateArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10053,
+ "src": "38478:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_LiquidateArgs_$10053_storage_ptr",
+ "typeString": "struct Actions.LiquidateArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "38477:36:1"
+ },
+ "returnParameters": {
+ "id": 2785,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "38542:0:1"
+ },
+ "scope": 3230,
+ "src": "38458:2361:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 2981,
+ "nodeType": "Block",
+ "src": "41097:149:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2966,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "41150:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2967,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "41150:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2968,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2952,
+ "src": "41162:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ },
+ "id": 2969,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "data",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10057,
+ "src": "41162:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2962,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2952,
+ "src": "41123:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ },
+ "id": 2963,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "callee",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10055,
+ "src": "41123:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 2961,
+ "name": "CalleeInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9299,
+ "src": "41107:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_CalleeInterface_$9299_$",
+ "typeString": "type(contract CalleeInterface)"
+ }
+ },
+ "id": 2964,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41107:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_CalleeInterface_$9299",
+ "typeString": "contract CalleeInterface"
+ }
+ },
+ "id": 2965,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "callFunction",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9298,
+ "src": "41107:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address payable,bytes memory) external"
+ }
+ },
+ "id": 2970,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41107:66:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2971,
+ "nodeType": "ExpressionStatement",
+ "src": "41107:66:1"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2973,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "41202:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 2974,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "41202:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2975,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2952,
+ "src": "41214:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ },
+ "id": 2976,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "callee",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10055,
+ "src": "41214:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2977,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2952,
+ "src": "41228:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ },
+ "id": 2978,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "data",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10057,
+ "src": "41228:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 2972,
+ "name": "CallExecuted",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 665,
+ "src": "41189:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,address,bytes memory)"
+ }
+ },
+ "id": 2979,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41189:50:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 2980,
+ "nodeType": "EmitStatement",
+ "src": "41184:55:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2950,
+ "nodeType": "StructuredDocumentation",
+ "src": "40825:157:1",
+ "text": " @notice execute arbitrary calls\n @dev cannot be called when system is partiallyPaused or fullyPaused\n @param _args Call action"
+ },
+ "id": 2982,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 2955,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2954,
+ "name": "notPartiallyPaused",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 718,
+ "src": "41042:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "41042:18:1"
+ },
+ {
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 2957,
+ "name": "_args",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2952,
+ "src": "41083:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs memory"
+ }
+ },
+ "id": 2958,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "callee",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10055,
+ "src": "41083:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "id": 2959,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 2956,
+ "name": "onlyWhitelistedCallee",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 783,
+ "src": "41061:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$_t_address_$",
+ "typeString": "modifier (address)"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "41061:35:1"
+ }
+ ],
+ "name": "_call",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2953,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2952,
+ "mutability": "mutable",
+ "name": "_args",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 2982,
+ "src": "41002:29:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_memory_ptr",
+ "typeString": "struct Actions.CallArgs"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 2951,
+ "name": "Actions.CallArgs",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10058,
+ "src": "41002:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_CallArgs_$10058_storage_ptr",
+ "typeString": "struct Actions.CallArgs"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "41001:31:1"
+ },
+ "returnParameters": {
+ "id": 2960,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "41097:0:1"
+ },
+ "scope": 3230,
+ "src": "40987:259:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3005,
+ "nodeType": "Block",
+ "src": "41589:92:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 3002,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 2994,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2992,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2987,
+ "src": "41608:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 2993,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "41619:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "41608:12:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 2995,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "41607:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3000,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 2996,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2987,
+ "src": "41626:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 2997,
+ "name": "accountVaultCounter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 473,
+ "src": "41638:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 2999,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 2998,
+ "name": "_accountOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 2985,
+ "src": "41658:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "41638:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "41626:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 3001,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "41625:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "41607:66:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 3003,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "41606:68:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 2991,
+ "id": 3004,
+ "nodeType": "Return",
+ "src": "41599:75:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 2983,
+ "nodeType": "StructuredDocumentation",
+ "src": "41252:239:1",
+ "text": " @notice check if a vault id is valid for a given account owner address\n @param _accountOwner account owner address\n @param _vaultId vault id to check\n @return True if the _vaultId is valid, False if not"
+ },
+ "id": 3006,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_checkVaultId",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 2988,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2985,
+ "mutability": "mutable",
+ "name": "_accountOwner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3006,
+ "src": "41519:21:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 2984,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "41519:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 2987,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3006,
+ "src": "41542:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 2986,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "41542:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "41518:41:1"
+ },
+ "returnParameters": {
+ "id": 2991,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 2990,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3006,
+ "src": "41583:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 2989,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "41583:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "41582:6:1"
+ },
+ "scope": 3230,
+ "src": "41496:185:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3030,
+ "nodeType": "Block",
+ "src": "41762:72:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 3028,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3017,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3014,
+ "name": "_array",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3009,
+ "src": "41780:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 3015,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "41780:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3016,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "41796:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "41780:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 3018,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "41779:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 3026,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3019,
+ "name": "_array",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3009,
+ "src": "41803:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 3021,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3020,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "41810:1:1",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "41803:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3024,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "41824:1:1",
+ "subdenomination": null,
+ "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": 3023,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "41816:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 3022,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "41816:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 3025,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41816:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "41803:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 3027,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "41802:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "41779:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 3013,
+ "id": 3029,
+ "nodeType": "Return",
+ "src": "41772:55:1"
+ }
+ ]
+ },
+ "documentation": null,
+ "id": 3031,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isNotEmpty",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3010,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3009,
+ "mutability": "mutable",
+ "name": "_array",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3031,
+ "src": "41708:23:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 3007,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "41708:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 3008,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "41708:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "41707:25:1"
+ },
+ "returnParameters": {
+ "id": 3013,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3012,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3031,
+ "src": "41756:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3011,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "41756:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "41755:6:1"
+ },
+ "scope": 3230,
+ "src": "41687:147:1",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3044,
+ "nodeType": "Block",
+ "src": "42100:62:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3041,
+ "name": "_callee",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3034,
+ "src": "42147:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3039,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "42117:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 3040,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isWhitelistedCallee",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9789,
+ "src": "42117:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view external returns (bool)"
+ }
+ },
+ "id": 3042,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42117:38:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 3038,
+ "id": 3043,
+ "nodeType": "Return",
+ "src": "42110:45:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3032,
+ "nodeType": "StructuredDocumentation",
+ "src": "41840:179:1",
+ "text": " @notice return if a callee address is whitelisted or not\n @param _callee callee address\n @return True if callee address is whitelisted, False if not"
+ },
+ "id": 3045,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isCalleeWhitelisted",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3035,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3034,
+ "mutability": "mutable",
+ "name": "_callee",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3045,
+ "src": "42054:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3033,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "42054:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "42053:17:1"
+ },
+ "returnParameters": {
+ "id": 3038,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3037,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3045,
+ "src": "42094:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3036,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "42094:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "42093:6:1"
+ },
+ "scope": 3230,
+ "src": "42024:138:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3096,
+ "nodeType": "Block",
+ "src": "42820:442:1",
+ "statements": [
+ {
+ "assignments": [
+ 3066,
+ 3068,
+ 3070
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3066,
+ "mutability": "mutable",
+ "name": "vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3096,
+ "src": "42831:30:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3065,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "42831:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3068,
+ "mutability": "mutable",
+ "name": "typeVault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3096,
+ "src": "42863:17:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3067,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "42863:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3070,
+ "mutability": "mutable",
+ "name": "latestUpdateTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3096,
+ "src": "42882:29:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3069,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "42882:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3075,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3072,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3048,
+ "src": "42948:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3073,
+ "name": "_vaultId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3050,
+ "src": "42968:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3071,
+ "name": "getVaultWithDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1462,
+ "src": "42915:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint256) view returns (struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "id": 3074,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42915:71:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "42830:156:1"
+ },
+ {
+ "assignments": [
+ 3077,
+ 3079,
+ 3081
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3077,
+ "mutability": "mutable",
+ "name": "isUnderCollat",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3096,
+ "src": "42997:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3076,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "42997:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3079,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3096,
+ "src": "43017:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3078,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "43017:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3081,
+ "mutability": "mutable",
+ "name": "collateralDust",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3096,
+ "src": "43032:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3080,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "43032:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3089,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3084,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3066,
+ "src": "43097:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3085,
+ "name": "typeVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3068,
+ "src": "43116:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3086,
+ "name": "latestUpdateTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3070,
+ "src": "43139:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3087,
+ "name": "_roundId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3052,
+ "src": "43174:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3082,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "43058:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "id": 3083,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isLiquidatable",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9427,
+ "src": "43058:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256,uint256,uint256) view external returns (bool,uint256,uint256)"
+ }
+ },
+ "id": 3088,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43058:134:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(bool,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "42996:196:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 3090,
+ "name": "vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3066,
+ "src": "43211:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3091,
+ "name": "isUnderCollat",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3077,
+ "src": "43218:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3092,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3079,
+ "src": "43233:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3093,
+ "name": "collateralDust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3081,
+ "src": "43240:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 3094,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "43210:45:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_Vault_$10985_memory_ptr_$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(struct MarginVault.Vault memory,bool,uint256,uint256)"
+ }
+ },
+ "functionReturnParameters": 3062,
+ "id": 3095,
+ "nodeType": "Return",
+ "src": "43203:52:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3046,
+ "nodeType": "StructuredDocumentation",
+ "src": "42168:381:1",
+ "text": " @notice check if a vault is liquidatable in a specific round id\n @param _owner vault owner address\n @param _vaultId vault id to check\n @param _roundId chainlink round id to check vault status at\n @return vault struct, isLiquidatable, true if vault is undercollateralized, the price of 1 repaid otoken and the otoken collateral dust amount"
+ },
+ "id": 3097,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isLiquidatable",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3053,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3048,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42588:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3047,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "42588:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3050,
+ "mutability": "mutable",
+ "name": "_vaultId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42612:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3049,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "42612:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3052,
+ "mutability": "mutable",
+ "name": "_roundId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42638:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3051,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "42638:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "42578:82:1"
+ },
+ "returnParameters": {
+ "id": 3062,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3055,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42721:24:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3054,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "42721:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3057,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42759:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3056,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "42759:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3059,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42777:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3058,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "42777:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3061,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3097,
+ "src": "42798:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3060,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "42798:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "42707:108:1"
+ },
+ "scope": 3230,
+ "src": "42554:708:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3158,
+ "nodeType": "Block",
+ "src": "43530:494:1",
+ "statements": [
+ {
+ "assignments": [
+ 3112
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3112,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3158,
+ "src": "43540:22:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3111,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "43540:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3116,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3114,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3100,
+ "src": "43581:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3113,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "43565:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 3115,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43565:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "43540:49:1"
+ },
+ {
+ "clauses": [
+ {
+ "block": {
+ "id": 3139,
+ "nodeType": "Block",
+ "src": "43807:72:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 3133,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3121,
+ "src": "43829:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3134,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3123,
+ "src": "43841:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3135,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3125,
+ "src": "43853:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3136,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3129,
+ "src": "43861:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 3137,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "43828:40:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(address,address,address,uint256)"
+ }
+ },
+ "functionReturnParameters": 3110,
+ "id": 3138,
+ "nodeType": "Return",
+ "src": "43821:47:1"
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 3140,
+ "nodeType": "TryCatchClause",
+ "parameters": {
+ "id": 3132,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3121,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3140,
+ "src": "43651:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3120,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43651:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3123,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3140,
+ "src": "43683:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3122,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43683:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3125,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3140,
+ "src": "43715:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3124,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43715:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3127,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3140,
+ "src": "43743:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3126,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "43743:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3129,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3140,
+ "src": "43764:14:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3128,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "43764:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3131,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3140,
+ "src": "43792:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3130,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "43792:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "43637:169:1"
+ },
+ "src": "43629:250:1"
+ },
+ {
+ "block": {
+ "id": 3155,
+ "nodeType": "Block",
+ "src": "43886:132:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3141,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3112,
+ "src": "43908:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 3142,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9663,
+ "src": "43908:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3143,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43908:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3144,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3112,
+ "src": "43934:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 3145,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "underlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9653,
+ "src": "43934:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3146,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43934:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3147,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3112,
+ "src": "43960:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 3148,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "strikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9658,
+ "src": "43960:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3149,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43960:20:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3150,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3112,
+ "src": "43982:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 3151,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "43982:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 3152,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43982:24:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 3153,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "43907:100:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$",
+ "typeString": "tuple(address,address,address,uint256)"
+ }
+ },
+ "functionReturnParameters": 3110,
+ "id": 3154,
+ "nodeType": "Return",
+ "src": "43900:107:1"
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 3156,
+ "nodeType": "TryCatchClause",
+ "parameters": null,
+ "src": "43880:138:1"
+ }
+ ],
+ "externalCall": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3117,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3112,
+ "src": "43603:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 3118,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getOtokenDetails",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9710,
+ "src": "43603:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "function () view external returns (address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 3119,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43603:25:1",
+ "tryCall": true,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 3157,
+ "nodeType": "TryStatement",
+ "src": "43599:419:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3098,
+ "nodeType": "StructuredDocumentation",
+ "src": "43268:68:1",
+ "text": " @dev get otoken detail, from both otoken versions"
+ },
+ "id": 3159,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getOtokenDetails",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3101,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3100,
+ "mutability": "mutable",
+ "name": "_otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3159,
+ "src": "43368:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3099,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43368:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "43367:17:1"
+ },
+ "returnParameters": {
+ "id": 3110,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3103,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3159,
+ "src": "43445:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3102,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43445:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3105,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3159,
+ "src": "43466:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3104,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43466:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3107,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3159,
+ "src": "43487:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3106,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43487:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3109,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3159,
+ "src": "43508:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3108,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "43508:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "43431:94:1"
+ },
+ "scope": 3230,
+ "src": "43341:683:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3191,
+ "nodeType": "Block",
+ "src": "44536:208:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 3189,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 3183,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3175,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3162,
+ "src": "44592:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3176,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3168,
+ "src": "44605:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3173,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 445,
+ "src": "44565:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 3174,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isDisputePeriodOver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9541,
+ "src": "44565:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view external returns (bool)"
+ }
+ },
+ "id": 3177,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44565:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3180,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3164,
+ "src": "44656:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3181,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3168,
+ "src": "44665:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3178,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 445,
+ "src": "44629:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 3179,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isDisputePeriodOver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9541,
+ "src": "44629:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view external returns (bool)"
+ }
+ },
+ "id": 3182,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44629:44:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "44565:108:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3186,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3166,
+ "src": "44716:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3187,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3168,
+ "src": "44729:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3184,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 445,
+ "src": "44689:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 3185,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isDisputePeriodOver",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9541,
+ "src": "44689:26:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view external returns (bool)"
+ }
+ },
+ "id": 3188,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44689:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "44565:172:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 3172,
+ "id": 3190,
+ "nodeType": "Return",
+ "src": "44546:191:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3160,
+ "nodeType": "StructuredDocumentation",
+ "src": "44030:332:1",
+ "text": " @dev return if an expired oToken is ready to be settled, only true when price for underlying,\n strike and collateral assets at this specific expiry is available in our Oracle module\n @return True if the oToken has expired AND all oracle prices at the expiry timestamp have been finalized, False if not"
+ },
+ "id": 3192,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_canSettleAssets",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3169,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3162,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3192,
+ "src": "44402:19:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3161,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "44402:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3164,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3192,
+ "src": "44431:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3163,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "44431:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3166,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3192,
+ "src": "44456:19:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3165,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "44456:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3168,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3192,
+ "src": "44485:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3167,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "44485:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "44392:114:1"
+ },
+ "returnParameters": {
+ "id": 3172,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3171,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3192,
+ "src": "44530:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3170,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "44530:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "44529:6:1"
+ },
+ "scope": 3230,
+ "src": "44367:377:1",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 3228,
+ "nodeType": "Block",
+ "src": "44874:282:1",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3202,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 3196,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "44884:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3198,
+ "name": "addressbook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "44915:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 3199,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getWhitelist",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9145,
+ "src": "44915:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3200,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44915:26:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3197,
+ "name": "WhitelistInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9842,
+ "src": "44896:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_WhitelistInterface_$9842_$",
+ "typeString": "type(contract WhitelistInterface)"
+ }
+ },
+ "id": 3201,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44896:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "src": "44884:58:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 3203,
+ "nodeType": "ExpressionStatement",
+ "src": "44884:58:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3210,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 3204,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 445,
+ "src": "44952:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3206,
+ "name": "addressbook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "44977:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 3207,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getOracle",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9155,
+ "src": "44977:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3208,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44977:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3205,
+ "name": "OracleInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9641,
+ "src": "44961:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OracleInterface_$9641_$",
+ "typeString": "type(contract OracleInterface)"
+ }
+ },
+ "id": 3209,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44961:40:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "src": "44952:49:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 3211,
+ "nodeType": "ExpressionStatement",
+ "src": "44952:49:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3218,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 3212,
+ "name": "calculator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 447,
+ "src": "45011:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3214,
+ "name": "addressbook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "45050:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 3215,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getMarginCalculator",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9165,
+ "src": "45050:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3216,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45050:33:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3213,
+ "name": "MarginCalculatorInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9428,
+ "src": "45024:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_MarginCalculatorInterface_$9428_$",
+ "typeString": "type(contract MarginCalculatorInterface)"
+ }
+ },
+ "id": 3217,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45024:60:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "src": "45011:73:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginCalculatorInterface_$9428",
+ "typeString": "contract MarginCalculatorInterface"
+ }
+ },
+ "id": 3219,
+ "nodeType": "ExpressionStatement",
+ "src": "45011:73:1"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3226,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 3220,
+ "name": "pool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 449,
+ "src": "45094:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3222,
+ "name": "addressbook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "45121:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 3223,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getMarginPool",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9160,
+ "src": "45121:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 3224,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45121:27:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3221,
+ "name": "MarginPoolInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9504,
+ "src": "45101:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_MarginPoolInterface_$9504_$",
+ "typeString": "type(contract MarginPoolInterface)"
+ }
+ },
+ "id": 3225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45101:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "src": "45094:55:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPoolInterface_$9504",
+ "typeString": "contract MarginPoolInterface"
+ }
+ },
+ "id": 3227,
+ "nodeType": "ExpressionStatement",
+ "src": "45094:55:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3193,
+ "nodeType": "StructuredDocumentation",
+ "src": "44750:76:1",
+ "text": " @dev updates the internal configuration of the controller"
+ },
+ "id": 3229,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_refreshConfigInternal",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3194,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "44862:2:1"
+ },
+ "returnParameters": {
+ "id": 3195,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "44874:0:1"
+ },
+ "scope": 3230,
+ "src": "44831:325:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 3231,
+ "src": "2837:42321:1"
+ }
+ ],
+ "src": "47:45112:1"
+ },
+ "id": 1
+ },
+ "contracts/core/MarginCalculator.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/MarginCalculator.sol",
+ "exportedSymbols": {
+ "MarginCalculator": [
+ 5915
+ ]
+ },
+ "id": 5916,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 3232,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "47:24:2"
+ },
+ {
+ "id": 3233,
+ "literals": [
+ "experimental",
+ "ABIEncoderV2"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "72:33:2"
+ },
+ {
+ "absolutePath": "contracts/packages/oz/SafeMath.sol",
+ "file": "../packages/oz/SafeMath.sol",
+ "id": 3235,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 14286,
+ "src": "107:53:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3234,
+ "name": "SafeMath",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "115:8:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Ownable.sol",
+ "file": "../packages/oz/Ownable.sol",
+ "id": 3237,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 13837,
+ "src": "161:51:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3236,
+ "name": "Ownable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "169:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/OtokenInterface.sol",
+ "file": "../interfaces/OtokenInterface.sol",
+ "id": 3239,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 9726,
+ "src": "213:66:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3238,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "221:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/OracleInterface.sol",
+ "file": "../interfaces/OracleInterface.sol",
+ "id": 3241,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 9642,
+ "src": "280:66:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3240,
+ "name": "OracleInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "288:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/ERC20Interface.sol",
+ "file": "../interfaces/ERC20Interface.sol",
+ "id": 3243,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 9383,
+ "src": "347:64:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3242,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "355:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/libs/FixedPointInt256.sol",
+ "file": "../libs/FixedPointInt256.sol",
+ "id": 3245,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 10958,
+ "src": "412:69:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3244,
+ "name": "FixedPointInt256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "420:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": "FPI"
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/libs/MarginVault.sol",
+ "file": "../libs/MarginVault.sol",
+ "id": 3247,
+ "nodeType": "ImportDirective",
+ "scope": 5916,
+ "sourceUnit": 11512,
+ "src": "482:52:2",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 3246,
+ "name": "MarginVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "490:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 3249,
+ "name": "Ownable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 13836,
+ "src": "740:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Ownable_$13836",
+ "typeString": "contract Ownable"
+ }
+ },
+ "id": 3250,
+ "nodeType": "InheritanceSpecifier",
+ "src": "740:7:2"
+ }
+ ],
+ "contractDependencies": [
+ 13619,
+ 13836
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 3248,
+ "nodeType": "StructuredDocumentation",
+ "src": "536:174:2",
+ "text": " @title MarginCalculator\n @author Opyn\n @notice Calculator module that checks if a given vault is valid, calculates margin requirements, and settlement proceeds"
+ },
+ "fullyImplemented": true,
+ "id": 5915,
+ "linearizedBaseContracts": [
+ 5915,
+ 13836,
+ 13619
+ ],
+ "name": "MarginCalculator",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 3253,
+ "libraryName": {
+ "contractScope": null,
+ "id": 3251,
+ "name": "SafeMath",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 14285,
+ "src": "760:8:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SafeMath_$14285",
+ "typeString": "library SafeMath"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "754:27:2",
+ "typeName": {
+ "id": 3252,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "773:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "id": 3256,
+ "libraryName": {
+ "contractScope": null,
+ "id": 3254,
+ "name": "FPI",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10957,
+ "src": "792:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_FixedPointInt256_$10957",
+ "typeString": "library FixedPointInt256"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "786:32:2",
+ "typeName": {
+ "contractScope": null,
+ "id": 3255,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "800:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ }
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 3257,
+ "nodeType": "StructuredDocumentation",
+ "src": "824:75:2",
+ "text": "@dev decimals option upper bound value, spot shock and oracle deviation"
+ },
+ "id": 3260,
+ "mutability": "constant",
+ "name": "SCALING_FACTOR",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "904:45:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3258,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "904:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "3237",
+ "id": 3259,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "947:2:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_27_by_1",
+ "typeString": "int_const 27"
+ },
+ "value": "27"
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 3261,
+ "nodeType": "StructuredDocumentation",
+ "src": "956:55:2",
+ "text": "@dev decimals used by strike price and oracle price"
+ },
+ "id": 3264,
+ "mutability": "constant",
+ "name": "BASE",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "1016:34:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3262,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1016:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "38",
+ "id": 3263,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1049:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 3265,
+ "nodeType": "StructuredDocumentation",
+ "src": "1057:26:2",
+ "text": "@notice auction length"
+ },
+ "functionSelector": "e592301a",
+ "id": 3268,
+ "mutability": "constant",
+ "name": "AUCTION_TIME",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "1088:43:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3266,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1088:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "33363030",
+ "id": 3267,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1127:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_3600_by_1",
+ "typeString": "int_const 3600"
+ },
+ "value": "3600"
+ },
+ "visibility": "public"
+ },
+ {
+ "canonicalName": "MarginCalculator.VaultDetails",
+ "id": 3307,
+ "members": [
+ {
+ "constant": false,
+ "id": 3270,
+ "mutability": "mutable",
+ "name": "shortUnderlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1222:28:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3269,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1222:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3272,
+ "mutability": "mutable",
+ "name": "shortStrikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1260:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3271,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1260:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3274,
+ "mutability": "mutable",
+ "name": "shortCollateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1294:28:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3273,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1294:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3276,
+ "mutability": "mutable",
+ "name": "longUnderlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1332:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3275,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1332:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3278,
+ "mutability": "mutable",
+ "name": "longStrikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1369:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3277,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1369:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3280,
+ "mutability": "mutable",
+ "name": "longCollateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1402:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3279,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1402:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3282,
+ "mutability": "mutable",
+ "name": "shortStrikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1439:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3281,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1439:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3284,
+ "mutability": "mutable",
+ "name": "shortExpiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1473:28:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3283,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1473:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3286,
+ "mutability": "mutable",
+ "name": "shortCollateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1511:31:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3285,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1511:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3288,
+ "mutability": "mutable",
+ "name": "longStrikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1552:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3287,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1552:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3290,
+ "mutability": "mutable",
+ "name": "longExpiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1585:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3289,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1585:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3292,
+ "mutability": "mutable",
+ "name": "longCollateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1622:30:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3291,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1622:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3294,
+ "mutability": "mutable",
+ "name": "collateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1662:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3293,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1662:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3296,
+ "mutability": "mutable",
+ "name": "vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1698:17:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3295,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1698:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3298,
+ "mutability": "mutable",
+ "name": "isShortPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1725:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3297,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1725:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3300,
+ "mutability": "mutable",
+ "name": "isLongPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1750:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3299,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1750:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3302,
+ "mutability": "mutable",
+ "name": "hasLong",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1774:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3301,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1774:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3304,
+ "mutability": "mutable",
+ "name": "hasShort",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1796:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3303,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1796:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3306,
+ "mutability": "mutable",
+ "name": "hasCollateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3307,
+ "src": "1819:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3305,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1819:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "name": "VaultDetails",
+ "nodeType": "StructDefinition",
+ "scope": 5915,
+ "src": "1192:652:2",
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3308,
+ "nodeType": "StructuredDocumentation",
+ "src": "1850:38:2",
+ "text": "@dev oracle deviation value (1e27)"
+ },
+ "id": 3310,
+ "mutability": "mutable",
+ "name": "oracleDeviation",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "1893:32:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3309,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1893:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3311,
+ "nodeType": "StructuredDocumentation",
+ "src": "1932:21:2",
+ "text": "@dev FixedPoint 0"
+ },
+ "id": 3318,
+ "mutability": "mutable",
+ "name": "ZERO",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "1958:61:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3312,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "1958:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3315,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2011:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "id": 3316,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "2014:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3313,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "1992:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 3314,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "1992:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3317,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1992:27:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3319,
+ "nodeType": "StructuredDocumentation",
+ "src": "2026:103:2",
+ "text": "@dev mapping to store dust amount per option collateral asset (scaled by collateral asset decimals)"
+ },
+ "id": 3323,
+ "mutability": "mutable",
+ "name": "dust",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "2134:41:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 3322,
+ "keyType": {
+ "id": 3320,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2142:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "2134:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 3321,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2153:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3324,
+ "nodeType": "StructuredDocumentation",
+ "src": "2182:69:2",
+ "text": "@dev mapping to store array of time to expiry for a given product"
+ },
+ "id": 3329,
+ "mutability": "mutable",
+ "name": "timesToExpiryForProduct",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "2256:62:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$",
+ "typeString": "mapping(bytes32 => uint256[])"
+ },
+ "typeName": {
+ "id": 3328,
+ "keyType": {
+ "id": 3325,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2264:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "2256:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$",
+ "typeString": "mapping(bytes32 => uint256[])"
+ },
+ "valueType": {
+ "baseType": {
+ "id": 3326,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2275:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3327,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "2275:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3330,
+ "nodeType": "StructuredDocumentation",
+ "src": "2325:104:2",
+ "text": "@dev mapping to store option upper bound value at specific time to expiry for a given product (1e27)"
+ },
+ "id": 3336,
+ "mutability": "mutable",
+ "name": "maxPriceAtTimeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "2434:79:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ },
+ "typeName": {
+ "id": 3335,
+ "keyType": {
+ "id": 3331,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2442:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "2434:47:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ },
+ "valueType": {
+ "id": 3334,
+ "keyType": {
+ "id": 3332,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2461:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "2453:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ },
+ "valueType": {
+ "id": 3333,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2472:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3337,
+ "nodeType": "StructuredDocumentation",
+ "src": "2520:78:2",
+ "text": "@dev mapping to store shock value for spot price of a given product (1e27)"
+ },
+ "id": 3341,
+ "mutability": "mutable",
+ "name": "spotShock",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "2603:46:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
+ "typeString": "mapping(bytes32 => uint256)"
+ },
+ "typeName": {
+ "id": 3340,
+ "keyType": {
+ "id": 3338,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2611:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "2603:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
+ "typeString": "mapping(bytes32 => uint256)"
+ },
+ "valueType": {
+ "id": 3339,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2622:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 3342,
+ "nodeType": "StructuredDocumentation",
+ "src": "2656:22:2",
+ "text": "@dev oracle module"
+ },
+ "functionSelector": "7dc0d1d0",
+ "id": 3344,
+ "mutability": "mutable",
+ "name": "oracle",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5915,
+ "src": "2683:29:2",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3343,
+ "name": "OracleInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9641,
+ "src": "2683:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 3345,
+ "nodeType": "StructuredDocumentation",
+ "src": "2719:58:2",
+ "text": "@notice emits an event when collateral dust is updated"
+ },
+ "id": 3351,
+ "name": "CollateralDustUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 3350,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3347,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3351,
+ "src": "2810:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3346,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2810:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3349,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "dust",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3351,
+ "src": "2838:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3348,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2838:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2809:42:2"
+ },
+ "src": "2782:70:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 3352,
+ "nodeType": "StructuredDocumentation",
+ "src": "2857:82:2",
+ "text": "@notice emits an event when new time to expiry is added for a specific product"
+ },
+ "id": 3358,
+ "name": "TimeToExpiryAdded",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 3357,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3354,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3358,
+ "src": "2968:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3353,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2968:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3356,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "timeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3358,
+ "src": "2997:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3355,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2997:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2967:51:2"
+ },
+ "src": "2944:75:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 3359,
+ "nodeType": "StructuredDocumentation",
+ "src": "3024:102:2",
+ "text": "@notice emits an event when new upper bound value is added for a specific time to expiry timestamp"
+ },
+ "id": 3367,
+ "name": "MaxPriceAdded",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 3366,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3361,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3367,
+ "src": "3151:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3360,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "3151:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3363,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "timeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3367,
+ "src": "3180:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3362,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3180:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3365,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "value",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3367,
+ "src": "3202:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3364,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3202:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3150:66:2"
+ },
+ "src": "3131:86:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 3368,
+ "nodeType": "StructuredDocumentation",
+ "src": "3222:87:2",
+ "text": "@notice emits an event when updating upper bound value at specific expiry timestamp"
+ },
+ "id": 3378,
+ "name": "MaxPriceUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 3377,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3370,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3378,
+ "src": "3336:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3369,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "3336:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3372,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "timeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3378,
+ "src": "3365:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3371,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3365:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3374,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "oldValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3378,
+ "src": "3387:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3373,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3387:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3376,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "newValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3378,
+ "src": "3405:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3375,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3405:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3335:87:2"
+ },
+ "src": "3314:109:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 3379,
+ "nodeType": "StructuredDocumentation",
+ "src": "3428:82:2",
+ "text": "@notice emits an event when spot shock value is updated for a specific product"
+ },
+ "id": 3385,
+ "name": "SpotShockUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 3384,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3381,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "product",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3385,
+ "src": "3538:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3380,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "3538:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3383,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "spotShock",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3385,
+ "src": "3563:17:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3382,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3563:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3537:44:2"
+ },
+ "src": "3515:67:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 3386,
+ "nodeType": "StructuredDocumentation",
+ "src": "3587:65:2",
+ "text": "@notice emits an event when oracle deviation value is updated"
+ },
+ "id": 3390,
+ "name": "OracleDeviationUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 3389,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3388,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "oracleDeviation",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3390,
+ "src": "3686:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3387,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3686:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3685:25:2"
+ },
+ "src": "3657:54:2"
+ },
+ {
+ "body": {
+ "id": 3412,
+ "nodeType": "Block",
+ "src": "3840:135:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 3402,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3397,
+ "name": "_oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3393,
+ "src": "3858:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3400,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3877:1:2",
+ "subdenomination": null,
+ "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": 3399,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "3869:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 3398,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3869:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 3401,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3869:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "3858:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20696e76616c6964206f7261636c652061646472657373",
+ "id": 3403,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3881:42:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5f315f6809898f30ea4a76c491c6539492d021995af634bf0d3ad55ba1b9e7b",
+ "typeString": "literal_string \"MarginCalculator: invalid oracle address\""
+ },
+ "value": "MarginCalculator: invalid oracle address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c5f315f6809898f30ea4a76c491c6539492d021995af634bf0d3ad55ba1b9e7b",
+ "typeString": "literal_string \"MarginCalculator: invalid oracle address\""
+ }
+ ],
+ "id": 3396,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3850:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3404,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3850:74:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3405,
+ "nodeType": "ExpressionStatement",
+ "src": "3850:74:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3410,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 3406,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "3935:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3408,
+ "name": "_oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3393,
+ "src": "3960:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3407,
+ "name": "OracleInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9641,
+ "src": "3944:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OracleInterface_$9641_$",
+ "typeString": "type(contract OracleInterface)"
+ }
+ },
+ "id": 3409,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3944:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "src": "3935:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 3411,
+ "nodeType": "ExpressionStatement",
+ "src": "3935:33:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3391,
+ "nodeType": "StructuredDocumentation",
+ "src": "3717:82:2",
+ "text": " @notice constructor\n @param _oracle oracle module address"
+ },
+ "id": 3413,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3394,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3393,
+ "mutability": "mutable",
+ "name": "_oracle",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3413,
+ "src": "3816:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3392,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3816:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3815:17:2"
+ },
+ "returnParameters": {
+ "id": 3395,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3840:0:2"
+ },
+ "scope": 5915,
+ "src": "3804:171:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 3441,
+ "nodeType": "Block",
+ "src": "4301:189:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3426,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3424,
+ "name": "_dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3418,
+ "src": "4319:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3425,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4327:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "4319:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a206475737420616d6f756e742073686f756c642062652067726561746572207468616e207a65726f",
+ "id": 3427,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4330:59:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_289bfe2b70a9f1e6a021ef6f875dbe379bded2c5eaef80c7180e76d78b4f18b2",
+ "typeString": "literal_string \"MarginCalculator: dust amount should be greater than zero\""
+ },
+ "value": "MarginCalculator: dust amount should be greater than zero"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_289bfe2b70a9f1e6a021ef6f875dbe379bded2c5eaef80c7180e76d78b4f18b2",
+ "typeString": "literal_string \"MarginCalculator: dust amount should be greater than zero\""
+ }
+ ],
+ "id": 3423,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "4311:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3428,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4311:79:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3429,
+ "nodeType": "ExpressionStatement",
+ "src": "4311:79:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3434,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3430,
+ "name": "dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3323,
+ "src": "4401:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 3432,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3431,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3416,
+ "src": "4406:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "4401:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 3433,
+ "name": "_dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3418,
+ "src": "4421:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4401:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3435,
+ "nodeType": "ExpressionStatement",
+ "src": "4401:25:2"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3437,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3416,
+ "src": "4464:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3438,
+ "name": "_dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3418,
+ "src": "4477:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3436,
+ "name": "CollateralDustUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3351,
+ "src": "4442:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 3439,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4442:41:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3440,
+ "nodeType": "EmitStatement",
+ "src": "4437:46:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3414,
+ "nodeType": "StructuredDocumentation",
+ "src": "3981:233:2",
+ "text": " @notice set dust amount for collateral asset\n @dev can only be called by owner\n @param _collateral collateral asset address\n @param _dust dust amount, should be scaled by collateral asset decimals"
+ },
+ "functionSelector": "9a783d11",
+ "id": 3442,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 3421,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 3420,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4291:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4291:9:2"
+ }
+ ],
+ "name": "setCollateralDust",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3419,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3416,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3442,
+ "src": "4246:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3415,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4246:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3418,
+ "mutability": "mutable",
+ "name": "_dust",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3442,
+ "src": "4267:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3417,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4267:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4245:36:2"
+ },
+ "returnParameters": {
+ "id": 3422,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4301:0:2"
+ },
+ "scope": 5915,
+ "src": "4219:271:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3601,
+ "nodeType": "Block",
+ "src": "5121:1574:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3466,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3463,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "5139:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3464,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5139:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3465,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5163:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "5139:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20696e76616c69642074696d657320746f20657870697279206172726179",
+ "id": 3467,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5166:49:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_23ac746e6b5cd1a16e34f6c074fbb65fe2c4f201eb86c69f128e08b45fee904e",
+ "typeString": "literal_string \"MarginCalculator: invalid times to expiry array\""
+ },
+ "value": "MarginCalculator: invalid times to expiry array"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_23ac746e6b5cd1a16e34f6c074fbb65fe2c4f201eb86c69f128e08b45fee904e",
+ "typeString": "literal_string \"MarginCalculator: invalid times to expiry array\""
+ }
+ ],
+ "id": 3462,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "5131:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3468,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5131:85:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3469,
+ "nodeType": "ExpressionStatement",
+ "src": "5131:85:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3475,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3471,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "5234:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3472,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5234:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3473,
+ "name": "_values",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3457,
+ "src": "5259:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3474,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5259:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5234:39:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20696e76616c69642076616c756573206172726179",
+ "id": 3476,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5275:40:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_36ad8f73155baf28d8f94a459e9f7b192715e12a73e96f2b8432da32738ea123",
+ "typeString": "literal_string \"MarginCalculator: invalid values array\""
+ },
+ "value": "MarginCalculator: invalid values array"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_36ad8f73155baf28d8f94a459e9f7b192715e12a73e96f2b8432da32738ea123",
+ "typeString": "literal_string \"MarginCalculator: invalid values array\""
+ }
+ ],
+ "id": 3470,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "5226:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3477,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5226:90:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3478,
+ "nodeType": "ExpressionStatement",
+ "src": "5226:90:2"
+ },
+ {
+ "assignments": [
+ 3480
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3480,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3601,
+ "src": "5355:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3479,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "5355:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3487,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3482,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3445,
+ "src": "5393:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3483,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3447,
+ "src": "5406:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3484,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3449,
+ "src": "5415:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3485,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3451,
+ "src": "5428:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3481,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "5377:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3486,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5377:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5355:80:2"
+ },
+ {
+ "assignments": [
+ 3492
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3492,
+ "mutability": "mutable",
+ "name": "expiryArray",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3601,
+ "src": "5446:29:2",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 3490,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5446:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3491,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "5446:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3496,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3493,
+ "name": "timesToExpiryForProduct",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3329,
+ "src": "5478:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$",
+ "typeString": "mapping(bytes32 => uint256[] storage ref)"
+ }
+ },
+ "id": 3495,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3494,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3480,
+ "src": "5502:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5478:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
+ "typeString": "uint256[] storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5446:68:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 3515,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3501,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3498,
+ "name": "expiryArray",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3492,
+ "src": "5717:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[] storage pointer"
+ }
+ },
+ "id": 3499,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5717:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3500,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5739:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "5717:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 3502,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "5716:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3513,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3503,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "5746:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3505,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3504,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5761:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5746:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3506,
+ "name": "expiryArray",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3492,
+ "src": "5766:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[] storage pointer"
+ }
+ },
+ "id": 3512,
+ "indexExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 3510,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5801:1:2",
+ "subdenomination": null,
+ "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"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3507,
+ "name": "expiryArray",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3492,
+ "src": "5778:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[] storage pointer"
+ }
+ },
+ "id": 3508,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5778:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3509,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "5778:22:2",
+ "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": 3511,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5778:25:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5766:38:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5746:58:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 3514,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "5745:60:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "5716:89:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20657870697279206172726179206973206e6f7420696e206f72646572",
+ "id": 3516,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5819:48:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d235d6e924554d689db5daace22f4d5166c405e2f95c9cfd70eff22d60e9e578",
+ "typeString": "literal_string \"MarginCalculator: expiry array is not in order\""
+ },
+ "value": "MarginCalculator: expiry array is not in order"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d235d6e924554d689db5daace22f4d5166c405e2f95c9cfd70eff22d60e9e578",
+ "typeString": "literal_string \"MarginCalculator: expiry array is not in order\""
+ }
+ ],
+ "id": 3497,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "5695:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3517,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5695:182:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3518,
+ "nodeType": "ExpressionStatement",
+ "src": "5695:182:2"
+ },
+ {
+ "body": {
+ "id": 3599,
+ "nodeType": "Block",
+ "src": "5940:749:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3536,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 3532,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6018:1:2",
+ "subdenomination": null,
+ "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"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3530,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6012:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3531,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "6012:5:2",
+ "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": 3533,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6012:8:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3534,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6023:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3535,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "6023:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6012:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 3552,
+ "nodeType": "IfStatement",
+ "src": "6008:169:2",
+ "trueBody": {
+ "id": 3551,
+ "nodeType": "Block",
+ "src": "6046:131:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3547,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3538,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6072:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3540,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3539,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6087:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6072:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3541,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6092:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3546,
+ "indexExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 3544,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6113:1:2",
+ "subdenomination": null,
+ "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"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3542,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6107:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3543,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "6107:5:2",
+ "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": 3545,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6107:8:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6092:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6072:44:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a2074696d652073686f756c6420626520696e206f72646572",
+ "id": 3548,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6118:43:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ac523a832cf7a846b5ed0729a7c385f624fccc055b7eb821627e5b7f4d199658",
+ "typeString": "literal_string \"MarginCalculator: time should be in order\""
+ },
+ "value": "MarginCalculator: time should be in order"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_ac523a832cf7a846b5ed0729a7c385f624fccc055b7eb821627e5b7f4d199658",
+ "typeString": "literal_string \"MarginCalculator: time should be in order\""
+ }
+ ],
+ "id": 3537,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "6064:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3549,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6064:98:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3550,
+ "nodeType": "ExpressionStatement",
+ "src": "6064:98:2"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3558,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3554,
+ "name": "_values",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3457,
+ "src": "6199:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3556,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3555,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6207:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6199:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3557,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6212:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "6199:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a206e6f2065787069727920757070657220626f756e642076616c756520666f756e64",
+ "id": 3559,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6215:53:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_230e2c231023dfdb16de3167c8665a7f5ee1f3464682a5bff48730f6fbad3e68",
+ "typeString": "literal_string \"MarginCalculator: no expiry upper bound value found\""
+ },
+ "value": "MarginCalculator: no expiry upper bound value found"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_230e2c231023dfdb16de3167c8665a7f5ee1f3464682a5bff48730f6fbad3e68",
+ "typeString": "literal_string \"MarginCalculator: no expiry upper bound value found\""
+ }
+ ],
+ "id": 3553,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "6191:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3560,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6191:78:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3561,
+ "nodeType": "ExpressionStatement",
+ "src": "6191:78:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3572,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3562,
+ "name": "maxPriceAtTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3336,
+ "src": "6369:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 3567,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3563,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3480,
+ "src": "6392:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6369:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 3568,
+ "indexExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3564,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6405:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3566,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3565,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6420:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6405:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "6369:54:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3569,
+ "name": "_values",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3457,
+ "src": "6426:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3571,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3570,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6434:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6426:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6369:67:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3573,
+ "nodeType": "ExpressionStatement",
+ "src": "6369:67:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3577,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6515:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3579,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3578,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6530:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6515:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3574,
+ "name": "expiryArray",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3492,
+ "src": "6498:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[] storage pointer"
+ }
+ },
+ "id": 3576,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "push",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "6498:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$__$",
+ "typeString": "function (uint256)"
+ }
+ },
+ "id": 3580,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6498:35:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3581,
+ "nodeType": "ExpressionStatement",
+ "src": "6498:35:2"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3583,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3480,
+ "src": "6571:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3584,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6584:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3586,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3585,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6599:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6584:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3582,
+ "name": "TimeToExpiryAdded",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3358,
+ "src": "6553:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
+ "typeString": "function (bytes32,uint256)"
+ }
+ },
+ "id": 3587,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6553:49:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3588,
+ "nodeType": "EmitStatement",
+ "src": "6548:54:2"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3590,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3480,
+ "src": "6635:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3591,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "6648:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3593,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3592,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6663:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6648:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3594,
+ "name": "_values",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3457,
+ "src": "6667:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3596,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3595,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "6675:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6667:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3589,
+ "name": "MaxPriceAdded",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3367,
+ "src": "6621:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (bytes32,uint256,uint256)"
+ }
+ },
+ "id": 3597,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6621:57:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3598,
+ "nodeType": "EmitStatement",
+ "src": "6616:62:2"
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3526,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3523,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "5908:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 3524,
+ "name": "_timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3454,
+ "src": "5912:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 3525,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5912:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5908:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 3600,
+ "initializationExpression": {
+ "assignments": [
+ 3520
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3520,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3600,
+ "src": "5893:9:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3519,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5893:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3522,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3521,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5905:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5893:13:2"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3528,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "5935:3:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 3527,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3520,
+ "src": "5935:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3529,
+ "nodeType": "ExpressionStatement",
+ "src": "5935:3:2"
+ },
+ "nodeType": "ForStatement",
+ "src": "5888:801:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3443,
+ "nodeType": "StructuredDocumentation",
+ "src": "4496:383:2",
+ "text": " @notice set product upper bound values\n @dev can only be called by owner\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _collateral otoken collateral asset\n @param _isPut otoken type\n @param _timesToExpiry array of times to expiry timestamp\n @param _values upper bound values array"
+ },
+ "functionSelector": "7f519b72",
+ "id": 3602,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 3460,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 3459,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "5111:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5111:9:2"
+ }
+ ],
+ "name": "setUpperBoundValues",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3458,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3445,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3602,
+ "src": "4922:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3444,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4922:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3447,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3602,
+ "src": "4951:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3446,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4951:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3449,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3602,
+ "src": "4976:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3448,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4976:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3451,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3602,
+ "src": "5005:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3450,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "5005:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3454,
+ "mutability": "mutable",
+ "name": "_timesToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3602,
+ "src": "5026:33:2",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 3452,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5026:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3453,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "5026:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3457,
+ "mutability": "mutable",
+ "name": "_values",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3602,
+ "src": "5069:26:2",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 3455,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5069:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3456,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "5069:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4912:189:2"
+ },
+ "returnParameters": {
+ "id": 3461,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5121:0:2"
+ },
+ "scope": 5915,
+ "src": "4884:1811:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3666,
+ "nodeType": "Block",
+ "src": "7325:557:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3623,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3621,
+ "name": "_value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3615,
+ "src": "7343:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3622,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7352:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "7343:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20696e76616c6964206f7074696f6e20757070657220626f756e642076616c7565",
+ "id": 3624,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7355:52:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_632c43da955655da07900241a95e214bfce34045b7d4127dab8b24a5ff4942e3",
+ "typeString": "literal_string \"MarginCalculator: invalid option upper bound value\""
+ },
+ "value": "MarginCalculator: invalid option upper bound value"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_632c43da955655da07900241a95e214bfce34045b7d4127dab8b24a5ff4942e3",
+ "typeString": "literal_string \"MarginCalculator: invalid option upper bound value\""
+ }
+ ],
+ "id": 3620,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "7335:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3625,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7335:73:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3626,
+ "nodeType": "ExpressionStatement",
+ "src": "7335:73:2"
+ },
+ {
+ "assignments": [
+ 3628
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3628,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3666,
+ "src": "7419:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3627,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "7419:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3635,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3630,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3605,
+ "src": "7457:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3631,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3607,
+ "src": "7470:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3632,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3609,
+ "src": "7479:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3633,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3611,
+ "src": "7492:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3629,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "7441:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3634,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7441:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7419:80:2"
+ },
+ {
+ "assignments": [
+ 3637
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3637,
+ "mutability": "mutable",
+ "name": "oldMaxPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3666,
+ "src": "7509:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3636,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7509:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3643,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3638,
+ "name": "maxPriceAtTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3336,
+ "src": "7531:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 3640,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3639,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3628,
+ "src": "7554:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7531:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 3642,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3641,
+ "name": "_timeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3613,
+ "src": "7567:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7531:50:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7509:72:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3647,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3645,
+ "name": "oldMaxPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3637,
+ "src": "7600:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3646,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7615:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "7600:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20757070657220626f756e642076616c7565206e6f7420666f756e64",
+ "id": 3648,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7618:47:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c8618f2c3be910591508260635141b21cf361d1c1c43e6e73cc24fb18a2b8145",
+ "typeString": "literal_string \"MarginCalculator: upper bound value not found\""
+ },
+ "value": "MarginCalculator: upper bound value not found"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c8618f2c3be910591508260635141b21cf361d1c1c43e6e73cc24fb18a2b8145",
+ "typeString": "literal_string \"MarginCalculator: upper bound value not found\""
+ }
+ ],
+ "id": 3644,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "7592:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3649,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7592:74:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3650,
+ "nodeType": "ExpressionStatement",
+ "src": "7592:74:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3657,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3651,
+ "name": "maxPriceAtTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3336,
+ "src": "7736:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 3654,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3652,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3628,
+ "src": "7759:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7736:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 3655,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3653,
+ "name": "_timeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3613,
+ "src": "7772:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "7736:50:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 3656,
+ "name": "_value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3615,
+ "src": "7789:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "7736:59:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3658,
+ "nodeType": "ExpressionStatement",
+ "src": "7736:59:2"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3660,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3628,
+ "src": "7827:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3661,
+ "name": "_timeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3613,
+ "src": "7840:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3662,
+ "name": "oldMaxPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3637,
+ "src": "7855:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3663,
+ "name": "_value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3615,
+ "src": "7868:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3659,
+ "name": "MaxPriceUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3378,
+ "src": "7811:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (bytes32,uint256,uint256,uint256)"
+ }
+ },
+ "id": 3664,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7811:64:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3665,
+ "nodeType": "EmitStatement",
+ "src": "7806:69:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3603,
+ "nodeType": "StructuredDocumentation",
+ "src": "6701:404:2",
+ "text": " @notice set option upper bound value for specific time to expiry (1e27)\n @dev can only be called by owner\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _collateral otoken collateral asset\n @param _isPut otoken type\n @param _timeToExpiry option time to expiry timestamp\n @param _value upper bound value"
+ },
+ "functionSelector": "7ad7f800",
+ "id": 3667,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 3618,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 3617,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "7315:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "7315:9:2"
+ }
+ ],
+ "name": "updateUpperBoundValue",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3616,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3605,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3667,
+ "src": "7150:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3604,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7150:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3607,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3667,
+ "src": "7179:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3606,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7179:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3609,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3667,
+ "src": "7204:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3608,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7204:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3611,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3667,
+ "src": "7233:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3610,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7233:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3613,
+ "mutability": "mutable",
+ "name": "_timeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3667,
+ "src": "7254:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3612,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7254:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3615,
+ "mutability": "mutable",
+ "name": "_value",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3667,
+ "src": "7285:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3614,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7285:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7140:165:2"
+ },
+ "returnParameters": {
+ "id": 3619,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "7325:0:2"
+ },
+ "scope": 5915,
+ "src": "7110:772:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3710,
+ "nodeType": "Block",
+ "src": "8394:283:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3686,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3684,
+ "name": "_shockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3678,
+ "src": "8412:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3685,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8426:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "8412:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20696e76616c69642073706f742073686f636b2076616c7565",
+ "id": 3687,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8429:44:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_e2fe0d463fe2577971df230eaa93e3020033c6a49635ef94afd5c2e7ac4c85e3",
+ "typeString": "literal_string \"MarginCalculator: invalid spot shock value\""
+ },
+ "value": "MarginCalculator: invalid spot shock value"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_e2fe0d463fe2577971df230eaa93e3020033c6a49635ef94afd5c2e7ac4c85e3",
+ "typeString": "literal_string \"MarginCalculator: invalid spot shock value\""
+ }
+ ],
+ "id": 3683,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "8404:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3688,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8404:70:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3689,
+ "nodeType": "ExpressionStatement",
+ "src": "8404:70:2"
+ },
+ {
+ "assignments": [
+ 3691
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3691,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3710,
+ "src": "8485:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3690,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "8485:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3698,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3693,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3670,
+ "src": "8523:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3694,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3672,
+ "src": "8536:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3695,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3674,
+ "src": "8545:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3696,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3676,
+ "src": "8558:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3692,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "8507:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3697,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8507:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "8485:80:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3703,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3699,
+ "name": "spotShock",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3341,
+ "src": "8576:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
+ "typeString": "mapping(bytes32 => uint256)"
+ }
+ },
+ "id": 3701,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3700,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3691,
+ "src": "8586:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "8576:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 3702,
+ "name": "_shockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3678,
+ "src": "8601:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8576:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3704,
+ "nodeType": "ExpressionStatement",
+ "src": "8576:36:2"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3706,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3691,
+ "src": "8645:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3707,
+ "name": "_shockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3678,
+ "src": "8658:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3705,
+ "name": "SpotShockUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3385,
+ "src": "8628:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
+ "typeString": "function (bytes32,uint256)"
+ }
+ },
+ "id": 3708,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8628:42:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3709,
+ "nodeType": "EmitStatement",
+ "src": "8623:47:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3668,
+ "nodeType": "StructuredDocumentation",
+ "src": "7888:321:2",
+ "text": " @notice set spot shock value, scaled to 1e27\n @dev can only be called by owner\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _collateral otoken collateral asset\n @param _isPut otoken type\n @param _shockValue spot shock value"
+ },
+ "functionSelector": "8aab8fa5",
+ "id": 3711,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 3681,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 3680,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "8384:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "8384:9:2"
+ }
+ ],
+ "name": "setSpotShock",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3679,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3670,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3711,
+ "src": "8245:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3669,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8245:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3672,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3711,
+ "src": "8274:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3671,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8274:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3674,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3711,
+ "src": "8299:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3673,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8299:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3676,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3711,
+ "src": "8328:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3675,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "8328:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3678,
+ "mutability": "mutable",
+ "name": "_shockValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3711,
+ "src": "8349:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3677,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8349:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8235:139:2"
+ },
+ "returnParameters": {
+ "id": 3682,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "8394:0:2"
+ },
+ "scope": 5915,
+ "src": "8214:463:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3727,
+ "nodeType": "Block",
+ "src": "8890:95:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3721,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 3719,
+ "name": "oracleDeviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3310,
+ "src": "8900:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 3720,
+ "name": "_deviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3714,
+ "src": "8918:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8900:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3722,
+ "nodeType": "ExpressionStatement",
+ "src": "8900:28:2"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3724,
+ "name": "_deviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3714,
+ "src": "8967:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3723,
+ "name": "OracleDeviationUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3390,
+ "src": "8944:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
+ "typeString": "function (uint256)"
+ }
+ },
+ "id": 3725,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8944:34:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3726,
+ "nodeType": "EmitStatement",
+ "src": "8939:39:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3712,
+ "nodeType": "StructuredDocumentation",
+ "src": "8683:135:2",
+ "text": " @notice set oracle deviation (1e27)\n @dev can only be called by owner\n @param _deviation deviation value"
+ },
+ "functionSelector": "c73547e3",
+ "id": 3728,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 3717,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 3716,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "8880:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "8880:9:2"
+ }
+ ],
+ "name": "setOracleDeviation",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3715,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3714,
+ "mutability": "mutable",
+ "name": "_deviation",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3728,
+ "src": "8851:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3713,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8851:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8850:20:2"
+ },
+ "returnParameters": {
+ "id": 3718,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "8890:0:2"
+ },
+ "scope": 5915,
+ "src": "8823:162:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3740,
+ "nodeType": "Block",
+ "src": "9217:41:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3736,
+ "name": "dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3323,
+ "src": "9234:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 3738,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3737,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3731,
+ "src": "9239:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "9234:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 3735,
+ "id": 3739,
+ "nodeType": "Return",
+ "src": "9227:24:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3729,
+ "nodeType": "StructuredDocumentation",
+ "src": "8991:141:2",
+ "text": " @notice get dust amount for collateral asset\n @param _collateral collateral asset address\n @return dust amount"
+ },
+ "functionSelector": "6ccb9506",
+ "id": 3741,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getCollateralDust",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3732,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3731,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3741,
+ "src": "9164:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3730,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9164:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9163:21:2"
+ },
+ "returnParameters": {
+ "id": 3735,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3734,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3741,
+ "src": "9208:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3733,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9208:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9207:9:2"
+ },
+ "scope": 5915,
+ "src": "9137:121:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3769,
+ "nodeType": "Block",
+ "src": "9730:150:2",
+ "statements": [
+ {
+ "assignments": [
+ 3757
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3757,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3769,
+ "src": "9740:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3756,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "9740:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3764,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3759,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3744,
+ "src": "9778:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3760,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3746,
+ "src": "9791:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3761,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3748,
+ "src": "9800:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3762,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3750,
+ "src": "9813:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3758,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "9762:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3763,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9762:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "9740:80:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3765,
+ "name": "timesToExpiryForProduct",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3329,
+ "src": "9837:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$",
+ "typeString": "mapping(bytes32 => uint256[] storage ref)"
+ }
+ },
+ "id": 3767,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3766,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3757,
+ "src": "9861:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "9837:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
+ "typeString": "uint256[] storage ref"
+ }
+ },
+ "functionReturnParameters": 3755,
+ "id": 3768,
+ "nodeType": "Return",
+ "src": "9830:43:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3742,
+ "nodeType": "StructuredDocumentation",
+ "src": "9264:284:2",
+ "text": " @notice get times to expiry for a specific product\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _collateral otoken collateral asset\n @param _isPut otoken type\n @return array of times to expiry"
+ },
+ "functionSelector": "47d438a5",
+ "id": 3770,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getTimesToExpiry",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3751,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3744,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3770,
+ "src": "9588:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3743,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9588:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3746,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3770,
+ "src": "9617:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3745,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9617:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3748,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3770,
+ "src": "9642:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3747,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9642:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3750,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3770,
+ "src": "9671:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3749,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "9671:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9578:110:2"
+ },
+ "returnParameters": {
+ "id": 3755,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3754,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3770,
+ "src": "9712:16:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 3752,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9712:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 3753,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "9712:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9711:18:2"
+ },
+ "scope": 5915,
+ "src": "9553:327:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3801,
+ "nodeType": "Block",
+ "src": "10450:165:2",
+ "statements": [
+ {
+ "assignments": [
+ 3787
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3787,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3801,
+ "src": "10460:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3786,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "10460:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3794,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3789,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3773,
+ "src": "10498:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3790,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3775,
+ "src": "10511:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3791,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3777,
+ "src": "10520:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3792,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3779,
+ "src": "10533:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3788,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "10482:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3793,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10482:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "10460:80:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3795,
+ "name": "maxPriceAtTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3336,
+ "src": "10558:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 3797,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3796,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3787,
+ "src": "10581:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "10558:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 3799,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3798,
+ "name": "_timeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3781,
+ "src": "10594:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "10558:50:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 3785,
+ "id": 3800,
+ "nodeType": "Return",
+ "src": "10551:57:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3771,
+ "nodeType": "StructuredDocumentation",
+ "src": "9886:365:2",
+ "text": " @notice get option upper bound value for specific time to expiry\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _collateral otoken collateral asset\n @param _isPut otoken type\n @param _timeToExpiry option time to expiry timestamp\n @return option upper bound value (1e27)"
+ },
+ "functionSelector": "dc1b3f00",
+ "id": 3802,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getMaxPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3782,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3773,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3802,
+ "src": "10286:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3772,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10286:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3775,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3802,
+ "src": "10315:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3774,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10315:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3777,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3802,
+ "src": "10340:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3776,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10340:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3779,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3802,
+ "src": "10369:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3778,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "10369:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3781,
+ "mutability": "mutable",
+ "name": "_timeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3802,
+ "src": "10390:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3780,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "10390:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10276:141:2"
+ },
+ "returnParameters": {
+ "id": 3785,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3784,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3802,
+ "src": "10441:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3783,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "10441:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10440:9:2"
+ },
+ "scope": 5915,
+ "src": "10256:359:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3829,
+ "nodeType": "Block",
+ "src": "11063:137:2",
+ "statements": [
+ {
+ "assignments": [
+ 3817
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3817,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3829,
+ "src": "11073:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3816,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "11073:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3824,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3819,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3805,
+ "src": "11111:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3820,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3807,
+ "src": "11124:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3821,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3809,
+ "src": "11133:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3822,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3811,
+ "src": "11146:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3818,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "11095:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3823,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11095:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "11073:80:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 3825,
+ "name": "spotShock",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3341,
+ "src": "11171:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
+ "typeString": "mapping(bytes32 => uint256)"
+ }
+ },
+ "id": 3827,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 3826,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3817,
+ "src": "11181:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11171:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 3815,
+ "id": 3828,
+ "nodeType": "Return",
+ "src": "11164:29:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3803,
+ "nodeType": "StructuredDocumentation",
+ "src": "10621:273:2",
+ "text": " @notice get spot shock value\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _collateral otoken collateral asset\n @param _isPut otoken type\n @return _shockValue spot shock value (1e27)"
+ },
+ "functionSelector": "46345900",
+ "id": 3830,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getSpotShock",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3812,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3805,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3830,
+ "src": "10930:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3804,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10930:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3807,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3830,
+ "src": "10959:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3806,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10959:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3809,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3830,
+ "src": "10984:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3808,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10984:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3811,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3830,
+ "src": "11013:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3810,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "11013:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10920:110:2"
+ },
+ "returnParameters": {
+ "id": 3815,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3814,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3830,
+ "src": "11054:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3813,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11054:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11053:9:2"
+ },
+ "scope": 5915,
+ "src": "10899:301:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3838,
+ "nodeType": "Block",
+ "src": "11365:39:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 3836,
+ "name": "oracleDeviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3310,
+ "src": "11382:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 3835,
+ "id": 3837,
+ "nodeType": "Return",
+ "src": "11375:22:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3831,
+ "nodeType": "StructuredDocumentation",
+ "src": "11206:92:2",
+ "text": " @notice get oracle deviation\n @return oracle deviation value (1e27)"
+ },
+ "functionSelector": "b29d5ee8",
+ "id": 3839,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOracleDeviation",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3832,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11330:2:2"
+ },
+ "returnParameters": {
+ "id": 3835,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3834,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3839,
+ "src": "11356:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3833,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11356:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11355:9:2"
+ },
+ "scope": 5915,
+ "src": "11303:101:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3916,
+ "nodeType": "Block",
+ "src": "12501:1034:2",
+ "statements": [
+ {
+ "assignments": [
+ 3864
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3864,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3916,
+ "src": "12511:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 3863,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "12511:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3871,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3866,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3842,
+ "src": "12549:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3867,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3844,
+ "src": "12562:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3868,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3846,
+ "src": "12571:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3869,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3858,
+ "src": "12584:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3865,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "12533:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 3870,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12533:58:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12511:80:2"
+ },
+ {
+ "assignments": [
+ 3875
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3875,
+ "mutability": "mutable",
+ "name": "shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3916,
+ "src": "12675:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3874,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "12675:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3881,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3878,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3848,
+ "src": "12733:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3879,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "12747:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3876,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "12714:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 3877,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "12714:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3880,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12714:38:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12675:77:2"
+ },
+ {
+ "assignments": [
+ 3885
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3885,
+ "mutability": "mutable",
+ "name": "shortStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3916,
+ "src": "12809:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3884,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "12809:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3891,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3888,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3850,
+ "src": "12867:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3889,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "12881:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3886,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "12848:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 3887,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "12848:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3890,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12848:38:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12809:77:2"
+ },
+ {
+ "assignments": [
+ 3895
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3895,
+ "mutability": "mutable",
+ "name": "shortUnderlyingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3916,
+ "src": "12953:45:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3894,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "12953:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3901,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3898,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3852,
+ "src": "13020:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3899,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "13038:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3896,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "13001:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 3897,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "13001:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3900,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13001:42:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12953:90:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3905,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3864,
+ "src": "13246:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3906,
+ "name": "shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3875,
+ "src": "13279:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3907,
+ "name": "shortUnderlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3895,
+ "src": "13312:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3908,
+ "name": "shortStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3885,
+ "src": "13354:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3909,
+ "name": "_shortExpiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3854,
+ "src": "13387:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3910,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3858,
+ "src": "13430:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3904,
+ "name": "_getNakedMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4866,
+ "src": "13201:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (bytes32,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,uint256,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3911,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13201:253:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3912,
+ "name": "_collateralDecimals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3856,
+ "src": "13472:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 3913,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13509:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3902,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "13167:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 3903,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10745,
+ "src": "13167:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_uint256_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,uint256,bool) pure returns (uint256)"
+ }
+ },
+ "id": 3914,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13167:361:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 3862,
+ "id": 3915,
+ "nodeType": "Return",
+ "src": "13148:380:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3840,
+ "nodeType": "StructuredDocumentation",
+ "src": "11410:742:2",
+ "text": " @notice return the collateral required for naked margin vault, in collateral asset decimals\n @dev _shortAmount, _strikePrice and _underlyingPrice should be scaled by 1e8\n @param _underlying underlying asset address\n @param _strike strike asset address\n @param _collateral collateral asset address\n @param _shortAmount amount of short otoken\n @param _strikePrice otoken strike price\n @param _underlyingPrice otoken underlying price\n @param _shortExpiryTimestamp otoken expiry timestamp\n @param _collateralDecimals otoken collateral asset decimals\n @param _isPut otoken type\n @return collateral required for a naked margin vault, in collateral asset decimals"
+ },
+ "functionSelector": "0b0509fb",
+ "id": 3917,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getNakedMarginRequired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3859,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3842,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12198:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3841,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12198:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3844,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12227:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3843,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12227:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3846,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12252:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3845,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12252:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3848,
+ "mutability": "mutable",
+ "name": "_shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12281:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3847,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12281:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3850,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12311:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3849,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12311:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3852,
+ "mutability": "mutable",
+ "name": "_underlyingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12341:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3851,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12341:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3854,
+ "mutability": "mutable",
+ "name": "_shortExpiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12375:29:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3853,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12375:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3856,
+ "mutability": "mutable",
+ "name": "_collateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12414:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3855,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12414:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3858,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12451:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3857,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "12451:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12188:280:2"
+ },
+ "returnParameters": {
+ "id": 3862,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3861,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3917,
+ "src": "12492:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3860,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12492:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12491:9:2"
+ },
+ "scope": 5915,
+ "src": "12157:1378:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 3998,
+ "nodeType": "Block",
+ "src": "13909:1165:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 3931,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3926,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3920,
+ "src": "13927:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 3929,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13946:1:2",
+ "subdenomination": null,
+ "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": 3928,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "13938:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 3927,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13938:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 3930,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13938:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "13927:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20496e76616c696420746f6b656e2061646472657373",
+ "id": 3932,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13950:41:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_145ddb731f75f74e218ae087caaa8ba9b0902dadb220721ba1993c2795dd6b40",
+ "typeString": "literal_string \"MarginCalculator: Invalid token address\""
+ },
+ "value": "MarginCalculator: Invalid token address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_145ddb731f75f74e218ae087caaa8ba9b0902dadb220721ba1993c2795dd6b40",
+ "typeString": "literal_string \"MarginCalculator: Invalid token address\""
+ }
+ ],
+ "id": 3925,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "13919:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3933,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13919:73:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3934,
+ "nodeType": "ExpressionStatement",
+ "src": "13919:73:2"
+ },
+ {
+ "assignments": [
+ 3936,
+ 3938,
+ 3940,
+ 3942,
+ 3944,
+ 3946
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3936,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14017:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3935,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "14017:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3938,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14049:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3937,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "14049:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3940,
+ "mutability": "mutable",
+ "name": "strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14081:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3939,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "14081:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3942,
+ "mutability": "mutable",
+ "name": "strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14114:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3941,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "14114:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3944,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14147:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3943,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "14147:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 3946,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14175:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 3945,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "14175:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3950,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3948,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3920,
+ "src": "14216:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3947,
+ "name": "_getOtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5914,
+ "src": "14198:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "function (address) view returns (address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 3949,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14198:26:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "14003:221:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 3954,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 3952,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "14243:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 3953,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3944,
+ "src": "14250:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "14243:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a204f746f6b656e206e6f74206578706972656420796574",
+ "id": 3955,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "14258:42:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_18d89d86f1ebb90ae2ff2b901a61bd6324f35f2625bb147beef208982ebd6104",
+ "typeString": "literal_string \"MarginCalculator: Otoken not expired yet\""
+ },
+ "value": "MarginCalculator: Otoken not expired yet"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_18d89d86f1ebb90ae2ff2b901a61bd6324f35f2625bb147beef208982ebd6104",
+ "typeString": "literal_string \"MarginCalculator: Otoken not expired yet\""
+ }
+ ],
+ "id": 3951,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "14235:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 3956,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14235:66:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 3957,
+ "nodeType": "ExpressionStatement",
+ "src": "14235:66:2"
+ },
+ {
+ "assignments": [
+ 3961
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3961,
+ "mutability": "mutable",
+ "name": "cashValueInStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14312:42:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3960,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "14312:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3969,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3963,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3938,
+ "src": "14391:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3964,
+ "name": "strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3940,
+ "src": "14415:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3965,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3944,
+ "src": "14440:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3966,
+ "name": "strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3942,
+ "src": "14460:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3967,
+ "name": "isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3946,
+ "src": "14485:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 3962,
+ "name": "_getExpiredCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4371,
+ "src": "14357:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (address,address,uint256,uint256,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3968,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14357:143:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "14312:188:2"
+ },
+ {
+ "assignments": [
+ 3973
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3973,
+ "mutability": "mutable",
+ "name": "cashValueInCollateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14511:46:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 3972,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "14511:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3980,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3975,
+ "name": "cashValueInStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3961,
+ "src": "14601:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3976,
+ "name": "strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3940,
+ "src": "14632:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3977,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3936,
+ "src": "14657:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 3978,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3944,
+ "src": "14681:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 3974,
+ "name": "_convertAmountOnExpiryPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5158,
+ "src": "14560:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_address_$_t_address_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,address,address,uint256) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 3979,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14560:137:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "14511:186:2"
+ },
+ {
+ "assignments": [
+ 3982
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 3982,
+ "mutability": "mutable",
+ "name": "collateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3998,
+ "src": "14915:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3981,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "14915:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 3991,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3986,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3936,
+ "src": "14967:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 3985,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "14952:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 3987,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14952:26:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 3988,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "decimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9363,
+ "src": "14952:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
+ "typeString": "function () view external returns (uint8)"
+ }
+ },
+ "id": 3989,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14952:37:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ ],
+ "id": 3984,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "14944:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint256_$",
+ "typeString": "type(uint256)"
+ },
+ "typeName": {
+ "id": 3983,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "14944:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 3990,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "14944:46:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "14915:75:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 3994,
+ "name": "collateralDecimals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3982,
+ "src": "15042:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 3995,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "15062:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 3992,
+ "name": "cashValueInCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3973,
+ "src": "15007:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 3993,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10745,
+ "src": "15007:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_uint256_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,uint256,bool) pure returns (uint256)"
+ }
+ },
+ "id": 3996,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "15007:60:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 3924,
+ "id": 3997,
+ "nodeType": "Return",
+ "src": "15000:67:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 3918,
+ "nodeType": "StructuredDocumentation",
+ "src": "13541:284:2",
+ "text": " @notice return the cash value of an expired oToken, denominated in collateral\n @param _otoken oToken address\n @return how much collateral can be taken out by 1 otoken unit, scaled by 1e8,\n or how much collateral can be taken out for 1 (1e8) oToken"
+ },
+ "functionSelector": "47840930",
+ "id": 3999,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getExpiredPayoutRate",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 3921,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3920,
+ "mutability": "mutable",
+ "name": "_otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3999,
+ "src": "13860:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 3919,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13860:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "13859:17:2"
+ },
+ "returnParameters": {
+ "id": 3924,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 3923,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 3999,
+ "src": "13900:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 3922,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "13900:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "13899:9:2"
+ },
+ "scope": 5915,
+ "src": "13830:1244:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "canonicalName": "MarginCalculator.ShortScaledDetails",
+ "id": 4006,
+ "members": [
+ {
+ "constant": false,
+ "id": 4001,
+ "mutability": "mutable",
+ "name": "shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4006,
+ "src": "15249:29:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4000,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "15249:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4003,
+ "mutability": "mutable",
+ "name": "shortStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4006,
+ "src": "15288:29:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4002,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "15288:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4005,
+ "mutability": "mutable",
+ "name": "shortUnderlyingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4006,
+ "src": "15327:38:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4004,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "15327:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "name": "ShortScaledDetails",
+ "nodeType": "StructDefinition",
+ "scope": 5915,
+ "src": "15213:159:2",
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 4193,
+ "nodeType": "Block",
+ "src": "16218:2941:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4027,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 4025,
+ "name": "_vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4011,
+ "src": "16300:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 4026,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16314:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "16300:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20696e76616c6964207661756c74207479706520746f206c6971756964617465",
+ "id": 4028,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16317:51:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ba5fec273ea7a172fd7ab97ab01e614f994c62f8b4999ad896dcf456adb6692b",
+ "typeString": "literal_string \"MarginCalculator: invalid vault type to liquidate\""
+ },
+ "value": "MarginCalculator: invalid vault type to liquidate"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_ba5fec273ea7a172fd7ab97ab01e614f994c62f8b4999ad896dcf456adb6692b",
+ "typeString": "literal_string \"MarginCalculator: invalid vault type to liquidate\""
+ }
+ ],
+ "id": 4024,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "16292:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 4029,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16292:77:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4030,
+ "nodeType": "ExpressionStatement",
+ "src": "16292:77:2"
+ },
+ {
+ "assignments": [
+ 4032
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4032,
+ "mutability": "mutable",
+ "name": "vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "16380:32:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4031,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "16380:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4037,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4034,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4009,
+ "src": "16432:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4035,
+ "name": "_vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4011,
+ "src": "16440:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4033,
+ "name": "_getVaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5519,
+ "src": "16415:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$returns$_t_struct$_VaultDetails_$3307_memory_ptr_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256) view returns (struct MarginCalculator.VaultDetails memory)"
+ }
+ },
+ "id": 4036,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16415:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "16380:71:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 4040,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "16529:22:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4038,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "16530:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4039,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "16530:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 4046,
+ "nodeType": "IfStatement",
+ "src": "16525:48:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 4041,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16561:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4042,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16568:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4043,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16571:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "id": 4044,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "16560:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
+ "typeString": "tuple(bool,int_const 0,int_const 0)"
+ }
+ },
+ "functionReturnParameters": 4023,
+ "id": 4045,
+ "nodeType": "Return",
+ "src": "16553:20:2"
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4051,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 4048,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "16592:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4049,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "16598:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4050,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3284,
+ "src": "16598:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "16592:39:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a2063616e206e6f74206c6971756964617465206578706972656420706f736974696f6e",
+ "id": 4052,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "16633:54:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8a981ec84c192f4c5595bd3241a8819016d334b75675f4c3fbffe5c7b04f4727",
+ "typeString": "literal_string \"MarginCalculator: can not liquidate expired position\""
+ },
+ "value": "MarginCalculator: can not liquidate expired position"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8a981ec84c192f4c5595bd3241a8819016d334b75675f4c3fbffe5c7b04f4727",
+ "typeString": "literal_string \"MarginCalculator: can not liquidate expired position\""
+ }
+ ],
+ "id": 4047,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "16584:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 4053,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16584:104:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4054,
+ "nodeType": "ExpressionStatement",
+ "src": "16584:104:2"
+ },
+ {
+ "assignments": [
+ 4056,
+ 4058
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4056,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "16700:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4055,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16700:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4058,
+ "mutability": "mutable",
+ "name": "timestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "16715:17:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4057,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16715:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4068,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4061,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "16778:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4062,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "16778:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4065,
+ "name": "_roundId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4015,
+ "src": "16832:8:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4064,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "16825:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint80_$",
+ "typeString": "type(uint80)"
+ },
+ "typeName": {
+ "id": 4063,
+ "name": "uint80",
+ "nodeType": "ElementaryTypeName",
+ "src": "16825:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 4066,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16825:16:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint80",
+ "typeString": "uint80"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint80",
+ "typeString": "uint80"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4059,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "16736:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 4060,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getChainlinkRoundData",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9596,
+ "src": "16736:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_uint80_$returns$_t_uint256_$_t_uint256_$",
+ "typeString": "function (address,uint80) view external returns (uint256,uint256)"
+ }
+ },
+ "id": 4067,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16736:115:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "16699:152:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4072,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 4070,
+ "name": "timestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4058,
+ "src": "16972:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 4071,
+ "name": "_vaultLatestUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4013,
+ "src": "16984:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "16972:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a2061756374696f6e2074696d657374616d702073686f756c6420626520706f7374207661756c74206c617465737420757064617465",
+ "id": 4073,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "17016:72:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0d0dccaf960d594c207854e01b5605b5f79143d528b6c1a5c317880aad9c490c",
+ "typeString": "literal_string \"MarginCalculator: auction timestamp should be post vault latest update\""
+ },
+ "value": "MarginCalculator: auction timestamp should be post vault latest update"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_0d0dccaf960d594c207854e01b5605b5f79143d528b6c1a5c317880aad9c490c",
+ "typeString": "literal_string \"MarginCalculator: auction timestamp should be post vault latest update\""
+ }
+ ],
+ "id": 4069,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "16951:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 4074,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "16951:147:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4075,
+ "nodeType": "ExpressionStatement",
+ "src": "16951:147:2"
+ },
+ {
+ "assignments": [
+ 4077
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4077,
+ "mutability": "mutable",
+ "name": "shortDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "17207:38:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4076,
+ "name": "ShortScaledDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 4006,
+ "src": "17207:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_storage_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4099,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4081,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4009,
+ "src": "17313:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 4082,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10978,
+ "src": "17313:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4084,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4083,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "17333:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "17313:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4085,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "17337:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4079,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "17294:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4080,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "17294:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4086,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "17294:48:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4089,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "17388:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4090,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3282,
+ "src": "17388:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4091,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "17419:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4087,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "17369:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4088,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "17369:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4092,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "17369:55:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4095,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4056,
+ "src": "17479:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4096,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "17486:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4093,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "17460:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4094,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "17460:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4097,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "17460:31:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "id": 4078,
+ "name": "ShortScaledDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4006,
+ "src": "17248:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_ShortScaledDetails_$4006_storage_ptr_$",
+ "typeString": "type(struct MarginCalculator.ShortScaledDetails storage pointer)"
+ }
+ },
+ "id": 4098,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "names": [
+ "shortAmount",
+ "shortStrike",
+ "shortUnderlyingPrice"
+ ],
+ "nodeType": "FunctionCall",
+ "src": "17248:254:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "17207:295:2"
+ },
+ {
+ "assignments": [
+ 4101
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4101,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "17513:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 4100,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "17513:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4112,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4103,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "17564:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4104,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "17564:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4105,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "17611:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4106,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3272,
+ "src": "17611:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4107,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "17654:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4108,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "17654:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4109,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "17701:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4110,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "17701:23:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4102,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "17535:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 4111,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "17535:199:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "17513:221:2"
+ },
+ {
+ "assignments": [
+ 4116
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4116,
+ "mutability": "mutable",
+ "name": "depositedCollateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "17830:44:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4115,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "17830:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4126,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4119,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4009,
+ "src": "17909:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 4120,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10984,
+ "src": "17909:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4122,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4121,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "17934:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "17909:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4123,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "17950:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4124,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3294,
+ "src": "17950:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4117,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "17877:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4118,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "17877:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4125,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "17877:114:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "17830:161:2"
+ },
+ {
+ "assignments": [
+ 4130
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4130,
+ "mutability": "mutable",
+ "name": "collateralRequired",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "18002:43:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4129,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "18002:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4144,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4132,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4101,
+ "src": "18085:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4133,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18110:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4134,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortAmount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4001,
+ "src": "18110:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4135,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18148:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4136,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4005,
+ "src": "18148:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4137,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18195:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4138,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrike",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4003,
+ "src": "18195:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4139,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "18233:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4140,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3284,
+ "src": "18233:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4141,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "18280:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4142,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "18280:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4131,
+ "name": "_getNakedMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4866,
+ "src": "18048:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (bytes32,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,uint256,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4143,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18048:265:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "18002:311:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4147,
+ "name": "depositedCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4116,
+ "src": "18457:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4145,
+ "name": "collateralRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4130,
+ "src": "18420:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4146,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isLessThanOrEqual",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10956,
+ "src": "18420:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 4148,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18420:57:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 4155,
+ "nodeType": "IfStatement",
+ "src": "18416:108:2",
+ "trueBody": {
+ "id": 4154,
+ "nodeType": "Block",
+ "src": "18479:45:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 4149,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "18501:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4150,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "18508:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4151,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "18511:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "id": 4152,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "18500:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
+ "typeString": "tuple(bool,int_const 0,int_const 0)"
+ }
+ },
+ "functionReturnParameters": 4023,
+ "id": 4153,
+ "nodeType": "Return",
+ "src": "18493:20:2"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 4159
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4159,
+ "mutability": "mutable",
+ "name": "cashValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "18534:34:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4158,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "18534:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4168,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4161,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18598:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4162,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrike",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4003,
+ "src": "18598:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4163,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18636:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4164,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4005,
+ "src": "18636:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4165,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "18683:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4166,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "18683:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4160,
+ "name": "_getCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5840,
+ "src": "18571:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4167,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18571:145:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "18534:182:2"
+ },
+ {
+ "assignments": [
+ 4170
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4170,
+ "mutability": "mutable",
+ "name": "debtPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4193,
+ "src": "18787:17:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4169,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "18787:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4184,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4172,
+ "name": "depositedCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4116,
+ "src": "18834:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4173,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18867:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4174,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortAmount",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4001,
+ "src": "18867:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4175,
+ "name": "cashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4159,
+ "src": "18905:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4176,
+ "name": "shortDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4077,
+ "src": "18928:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_ShortScaledDetails_$4006_memory_ptr",
+ "typeString": "struct MarginCalculator.ShortScaledDetails memory"
+ }
+ },
+ "id": 4177,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4005,
+ "src": "18928:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4178,
+ "name": "timestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4058,
+ "src": "18975:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4179,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "18998:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4180,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3294,
+ "src": "18998:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4181,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "19043:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4182,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "19043:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4171,
+ "name": "_getDebtPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5313,
+ "src": "18807:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_uint256_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,uint256,uint256,bool) view returns (uint256)"
+ }
+ },
+ "id": 4183,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "18807:269:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "18787:289:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 4185,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "19095:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ {
+ "argumentTypes": null,
+ "id": 4186,
+ "name": "debtPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4170,
+ "src": "19101:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4187,
+ "name": "dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3323,
+ "src": "19112:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 4190,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4188,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4032,
+ "src": "19117:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4189,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "19117:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "19112:39:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 4191,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "19094:58:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(bool,uint256,uint256)"
+ }
+ },
+ "functionReturnParameters": 4023,
+ "id": 4192,
+ "nodeType": "Return",
+ "src": "19087:65:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4007,
+ "nodeType": "StructuredDocumentation",
+ "src": "15378:553:2",
+ "text": " @notice check if a specific vault is undercollateralized at a specific chainlink round\n @dev if the vault is of type 0, the function will revert\n @param _vault vault struct\n @param _vaultType vault type (0 for max loss/spread and 1 for naked margin vault)\n @param _vaultLatestUpdate vault latest update (timestamp when latest vault state change happened)\n @param _roundId chainlink round id\n @return isLiquidatable, true if vault is undercollateralized, liquidation price and collateral dust amount"
+ },
+ "functionSelector": "a6c56907",
+ "id": 4194,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isLiquidatable",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4016,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4009,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "15969:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4008,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "15969:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4011,
+ "mutability": "mutable",
+ "name": "_vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "16010:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4010,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16010:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4013,
+ "mutability": "mutable",
+ "name": "_vaultLatestUpdate",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "16038:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4012,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16038:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4015,
+ "mutability": "mutable",
+ "name": "_roundId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "16074:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4014,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16074:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "15959:137:2"
+ },
+ "returnParameters": {
+ "id": 4023,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4018,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "16157:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 4017,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "16157:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4020,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "16175:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4019,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16175:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4022,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4194,
+ "src": "16196:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4021,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "16196:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "16143:70:2"
+ },
+ "scope": 5915,
+ "src": "15936:3223:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 4218,
+ "nodeType": "Block",
+ "src": "19658:143:2",
+ "statements": [
+ {
+ "assignments": [
+ 4207
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4207,
+ "mutability": "mutable",
+ "name": "vaultDetail",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4218,
+ "src": "19668:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4206,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "19668:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4212,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4209,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4197,
+ "src": "19719:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4210,
+ "name": "_vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4199,
+ "src": "19727:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4208,
+ "name": "_getVaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5519,
+ "src": "19702:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$returns$_t_struct$_VaultDetails_$3307_memory_ptr_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256) view returns (struct MarginCalculator.VaultDetails memory)"
+ }
+ },
+ "id": 4211,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "19702:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "19668:70:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4214,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4197,
+ "src": "19774:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4215,
+ "name": "vaultDetail",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4207,
+ "src": "19782:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ ],
+ "id": 4213,
+ "name": "_getMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4711,
+ "src": "19755:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Vault_$10985_memory_ptr_$_t_struct$_VaultDetails_$3307_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct MarginVault.Vault memory,struct MarginCalculator.VaultDetails memory) view returns (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4216,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "19755:39:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "tuple(struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "functionReturnParameters": 4205,
+ "id": 4217,
+ "nodeType": "Return",
+ "src": "19748:46:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4195,
+ "nodeType": "StructuredDocumentation",
+ "src": "19165:305:2",
+ "text": " @notice calculate required collateral margin for a vault\n @param _vault theoretical vault that needs to be checked\n @param _vaultType vault type\n @return the vault collateral amount, and marginRequired the minimal amount of collateral needed in a vault, scaled to 1e27"
+ },
+ "functionSelector": "053fe57c",
+ "id": 4219,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getMarginRequired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4200,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4197,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4219,
+ "src": "19502:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4196,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "19502:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4199,
+ "mutability": "mutable",
+ "name": "_vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4219,
+ "src": "19535:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4198,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "19535:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "19501:53:2"
+ },
+ "returnParameters": {
+ "id": 4205,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4202,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4219,
+ "src": "19602:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4201,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "19602:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4204,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4219,
+ "src": "19628:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4203,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "19628:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "19601:52:2"
+ },
+ "scope": 5915,
+ "src": "19475:326:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 4316,
+ "nodeType": "Block",
+ "src": "20690:1307:2",
+ "statements": [
+ {
+ "assignments": [
+ 4232
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4232,
+ "mutability": "mutable",
+ "name": "vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "20700:32:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4231,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "20700:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4237,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4234,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4222,
+ "src": "20752:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4235,
+ "name": "_vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4224,
+ "src": "20760:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4233,
+ "name": "_getVaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5519,
+ "src": "20735:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Vault_$10985_memory_ptr_$_t_uint256_$returns$_t_struct$_VaultDetails_$3307_memory_ptr_$",
+ "typeString": "function (struct MarginVault.Vault memory,uint256) view returns (struct MarginCalculator.VaultDetails memory)"
+ }
+ },
+ "id": 4236,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20735:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "20700:71:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4239,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4222,
+ "src": "20868:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4240,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "20876:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ ],
+ "id": 4238,
+ "name": "_checkIsValidVault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5654,
+ "src": "20849:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_Vault_$10985_memory_ptr_$_t_struct$_VaultDetails_$3307_memory_ptr_$returns$__$",
+ "typeString": "function (struct MarginVault.Vault memory,struct MarginCalculator.VaultDetails memory) pure"
+ }
+ },
+ "id": 4241,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "20849:40:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4242,
+ "nodeType": "ExpressionStatement",
+ "src": "20849:40:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 4249,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 4245,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "20981:22:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4243,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "20982:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4244,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "20982:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 4248,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "21007:21:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4246,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "21008:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4247,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "21008:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "20981:47:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 4266,
+ "nodeType": "IfStatement",
+ "src": "20977:190:2",
+ "trueBody": {
+ "id": 4265,
+ "nodeType": "Block",
+ "src": "21030:137:2",
+ "statements": [
+ {
+ "assignments": [
+ 4251
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4251,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4265,
+ "src": "21044:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4250,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "21044:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4260,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4252,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "21061:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4253,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3306,
+ "src": "21061:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4258,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "21120:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "id": 4259,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "21061:60:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4254,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4222,
+ "src": "21090:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 4255,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10984,
+ "src": "21090:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4257,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4256,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "21115:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "21090:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "21044:77:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 4261,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4251,
+ "src": "21143:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 4262,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "21151:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ }
+ ],
+ "id": 4263,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "21142:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "functionReturnParameters": 4230,
+ "id": 4264,
+ "nodeType": "Return",
+ "src": "21135:21:2"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 4270,
+ 4272
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4270,
+ "mutability": "mutable",
+ "name": "collateralAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "21252:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4269,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "21252:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4272,
+ "mutability": "mutable",
+ "name": "collateralRequired",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "21295:43:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4271,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "21295:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4277,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4274,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4222,
+ "src": "21374:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4275,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "21394:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ ],
+ "id": 4273,
+ "name": "_getMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4711,
+ "src": "21342:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Vault_$10985_memory_ptr_$_t_struct$_VaultDetails_$3307_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct MarginVault.Vault memory,struct MarginCalculator.VaultDetails memory) view returns (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4276,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21342:74:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "tuple(struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "21251:165:2"
+ },
+ {
+ "assignments": [
+ 4281
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4281,
+ "mutability": "mutable",
+ "name": "excessCollateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "21426:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4280,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "21426:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4286,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4284,
+ "name": "collateralRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4272,
+ "src": "21491:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4282,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4270,
+ "src": "21470:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4283,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "21470:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4285,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21470:40:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "21426:84:2"
+ },
+ {
+ "assignments": [
+ 4288
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4288,
+ "mutability": "mutable",
+ "name": "isExcess",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "21521:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 4287,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "21521:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4293,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4291,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "21575:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4289,
+ "name": "excessCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4281,
+ "src": "21537:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4290,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isGreaterThanOrEqual",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10922,
+ "src": "21537:37:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 4292,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21537:43:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "21521:59:2"
+ },
+ {
+ "assignments": [
+ 4295
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4295,
+ "mutability": "mutable",
+ "name": "collateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "21590:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4294,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "21590:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4303,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4296,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "21619:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4297,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "21619:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4300,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "21704:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4301,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3286,
+ "src": "21704:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 4302,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "21619:121:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4298,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4232,
+ "src": "21654:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4299,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longCollateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3292,
+ "src": "21654:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "21590:150:2"
+ },
+ {
+ "assignments": [
+ 4305
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4305,
+ "mutability": "mutable",
+ "name": "excessCollateralExternal",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4316,
+ "src": "21843:32:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4304,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "21843:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4311,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4308,
+ "name": "collateralDecimals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4295,
+ "src": "21908:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4309,
+ "name": "isExcess",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4288,
+ "src": "21928:8:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4306,
+ "name": "excessCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4281,
+ "src": "21878:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4307,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10745,
+ "src": "21878:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_uint256_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,uint256,bool) pure returns (uint256)"
+ }
+ },
+ "id": 4310,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "21878:59:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "21843:94:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 4312,
+ "name": "excessCollateralExternal",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4305,
+ "src": "21955:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4313,
+ "name": "isExcess",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4288,
+ "src": "21981:8:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 4314,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "21954:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "functionReturnParameters": 4230,
+ "id": 4315,
+ "nodeType": "Return",
+ "src": "21947:43:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4220,
+ "nodeType": "StructuredDocumentation",
+ "src": "19807:732:2",
+ "text": " @notice returns the amount of collateral that can be removed from an actual or a theoretical vault\n @dev return amount is denominated in the collateral asset for the oToken in the vault, or the collateral asset in the vault\n @param _vault theoretical vault that needs to be checked\n @param _vaultType vault type (0 for spread/max loss, 1 for naked margin)\n @return excessCollateral the amount by which the margin is above or below the required amount\n @return isExcess True if there is excess margin in the vault, False if there is a deficit of margin in the vault\n if True, collateral can be taken out from the vault, if False, additional collateral needs to be added to vault"
+ },
+ "functionSelector": "cd43fbfb",
+ "id": 4317,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getExcessCollateral",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4225,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4222,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4317,
+ "src": "20573:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4221,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "20573:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4224,
+ "mutability": "mutable",
+ "name": "_vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4317,
+ "src": "20606:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4223,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "20606:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "20572:53:2"
+ },
+ "returnParameters": {
+ "id": 4230,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4227,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4317,
+ "src": "20671:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4226,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "20671:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4229,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4317,
+ "src": "20680:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 4228,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "20680:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "20670:15:2"
+ },
+ "scope": 5915,
+ "src": "20544:1453:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 4370,
+ "nodeType": "Block",
+ "src": "22837:621:2",
+ "statements": [
+ {
+ "assignments": [
+ 4336
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4336,
+ "mutability": "mutable",
+ "name": "strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4370,
+ "src": "22902:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4335,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "22902:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4342,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4339,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4326,
+ "src": "22960:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4340,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "22974:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4337,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "22941:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4338,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "22941:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "22941:38:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "22902:77:2"
+ },
+ {
+ "assignments": [
+ 4346
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4346,
+ "mutability": "mutable",
+ "name": "one",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4370,
+ "src": "22989:28:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4345,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "22989:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4352,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 4349,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "23039:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4350,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "23042:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4347,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "23020:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4348,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "23020:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4351,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "23020:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "22989:55:2"
+ },
+ {
+ "assignments": [
+ 4356
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4356,
+ "mutability": "mutable",
+ "name": "underlyingPriceInStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4370,
+ "src": "23139:48:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4355,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "23139:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4363,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4358,
+ "name": "one",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4346,
+ "src": "23231:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4359,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4320,
+ "src": "23302:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4360,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4322,
+ "src": "23327:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4361,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4324,
+ "src": "23348:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4357,
+ "name": "_convertAmountOnExpiryPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5158,
+ "src": "23190:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_address_$_t_address_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,address,address,uint256) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4362,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "23190:184:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "23139:235:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4365,
+ "name": "strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4336,
+ "src": "23406:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4366,
+ "name": "underlyingPriceInStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4356,
+ "src": "23419:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4367,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4328,
+ "src": "23444:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4364,
+ "name": "_getCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5840,
+ "src": "23392:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4368,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "23392:59:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 4332,
+ "id": 4369,
+ "nodeType": "Return",
+ "src": "23385:66:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4318,
+ "nodeType": "StructuredDocumentation",
+ "src": "22003:605:2",
+ "text": " @notice return the cash value of an expired oToken, denominated in strike asset\n @dev for a call, return Max (0, underlyingPriceInStrike - otoken.strikePrice)\n @dev for a put, return Max(0, otoken.strikePrice - underlyingPriceInStrike)\n @param _underlying otoken underlying asset\n @param _strike otoken strike asset\n @param _expiryTimestamp otoken expiry timestamp\n @param _strikePrice otoken strike price\n @param _strikePrice true if otoken is put otherwise false\n @return cash value of an expired otoken, denominated in the strike asset"
+ },
+ "id": 4371,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getExpiredCashValue",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4329,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4320,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4371,
+ "src": "22652:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 4319,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "22652:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4322,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4371,
+ "src": "22681:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 4321,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "22681:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4324,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4371,
+ "src": "22706:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4323,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "22706:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4326,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4371,
+ "src": "22740:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4325,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "22740:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4328,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4371,
+ "src": "22770:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 4327,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "22770:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "22642:145:2"
+ },
+ "returnParameters": {
+ "id": 4332,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4331,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4371,
+ "src": "22811:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4330,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "22811:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "22810:26:2"
+ },
+ "scope": 5915,
+ "src": "22613:845:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "canonicalName": "MarginCalculator.OtokenDetails",
+ "id": 4382,
+ "members": [
+ {
+ "constant": false,
+ "id": 4373,
+ "mutability": "mutable",
+ "name": "otokenUnderlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4382,
+ "src": "23556:29:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 4372,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "23556:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4375,
+ "mutability": "mutable",
+ "name": "otokenCollateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4382,
+ "src": "23595:29:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 4374,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "23595:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4377,
+ "mutability": "mutable",
+ "name": "otokenStrikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4382,
+ "src": "23634:25:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 4376,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "23634:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4379,
+ "mutability": "mutable",
+ "name": "otokenExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4382,
+ "src": "23669:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4378,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "23669:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4381,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4382,
+ "src": "23699:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 4380,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "23699:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "name": "OtokenDetails",
+ "nodeType": "StructDefinition",
+ "scope": 5915,
+ "src": "23525:191:2",
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 4710,
+ "nodeType": "Block",
+ "src": "24285:6675:2",
+ "statements": [
+ {
+ "assignments": [
+ 4397
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4397,
+ "mutability": "mutable",
+ "name": "shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4710,
+ "src": "24295:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4396,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "24295:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4410,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4398,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "24334:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4399,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "24334:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4408,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "24434:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4409,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "24334:104:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4402,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4385,
+ "src": "24390:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 4403,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10978,
+ "src": "24390:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4405,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4404,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "24410:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "24390:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4406,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "24414:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4400,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "24371:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4401,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "24371:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4407,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "24371:48:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24295:143:2"
+ },
+ {
+ "assignments": [
+ 4414
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4414,
+ "mutability": "mutable",
+ "name": "longAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4710,
+ "src": "24448:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4413,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "24448:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4427,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4415,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "24486:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4416,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "24486:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4425,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "24584:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4426,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "24486:102:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4419,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4385,
+ "src": "24541:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 4420,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10981,
+ "src": "24541:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4422,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4421,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "24560:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "24541:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4423,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "24564:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4417,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "24522:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4418,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "24522:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4424,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "24522:47:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24448:140:2"
+ },
+ {
+ "assignments": [
+ 4431
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4431,
+ "mutability": "mutable",
+ "name": "collateralAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4710,
+ "src": "24598:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4430,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "24598:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4445,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4432,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "24642:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4433,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3306,
+ "src": "24642:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4443,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "24780:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4444,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "24642:142:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4436,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4385,
+ "src": "24703:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 4437,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10984,
+ "src": "24703:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4439,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4438,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "24728:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "24703:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4440,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "24732:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4441,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3294,
+ "src": "24732:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4434,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "24684:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4435,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "24684:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4442,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "24684:81:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24598:186:2"
+ },
+ {
+ "assignments": [
+ 4449
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4449,
+ "mutability": "mutable",
+ "name": "shortStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4710,
+ "src": "24794:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4448,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "24794:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4460,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4450,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "24833:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4451,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "24833:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4458,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "24941:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4459,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "24833:112:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4454,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "24889:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4455,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3282,
+ "src": "24889:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4456,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "24921:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4452,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "24870:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4453,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "24870:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4457,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "24870:56:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "24794:151:2"
+ },
+ {
+ "assignments": [
+ 4462
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4462,
+ "mutability": "mutable",
+ "name": "otokenDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4710,
+ "src": "25004:34:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4461,
+ "name": "OtokenDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 4382,
+ "src": "25004:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_storage_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4500,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4464,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25068:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4465,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "25068:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4468,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25130:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4469,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3276,
+ "src": "25130:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 4470,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "25068:95:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4466,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25093:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4467,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "25093:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4471,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25177:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4472,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "25177:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4475,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25239:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4476,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3280,
+ "src": "25239:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 4477,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "25177:95:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4473,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25202:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4474,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "25202:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4478,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25286:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4479,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "25286:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4482,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25344:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4483,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3278,
+ "src": "25344:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 4484,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "25286:87:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4480,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25311:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4481,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3272,
+ "src": "25311:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4485,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25387:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4486,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "25387:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4489,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25449:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4490,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3290,
+ "src": "25449:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 4491,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "25387:95:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4487,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25412:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4488,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3284,
+ "src": "25412:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4492,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25496:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4493,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "25496:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4496,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25548:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4497,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isLongPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3300,
+ "src": "25548:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 4498,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "25496:75:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4494,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25521:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4495,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "25521:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "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": 4463,
+ "name": "OtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4382,
+ "src": "25041:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_OtokenDetails_$4382_storage_ptr_$",
+ "typeString": "type(struct MarginCalculator.OtokenDetails storage pointer)"
+ }
+ },
+ "id": 4499,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "25041:540:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "25004:577:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4504,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 4501,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "25596:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4502,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "25602:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4503,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenExpiry",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4379,
+ "src": "25602:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "25596:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 4708,
+ "nodeType": "Block",
+ "src": "29420:1534:2",
+ "statements": [
+ {
+ "assignments": [
+ 4646
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4646,
+ "mutability": "mutable",
+ "name": "shortCashValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4708,
+ "src": "29529:39:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4645,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "29529:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4663,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4647,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "29571:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4648,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "29571:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4661,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "29926:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4662,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "29571:359:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4650,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "29654:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4651,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "29654:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4652,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "29710:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4653,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3272,
+ "src": "29710:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4654,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "29762:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4655,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3284,
+ "src": "29762:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4656,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "29818:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4657,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3282,
+ "src": "29818:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4658,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "29870:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4659,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4381,
+ "src": "29870:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4649,
+ "name": "_getExpiredCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4371,
+ "src": "29612:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (address,address,uint256,uint256,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4660,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29612:295:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "29529:401:2"
+ },
+ {
+ "assignments": [
+ 4667
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4667,
+ "mutability": "mutable",
+ "name": "longCashValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4708,
+ "src": "29944:38:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4666,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "29944:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4684,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4668,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "29985:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4669,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "29985:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4682,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "30335:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "29985:354:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4671,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "30067:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4672,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3276,
+ "src": "30067:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4673,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "30122:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4674,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3278,
+ "src": "30122:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4675,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "30173:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4676,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3290,
+ "src": "30173:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4677,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "30228:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4678,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3288,
+ "src": "30228:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4679,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "30279:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4680,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4381,
+ "src": "30279:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4670,
+ "name": "_getExpiredCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4371,
+ "src": "30025:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (address,address,uint256,uint256,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4681,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30025:291:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "29944:395:2"
+ },
+ {
+ "assignments": [
+ 4688
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4688,
+ "mutability": "mutable",
+ "name": "valueInStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4708,
+ "src": "30354:38:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4687,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "30354:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4695,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4690,
+ "name": "shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4397,
+ "src": "30439:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4691,
+ "name": "longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4414,
+ "src": "30468:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4692,
+ "name": "shortCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4646,
+ "src": "30496:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4693,
+ "name": "longCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4667,
+ "src": "30528:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "id": 4689,
+ "name": "_getExpiredSpreadCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5545,
+ "src": "30395:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4694,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30395:160:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "30354:201:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 4696,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4431,
+ "src": "30657:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4698,
+ "name": "valueInStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4688,
+ "src": "30740:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4699,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "30775:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4700,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4377,
+ "src": "30775:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4701,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "30828:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4702,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4375,
+ "src": "30828:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4703,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "30885:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4704,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenExpiry",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4379,
+ "src": "30885:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4697,
+ "name": "_convertAmountOnExpiryPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5158,
+ "src": "30691:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_address_$_t_address_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,address,address,uint256) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4705,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "30691:238:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "id": 4706,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "30639:304:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "tuple(struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "functionReturnParameters": 4393,
+ "id": 4707,
+ "nodeType": "Return",
+ "src": "30632:311:2"
+ }
+ ]
+ },
+ "id": 4709,
+ "nodeType": "IfStatement",
+ "src": "25592:5362:2",
+ "trueBody": {
+ "id": 4642,
+ "nodeType": "Block",
+ "src": "25630:3784:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4508,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4505,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "25734:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4506,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3296,
+ "src": "25734:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 4507,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "25761:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "25734:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 4640,
+ "nodeType": "Block",
+ "src": "27721:1683:2",
+ "statements": [
+ {
+ "assignments": [
+ 4581
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4581,
+ "mutability": "mutable",
+ "name": "longStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4640,
+ "src": "27795:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4580,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "27795:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4592,
+ "initialValue": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4582,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "27833:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4583,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "27833:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 4590,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "27955:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 4591,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "27833:126:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4586,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "27896:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4587,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3288,
+ "src": "27896:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4588,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "27927:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4584,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "27877:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4585,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "27877:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4589,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27877:55:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "27795:164:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4593,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "27982:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4594,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4381,
+ "src": "27982:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 4638,
+ "nodeType": "Block",
+ "src": "28693:697:2",
+ "statements": [
+ {
+ "assignments": [
+ 4620
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4620,
+ "mutability": "mutable",
+ "name": "underlyingNeeded",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4638,
+ "src": "28715:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4619,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "28715:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4627,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4622,
+ "name": "shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4397,
+ "src": "28813:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4623,
+ "name": "longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4414,
+ "src": "28850:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4624,
+ "name": "shortStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4449,
+ "src": "28886:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4625,
+ "name": "longStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4581,
+ "src": "28923:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "id": 4621,
+ "name": "_getCallSpreadMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5043,
+ "src": "28759:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4626,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28759:196:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "28715:240:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 4628,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4431,
+ "src": "29080:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4630,
+ "name": "underlyingNeeded",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4620,
+ "src": "29177:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4631,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "29223:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4632,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4373,
+ "src": "29223:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4633,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "29288:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4634,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4375,
+ "src": "29288:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 4629,
+ "name": "_convertAmountOnLivePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5093,
+ "src": "29122:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_address_$_t_address_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,address,address) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4635,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "29122:227:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "id": 4636,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "29054:317:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "tuple(struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "functionReturnParameters": 4393,
+ "id": 4637,
+ "nodeType": "Return",
+ "src": "29047:324:2"
+ }
+ ]
+ },
+ "id": 4639,
+ "nodeType": "IfStatement",
+ "src": "27978:1412:2",
+ "trueBody": {
+ "id": 4616,
+ "nodeType": "Block",
+ "src": "28003:684:2",
+ "statements": [
+ {
+ "assignments": [
+ 4598
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4598,
+ "mutability": "mutable",
+ "name": "strikeNeeded",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4616,
+ "src": "28025:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4597,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "28025:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4605,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4600,
+ "name": "shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4397,
+ "src": "28118:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4601,
+ "name": "longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4414,
+ "src": "28155:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4602,
+ "name": "shortStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4449,
+ "src": "28191:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4603,
+ "name": "longStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4581,
+ "src": "28228:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "id": 4599,
+ "name": "_getPutSpreadMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4979,
+ "src": "28065:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4604,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28065:195:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "28025:235:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 4606,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4431,
+ "src": "28385:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4608,
+ "name": "strikeNeeded",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4598,
+ "src": "28482:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4609,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "28524:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4610,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4377,
+ "src": "28524:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4611,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "28585:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4612,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4375,
+ "src": "28585:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 4607,
+ "name": "_convertAmountOnLivePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5093,
+ "src": "28427:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_address_$_t_address_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,address,address) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4613,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "28427:219:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "id": 4614,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "28359:309:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "tuple(struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "functionReturnParameters": 4393,
+ "id": 4615,
+ "nodeType": "Return",
+ "src": "28352:316:2"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "id": 4641,
+ "nodeType": "IfStatement",
+ "src": "25730:3674:2",
+ "trueBody": {
+ "id": 4577,
+ "nodeType": "Block",
+ "src": "25764:1951:2",
+ "statements": [
+ {
+ "assignments": [
+ 4512
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4512,
+ "mutability": "mutable",
+ "name": "dustAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4577,
+ "src": "25968:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4511,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "25968:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4522,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4515,
+ "name": "dust",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3323,
+ "src": "26046:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 4518,
+ "indexExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4516,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "26051:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4517,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "26051:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "26046:40:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4519,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "26108:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4520,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3294,
+ "src": "26108:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4513,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "26006:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4514,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "26006:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4521,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26006:152:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "25968:190:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4525,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "26350:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4523,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4431,
+ "src": "26319:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4524,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isGreaterThan",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10905,
+ "src": "26319:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 4526,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26319:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 4536,
+ "nodeType": "IfStatement",
+ "src": "26315:299:2",
+ "trueBody": {
+ "id": 4535,
+ "nodeType": "Block",
+ "src": "26357:257:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4530,
+ "name": "dustAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4512,
+ "src": "26443:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4528,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4431,
+ "src": "26412:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4529,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isGreaterThan",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10905,
+ "src": "26412:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 4531,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26412:42:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207661756c742073686f756c64206861766520636f6c6c61746572616c20616d6f756e742067726561746572207468616e206475737420616d6f756e74",
+ "id": 4532,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "26480:93:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6152a652f35e3cd2fcb1bde573effb3c09321906a2b3d1cac2fedab305615617",
+ "typeString": "literal_string \"MarginCalculator: naked margin vault should have collateral amount greater than dust amount\""
+ },
+ "value": "MarginCalculator: naked margin vault should have collateral amount greater than dust amount"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6152a652f35e3cd2fcb1bde573effb3c09321906a2b3d1cac2fedab305615617",
+ "typeString": "literal_string \"MarginCalculator: naked margin vault should have collateral amount greater than dust amount\""
+ }
+ ],
+ "id": 4527,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "26379:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 4533,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26379:216:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4534,
+ "nodeType": "ExpressionStatement",
+ "src": "26379:216:2"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 4540
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4540,
+ "mutability": "mutable",
+ "name": "shortUnderlyingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4577,
+ "src": "26695:45:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4539,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "26695:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4550,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4545,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "26799:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4546,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "26799:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4543,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "26783:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 4544,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9571,
+ "src": "26783:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
+ "typeString": "function (address) view external returns (uint256)"
+ }
+ },
+ "id": 4547,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26783:51:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4548,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "26856:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4541,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "26743:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4542,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "26743:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4549,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26743:135:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "26695:183:2"
+ },
+ {
+ "assignments": [
+ 4552
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4552,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4577,
+ "src": "26936:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 4551,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "26936:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4563,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4554,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "26995:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4555,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "26995:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4556,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "27051:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4557,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3272,
+ "src": "27051:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4558,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "27103:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4559,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "27103:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4560,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4387,
+ "src": "27159:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 4561,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "27159:24:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4553,
+ "name": "_getProductHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5803,
+ "src": "26958:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 4562,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "26958:243:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "26936:265:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 4564,
+ "name": "collateralAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4431,
+ "src": "27345:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4566,
+ "name": "productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4552,
+ "src": "27432:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4567,
+ "name": "shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4397,
+ "src": "27469:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4568,
+ "name": "shortUnderlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4540,
+ "src": "27506:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4569,
+ "name": "shortStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4449,
+ "src": "27552:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4570,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "27589:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4571,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "otokenExpiry",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4379,
+ "src": "27589:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4572,
+ "name": "otokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4462,
+ "src": "27641:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_OtokenDetails_$4382_memory_ptr",
+ "typeString": "struct MarginCalculator.OtokenDetails memory"
+ }
+ },
+ "id": 4573,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 4381,
+ "src": "27641:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 4565,
+ "name": "_getNakedMarginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4866,
+ "src": "27383:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (bytes32,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory,uint256,bool) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4574,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "27383:299:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "id": 4575,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "27323:377:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "tuple(struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "functionReturnParameters": 4393,
+ "id": 4576,
+ "nodeType": "Return",
+ "src": "27316:384:2"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4383,
+ "nodeType": "StructuredDocumentation",
+ "src": "23722:359:2",
+ "text": " @notice calculate the amount of collateral needed for a vault\n @dev vault passed in has already passed the checkIsValidVault function\n @param _vault theoretical vault that needs to be checked\n @return the vault collateral amount, and marginRequired the minimal amount of collateral needed in a vault,\n scaled to 1e27"
+ },
+ "id": 4711,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getMarginRequired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4388,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4385,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4711,
+ "src": "24114:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4384,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "24114:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4387,
+ "mutability": "mutable",
+ "name": "_vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4711,
+ "src": "24147:33:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4386,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "24147:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "24113:68:2"
+ },
+ "returnParameters": {
+ "id": 4393,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4390,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4711,
+ "src": "24229:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4389,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "24229:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4392,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4711,
+ "src": "24255:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4391,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "24255:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "24228:52:2"
+ },
+ "scope": 5915,
+ "src": "24086:6874:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 4865,
+ "nodeType": "Block",
+ "src": "32352:1163:2",
+ "statements": [
+ {
+ "assignments": [
+ 4732
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4732,
+ "mutability": "mutable",
+ "name": "optionUpperBoundValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4865,
+ "src": "32403:46:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4731,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32403:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4737,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4734,
+ "name": "_productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4714,
+ "src": "32473:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4735,
+ "name": "_shortExpiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4722,
+ "src": "32487:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4733,
+ "name": "_findUpperBoundValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4945,
+ "src": "32452:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (bytes32,uint256) view returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4736,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32452:57:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "32403:106:2"
+ },
+ {
+ "assignments": [
+ 4741
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4741,
+ "mutability": "mutable",
+ "name": "spotShockValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4865,
+ "src": "32613:39:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4740,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32613:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4751,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4746,
+ "name": "spotShock",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3341,
+ "src": "32680:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
+ "typeString": "mapping(bytes32 => uint256)"
+ }
+ },
+ "id": 4748,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 4747,
+ "name": "_productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4714,
+ "src": "32690:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "32680:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 4745,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "32673:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_int256_$",
+ "typeString": "type(int256)"
+ },
+ "typeName": {
+ "id": 4744,
+ "name": "int256",
+ "nodeType": "ElementaryTypeName",
+ "src": "32673:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 4749,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32673:31:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_int256",
+ "typeString": "int256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_int256",
+ "typeString": "int256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4742,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "32655:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4743,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "FixedPointInt",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10548,
+ "src": "32655:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_FixedPointInt_$10548_storage_ptr_$",
+ "typeString": "type(struct FixedPointInt256.FixedPointInt storage pointer)"
+ }
+ },
+ "id": 4750,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32655:50:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "32613:92:2"
+ },
+ {
+ "assignments": [
+ 4755
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4755,
+ "mutability": "mutable",
+ "name": "a",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4865,
+ "src": "32716:26:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4754,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32716:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4756,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "32716:26:2"
+ },
+ {
+ "assignments": [
+ 4760
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4760,
+ "mutability": "mutable",
+ "name": "b",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4865,
+ "src": "32752:26:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4759,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32752:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4761,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "32752:26:2"
+ },
+ {
+ "assignments": [
+ 4765
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4765,
+ "mutability": "mutable",
+ "name": "marginRequired",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4865,
+ "src": "32788:39:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4764,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32788:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4766,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "32788:39:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 4767,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4724,
+ "src": "32842:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 4861,
+ "nodeType": "Block",
+ "src": "33115:362:2",
+ "statements": [
+ {
+ "assignments": [
+ 4810
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4810,
+ "mutability": "mutable",
+ "name": "one",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4861,
+ "src": "33129:28:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4809,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "33129:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4816,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31653237",
+ "id": 4813,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "33179:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1000000000000000000000000000_by_1",
+ "typeString": "int_const 1000000000000000000000000000"
+ },
+ "value": "1e27"
+ },
+ {
+ "argumentTypes": null,
+ "id": 4814,
+ "name": "SCALING_FACTOR",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3260,
+ "src": "33185:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_1000000000000000000000000000_by_1",
+ "typeString": "int_const 1000000000000000000000000000"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4811,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "33160:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4812,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "33160:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4815,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33160:40:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "33129:71:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4829,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 4817,
+ "name": "a",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4755,
+ "src": "33214:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4820,
+ "name": "one",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4810,
+ "src": "33226:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4826,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4718,
+ "src": "33268:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4823,
+ "name": "spotShockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4741,
+ "src": "33248:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4821,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4720,
+ "src": "33231:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4822,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "33231:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4824,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33231:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4825,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "33231:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4827,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33231:54:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4818,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "33218:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4819,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "min",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10851,
+ "src": "33218:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4828,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33218:68:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "33214:72:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4830,
+ "nodeType": "ExpressionStatement",
+ "src": "33214:72:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4846,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 4831,
+ "name": "b",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4760,
+ "src": "33300:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4841,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4718,
+ "src": "33357:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4838,
+ "name": "spotShockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4741,
+ "src": "33337:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4836,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4720,
+ "src": "33320:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4837,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "33320:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4839,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33320:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4840,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "33320:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4842,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33320:54:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4834,
+ "name": "one",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4810,
+ "src": "33312:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4835,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "33312:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4843,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33312:63:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4844,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "33377:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4832,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "33304:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4833,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "33304:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4845,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33304:78:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "33300:82:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4847,
+ "nodeType": "ExpressionStatement",
+ "src": "33300:82:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4859,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 4848,
+ "name": "marginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4765,
+ "src": "33396:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4857,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4716,
+ "src": "33453:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4854,
+ "name": "b",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4760,
+ "src": "33446:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4851,
+ "name": "a",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4755,
+ "src": "33439:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4849,
+ "name": "optionUpperBoundValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4732,
+ "src": "33413:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4850,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "33413:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4852,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33413:28:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4853,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10765,
+ "src": "33413:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4855,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33413:35:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4856,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "33413:39:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4858,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33413:53:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "33396:70:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4860,
+ "nodeType": "ExpressionStatement",
+ "src": "33396:70:2"
+ }
+ ]
+ },
+ "id": 4862,
+ "nodeType": "IfStatement",
+ "src": "32838:639:2",
+ "trueBody": {
+ "id": 4806,
+ "nodeType": "Block",
+ "src": "32850:259:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4777,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 4768,
+ "name": "a",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4755,
+ "src": "32864:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4771,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4720,
+ "src": "32876:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4774,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4718,
+ "src": "32909:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4772,
+ "name": "spotShockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4741,
+ "src": "32890:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4773,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "32890:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4775,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32890:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4769,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "32868:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "min",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10851,
+ "src": "32868:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4776,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32868:59:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "32864:63:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4778,
+ "nodeType": "ExpressionStatement",
+ "src": "32864:63:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4791,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 4779,
+ "name": "b",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4760,
+ "src": "32941:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4786,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4718,
+ "src": "32989:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4784,
+ "name": "spotShockValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4741,
+ "src": "32970:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4785,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "32970:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4787,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32970:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4782,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4720,
+ "src": "32953:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4783,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "32953:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4788,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32953:54:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4789,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "33009:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4780,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "32945:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4781,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "32945:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4790,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "32945:69:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "32941:73:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4792,
+ "nodeType": "ExpressionStatement",
+ "src": "32941:73:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4804,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 4793,
+ "name": "marginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4765,
+ "src": "33028:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4802,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4716,
+ "src": "33085:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4799,
+ "name": "b",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4760,
+ "src": "33078:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4796,
+ "name": "a",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4755,
+ "src": "33071:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4794,
+ "name": "optionUpperBoundValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4732,
+ "src": "33045:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4795,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "33045:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4797,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33045:28:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4798,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10765,
+ "src": "33045:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33045:35:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4801,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "33045:39:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4803,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "33045:53:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "33028:70:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4805,
+ "nodeType": "ExpressionStatement",
+ "src": "33028:70:2"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4863,
+ "name": "marginRequired",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4765,
+ "src": "33494:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 4728,
+ "id": 4864,
+ "nodeType": "Return",
+ "src": "33487:21:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4712,
+ "nodeType": "StructuredDocumentation",
+ "src": "30966:1058:2",
+ "text": " @notice get required collateral for naked margin position\n if put:\n a = min(strike price, spot shock * underlying price)\n b = max(strike price - spot shock * underlying price, 0)\n marginRequired = ( option upper bound value * a + b) * short amount\n if call:\n a = min(1, strike price / (underlying price / spot shock value))\n b = max(1- (strike price / (underlying price / spot shock value)), 0)\n marginRequired = (option upper bound value * a + b) * short amount\n @param _productHash product hash\n @param _shortAmount short amount in vault, in FixedPointInt type\n @param _strikePrice strike price of short otoken, in FixedPointInt type\n @param _underlyingPrice underlying price of short otoken underlying asset, in FixedPointInt type\n @param _shortExpiryTimestamp short otoken expiry timestamp\n @param _isPut otoken type, true if put option, false for call option\n @return required margin for this naked vault, in FixedPointInt type (scaled by 1e27)"
+ },
+ "id": 4866,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getNakedMarginRequired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4725,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4714,
+ "mutability": "mutable",
+ "name": "_productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32071:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 4713,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "32071:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4716,
+ "mutability": "mutable",
+ "name": "_shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32101:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4715,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32101:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4718,
+ "mutability": "mutable",
+ "name": "_underlyingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32148:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4717,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32148:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4720,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32199:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4719,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32199:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4722,
+ "mutability": "mutable",
+ "name": "_shortExpiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32246:29:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4721,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "32246:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4724,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32285:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 4723,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "32285:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "32061:241:2"
+ },
+ "returnParameters": {
+ "id": 4728,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4727,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4866,
+ "src": "32326:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4726,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "32326:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "32325:26:2"
+ },
+ "scope": 5915,
+ "src": "32029:1486:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 4944,
+ "nodeType": "Block",
+ "src": "34066:970:2",
+ "statements": [
+ {
+ "assignments": [
+ 4880
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4880,
+ "mutability": "mutable",
+ "name": "timesToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4944,
+ "src": "34133:30:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 4878,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "34133:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 4879,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "34133:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4884,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4881,
+ "name": "timesToExpiryForProduct",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3329,
+ "src": "34166:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$",
+ "typeString": "mapping(bytes32 => uint256[] storage ref)"
+ }
+ },
+ "id": 4883,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 4882,
+ "name": "_productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4869,
+ "src": "34190:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34166:37:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
+ "typeString": "uint256[] storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "34133:70:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4889,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4886,
+ "name": "timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4880,
+ "src": "34288:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4887,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "34288:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4888,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34312:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "34288:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a2070726f647563742068617665206e6f206578706972792076616c756573",
+ "id": 4890,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34315:49:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0017cd49cecbe71621b55f8cb19c00cf0e7ebfe968b2d6a4358822370c0addd4",
+ "typeString": "literal_string \"MarginCalculator: product have no expiry values\""
+ },
+ "value": "MarginCalculator: product have no expiry values"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_0017cd49cecbe71621b55f8cb19c00cf0e7ebfe968b2d6a4358822370c0addd4",
+ "typeString": "literal_string \"MarginCalculator: product have no expiry values\""
+ }
+ ],
+ "id": 4885,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "34280:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 4891,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34280:85:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4892,
+ "nodeType": "ExpressionStatement",
+ "src": "34280:85:2"
+ },
+ {
+ "assignments": [
+ 4894
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4894,
+ "mutability": "mutable",
+ "name": "optionTimeToExpiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4944,
+ "src": "34376:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4893,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "34376:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4899,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4897,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "34426:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4895,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4871,
+ "src": "34405:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 4896,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "34405:20:2",
+ "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": 4898,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34405:25:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "34376:54:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4909,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4901,
+ "name": "timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4880,
+ "src": "34533:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4907,
+ "indexExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 4905,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34572:1:2",
+ "subdenomination": null,
+ "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"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4902,
+ "name": "timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4880,
+ "src": "34547:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4903,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "34547:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 4904,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "34547:24:2",
+ "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": 4906,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34547:27:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34533:42:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 4908,
+ "name": "optionTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4894,
+ "src": "34579:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "34533:64:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a2070726f647563742068617665206e6f20757070657220626f756e642076616c7565",
+ "id": 4910,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34611:53:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f55623b7c2eca7156912d7105c83f52a27af3c26a7c528dc0ceb1839dac1ebd8",
+ "typeString": "literal_string \"MarginCalculator: product have no upper bound value\""
+ },
+ "value": "MarginCalculator: product have no upper bound value"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f55623b7c2eca7156912d7105c83f52a27af3c26a7c528dc0ceb1839dac1ebd8",
+ "typeString": "literal_string \"MarginCalculator: product have no upper bound value\""
+ }
+ ],
+ "id": 4900,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "34512:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 4911,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34512:162:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 4912,
+ "nodeType": "ExpressionStatement",
+ "src": "34512:162:2"
+ },
+ {
+ "body": {
+ "id": 4942,
+ "nodeType": "Block",
+ "src": "34848:182:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4928,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4924,
+ "name": "timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4880,
+ "src": "34866:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4926,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 4925,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4914,
+ "src": "34880:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34866:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 4927,
+ "name": "optionTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4894,
+ "src": "34886:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "34866:38:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 4941,
+ "nodeType": "IfStatement",
+ "src": "34862:157:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4931,
+ "name": "maxPriceAtTimeToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3336,
+ "src": "34948:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_uint256_$_$",
+ "typeString": "mapping(bytes32 => mapping(uint256 => uint256))"
+ }
+ },
+ "id": 4933,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 4932,
+ "name": "_productHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4869,
+ "src": "34971:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34948:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
+ "typeString": "mapping(uint256 => uint256)"
+ }
+ },
+ "id": 4937,
+ "indexExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 4934,
+ "name": "timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4880,
+ "src": "34985:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4936,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 4935,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4914,
+ "src": "34999:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34985:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "34948:54:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4938,
+ "name": "SCALING_FACTOR",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3260,
+ "src": "35004:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4929,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "34929:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4930,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "34929:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4939,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "34929:90:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 4875,
+ "id": 4940,
+ "nodeType": "Return",
+ "src": "34922:97:2"
+ }
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 4920,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 4917,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4914,
+ "src": "34817:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 4918,
+ "name": "timesToExpiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4880,
+ "src": "34821:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 4919,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "34821:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "34817:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 4943,
+ "initializationExpression": {
+ "assignments": [
+ 4914
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 4914,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4943,
+ "src": "34804:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ },
+ "typeName": {
+ "id": 4913,
+ "name": "uint8",
+ "nodeType": "ElementaryTypeName",
+ "src": "34804:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 4916,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 4915,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "34814:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "34804:11:2"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 4922,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "34843:3:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 4921,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4914,
+ "src": "34843:1:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ },
+ "id": 4923,
+ "nodeType": "ExpressionStatement",
+ "src": "34843:3:2"
+ },
+ "nodeType": "ForStatement",
+ "src": "34799:231:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4867,
+ "nodeType": "StructuredDocumentation",
+ "src": "33521:385:2",
+ "text": " @notice find upper bound value for product by specific expiry timestamp\n @dev should return the upper bound value that correspond to option time to expiry, of if not found should return the next greater one, revert if no value found\n @param _productHash product hash\n @param _expiryTimestamp expiry timestamp\n @return option upper bound value"
+ },
+ "id": 4945,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_findUpperBoundValue",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4872,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4869,
+ "mutability": "mutable",
+ "name": "_productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4945,
+ "src": "33941:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 4868,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "33941:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4871,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4945,
+ "src": "33963:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 4870,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "33963:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "33940:48:2"
+ },
+ "returnParameters": {
+ "id": 4875,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4874,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4945,
+ "src": "34036:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4873,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "34036:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "34035:26:2"
+ },
+ "scope": 5915,
+ "src": "33911:1125:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 4978,
+ "nodeType": "Block",
+ "src": "35673:126:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4970,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4948,
+ "src": "35757:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4971,
+ "name": "_longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4950,
+ "src": "35771:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4968,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "35749:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4969,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "min",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10851,
+ "src": "35749:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4972,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35749:34:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4966,
+ "name": "_longStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4954,
+ "src": "35733:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4967,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "35733:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4973,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35733:51:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4963,
+ "name": "_shortStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4952,
+ "src": "35715:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4961,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4948,
+ "src": "35698:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4962,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "35698:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4964,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35698:30:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4965,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "35698:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4974,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35698:87:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 4975,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "35787:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4959,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "35690:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4960,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "35690:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 4976,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "35690:102:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 4958,
+ "id": 4977,
+ "nodeType": "Return",
+ "src": "35683:109:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4946,
+ "nodeType": "StructuredDocumentation",
+ "src": "35042:348:2",
+ "text": " @dev returns the strike asset amount of margin required for a put or put spread with the given short oTokens, long oTokens and amounts\n marginRequired = max( (short amount * short strike) - (long strike * min (short amount, long amount)) , 0 )\n @return margin requirement denominated in the strike asset"
+ },
+ "id": 4979,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getPutSpreadMarginRequired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4955,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4948,
+ "mutability": "mutable",
+ "name": "_shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4979,
+ "src": "35441:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4947,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "35441:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4950,
+ "mutability": "mutable",
+ "name": "_longAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4979,
+ "src": "35488:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4949,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "35488:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4952,
+ "mutability": "mutable",
+ "name": "_shortStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4979,
+ "src": "35534:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4951,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "35534:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4954,
+ "mutability": "mutable",
+ "name": "_longStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4979,
+ "src": "35581:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4953,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "35581:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "35431:192:2"
+ },
+ "returnParameters": {
+ "id": 4958,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4957,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 4979,
+ "src": "35647:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4956,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "35647:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "35646:26:2"
+ },
+ "scope": 5915,
+ "src": "35395:404:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5042,
+ "nodeType": "Block",
+ "src": "36656:718:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 4995,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "36738:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4993,
+ "name": "_longStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4988,
+ "src": "36718:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 4994,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isEqual",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10888,
+ "src": "36718:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 4996,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36718:25:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5007,
+ "nodeType": "IfStatement",
+ "src": "36714:107:2",
+ "trueBody": {
+ "id": 5006,
+ "nodeType": "Block",
+ "src": "36745:76:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5001,
+ "name": "_longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4984,
+ "src": "36791:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4999,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4982,
+ "src": "36774:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5000,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "36774:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5002,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36774:29:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5003,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "36805:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 4997,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "36766:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 4998,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "36766:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5004,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "36766:44:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 4992,
+ "id": 5005,
+ "nodeType": "Return",
+ "src": "36759:51:2"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 5011
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5011,
+ "mutability": "mutable",
+ "name": "firstPart",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5042,
+ "src": "37042:34:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5010,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "37042:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5022,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5020,
+ "name": "_longStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4988,
+ "src": "37131:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5017,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4982,
+ "src": "37113:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5014,
+ "name": "_shortStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4986,
+ "src": "37095:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5012,
+ "name": "_longStrike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4988,
+ "src": "37079:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5013,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "37079:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5015,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37079:29:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5016,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "37079:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5018,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37079:47:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5019,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "37079:51:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5021,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37079:64:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "37042:101:2"
+ },
+ {
+ "assignments": [
+ 5026
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5026,
+ "mutability": "mutable",
+ "name": "secondPart",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5042,
+ "src": "37237:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5025,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "37237:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5035,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5031,
+ "name": "_longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4984,
+ "src": "37300:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5029,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4982,
+ "src": "37283:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5030,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "37283:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5032,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37283:29:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5033,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "37314:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5027,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "37275:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5028,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "37275:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5034,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37275:44:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "37237:82:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5038,
+ "name": "firstPart",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5011,
+ "src": "37345:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5039,
+ "name": "secondPart",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5026,
+ "src": "37356:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5036,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "37337:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5037,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "37337:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5040,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "37337:30:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 4992,
+ "id": 5041,
+ "nodeType": "Return",
+ "src": "37330:37:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 4980,
+ "nodeType": "StructuredDocumentation",
+ "src": "35805:567:2",
+ "text": " @dev returns the underlying asset amount required for a call or call spread with the given short oTokens, long oTokens, and amounts\n (long strike - short strike) * short amount\n marginRequired = max( ------------------------------------------------- , max (short amount - long amount, 0) )\n long strike\n @dev if long strike = 0, return max( short amount - long amount, 0)\n @return margin requirement denominated in the underlying asset"
+ },
+ "id": 5043,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getCallSpreadMarginRequired",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 4989,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4982,
+ "mutability": "mutable",
+ "name": "_shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5043,
+ "src": "36424:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4981,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "36424:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4984,
+ "mutability": "mutable",
+ "name": "_longAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5043,
+ "src": "36471:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4983,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "36471:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4986,
+ "mutability": "mutable",
+ "name": "_shortStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5043,
+ "src": "36517:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4985,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "36517:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 4988,
+ "mutability": "mutable",
+ "name": "_longStrike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5043,
+ "src": "36564:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4987,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "36564:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "36414:192:2"
+ },
+ "returnParameters": {
+ "id": 4992,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 4991,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5043,
+ "src": "36630:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 4990,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "36630:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "36629:26:2"
+ },
+ "scope": 5915,
+ "src": "36377:997:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5092,
+ "nodeType": "Block",
+ "src": "37902:397:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5057,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 5055,
+ "name": "_assetA",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5048,
+ "src": "37916:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 5056,
+ "name": "_assetB",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5050,
+ "src": "37927:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "37916:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5061,
+ "nodeType": "IfStatement",
+ "src": "37912:63:2",
+ "trueBody": {
+ "id": 5060,
+ "nodeType": "Block",
+ "src": "37936:39:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5058,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5046,
+ "src": "37957:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5054,
+ "id": 5059,
+ "nodeType": "Return",
+ "src": "37950:14:2"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 5063
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5063,
+ "mutability": "mutable",
+ "name": "priceA",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5092,
+ "src": "37984:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5062,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "37984:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5068,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5066,
+ "name": "_assetA",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5048,
+ "src": "38017:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5064,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "38001:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 5065,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9571,
+ "src": "38001:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
+ "typeString": "function (address) view external returns (uint256)"
+ }
+ },
+ "id": 5067,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38001:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "37984:41:2"
+ },
+ {
+ "assignments": [
+ 5070
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5070,
+ "mutability": "mutable",
+ "name": "priceB",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5092,
+ "src": "38035:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5069,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "38035:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5075,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5073,
+ "name": "_assetB",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5050,
+ "src": "38068:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5071,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "38052:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 5072,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9571,
+ "src": "38052:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
+ "typeString": "function (address) view external returns (uint256)"
+ }
+ },
+ "id": 5074,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38052:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "38035:41:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5087,
+ "name": "priceB",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5070,
+ "src": "38278:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5088,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "38286:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5085,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "38259:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5086,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "38259:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5089,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38259:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5080,
+ "name": "priceA",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5063,
+ "src": "38240:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5081,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "38248:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5078,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "38221:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5079,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "38221:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5082,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38221:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5076,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5046,
+ "src": "38209:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5077,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "38209:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5083,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38209:45:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5084,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "38209:49:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5090,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38209:83:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5054,
+ "id": 5091,
+ "nodeType": "Return",
+ "src": "38202:90:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5044,
+ "nodeType": "StructuredDocumentation",
+ "src": "37380:335:2",
+ "text": " @notice convert an amount in asset A to equivalent amount of asset B, based on a live price\n @dev function includes the amount and applies .mul() first to increase the accuracy\n @param _amount amount in asset A\n @param _assetA asset A\n @param _assetB asset B\n @return _amount in asset B"
+ },
+ "id": 5093,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_convertAmountOnLivePrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5051,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5046,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5093,
+ "src": "37764:32:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5045,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "37764:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5048,
+ "mutability": "mutable",
+ "name": "_assetA",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5093,
+ "src": "37806:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5047,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37806:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5050,
+ "mutability": "mutable",
+ "name": "_assetB",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5093,
+ "src": "37831:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5049,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "37831:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "37754:98:2"
+ },
+ "returnParameters": {
+ "id": 5054,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5053,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5093,
+ "src": "37876:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5052,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "37876:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "37875:26:2"
+ },
+ "scope": 5915,
+ "src": "37720:579:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5157,
+ "nodeType": "Block",
+ "src": "38855:583:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5109,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 5107,
+ "name": "_assetA",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5098,
+ "src": "38869:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 5108,
+ "name": "_assetB",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5100,
+ "src": "38880:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "38869:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5113,
+ "nodeType": "IfStatement",
+ "src": "38865:63:2",
+ "trueBody": {
+ "id": 5112,
+ "nodeType": "Block",
+ "src": "38889:39:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5110,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5096,
+ "src": "38910:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5106,
+ "id": 5111,
+ "nodeType": "Return",
+ "src": "38903:14:2"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 5115,
+ 5117
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5115,
+ "mutability": "mutable",
+ "name": "priceA",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5157,
+ "src": "38938:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5114,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "38938:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5117,
+ "mutability": "mutable",
+ "name": "priceAFinalized",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5157,
+ "src": "38954:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5116,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "38954:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5123,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5120,
+ "name": "_assetA",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5098,
+ "src": "39000:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5121,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5102,
+ "src": "39009:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5118,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "38978:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 5119,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getExpiryPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9552,
+ "src": "38978:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$_t_bool_$",
+ "typeString": "function (address,uint256) view external returns (uint256,bool)"
+ }
+ },
+ "id": 5122,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "38978:39:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "38937:80:2"
+ },
+ {
+ "assignments": [
+ 5125,
+ 5127
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5125,
+ "mutability": "mutable",
+ "name": "priceB",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5157,
+ "src": "39028:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5124,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "39028:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5127,
+ "mutability": "mutable",
+ "name": "priceBFinalized",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5157,
+ "src": "39044:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5126,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "39044:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5133,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5130,
+ "name": "_assetB",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5100,
+ "src": "39090:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5131,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5102,
+ "src": "39099:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5128,
+ "name": "oracle",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3344,
+ "src": "39068:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OracleInterface_$9641",
+ "typeString": "contract OracleInterface"
+ }
+ },
+ "id": 5129,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getExpiryPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9552,
+ "src": "39068:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$_t_bool_$",
+ "typeString": "function (address,uint256) view external returns (uint256,bool)"
+ }
+ },
+ "id": 5132,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39068:39:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "39027:80:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5137,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 5135,
+ "name": "priceAFinalized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5117,
+ "src": "39125:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 5136,
+ "name": "priceBFinalized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5127,
+ "src": "39144:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "39125:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20707269636520617420657870697279206e6f742066696e616c697a656420796574",
+ "id": 5138,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "39161:53:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6a48a8b61ecf30ff7559d3eeb3a91f2dbfce68d32eb52567c308127d53a9e372",
+ "typeString": "literal_string \"MarginCalculator: price at expiry not finalized yet\""
+ },
+ "value": "MarginCalculator: price at expiry not finalized yet"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6a48a8b61ecf30ff7559d3eeb3a91f2dbfce68d32eb52567c308127d53a9e372",
+ "typeString": "literal_string \"MarginCalculator: price at expiry not finalized yet\""
+ }
+ ],
+ "id": 5134,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "39117:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5139,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39117:98:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5140,
+ "nodeType": "ExpressionStatement",
+ "src": "39117:98:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5152,
+ "name": "priceB",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5125,
+ "src": "39417:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5153,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "39425:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5150,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "39398:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5151,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "39398:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5154,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39398:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5145,
+ "name": "priceA",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5115,
+ "src": "39379:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5146,
+ "name": "BASE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3264,
+ "src": "39387:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5143,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "39360:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5144,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "39360:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5147,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39360:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5141,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5096,
+ "src": "39348:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5142,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "39348:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5148,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39348:45:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5149,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "39348:49:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5155,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "39348:83:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5106,
+ "id": 5156,
+ "nodeType": "Return",
+ "src": "39341:90:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5094,
+ "nodeType": "StructuredDocumentation",
+ "src": "38305:336:2",
+ "text": " @notice convert an amount in asset A to equivalent amount of asset B, based on an expiry price\n @dev function includes the amount and apply .mul() first to increase the accuracy\n @param _amount amount in asset A\n @param _assetA asset A\n @param _assetB asset B\n @return _amount in asset B"
+ },
+ "id": 5158,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_convertAmountOnExpiryPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5103,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5096,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5158,
+ "src": "38692:32:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5095,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "38692:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5098,
+ "mutability": "mutable",
+ "name": "_assetA",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5158,
+ "src": "38734:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5097,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "38734:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5100,
+ "mutability": "mutable",
+ "name": "_assetB",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5158,
+ "src": "38759:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5099,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "38759:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5102,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5158,
+ "src": "38784:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5101,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "38784:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "38682:123:2"
+ },
+ "returnParameters": {
+ "id": 5106,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5105,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5158,
+ "src": "38829:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5104,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "38829:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "38828:26:2"
+ },
+ "scope": 5915,
+ "src": "38646:792:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5312,
+ "nodeType": "Block",
+ "src": "41207:1914:2",
+ "statements": [
+ {
+ "assignments": [
+ 5181
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5181,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5312,
+ "src": "41289:30:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5180,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "41289:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5182,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "41289:30:2"
+ },
+ {
+ "assignments": [
+ 5186
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5186,
+ "mutability": "mutable",
+ "name": "endingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5312,
+ "src": "41361:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5185,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "41361:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5191,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5189,
+ "name": "_vaultDebt",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5163,
+ "src": "41421:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5187,
+ "name": "_vaultCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5161,
+ "src": "41400:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5188,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "41400:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5190,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41400:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "41361:71:2"
+ },
+ {
+ "assignments": [
+ 5193
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5193,
+ "mutability": "mutable",
+ "name": "auctionElapsedTime",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5312,
+ "src": "41475:26:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5192,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "41475:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5198,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5196,
+ "name": "_auctionStartingTime",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5169,
+ "src": "41512:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5194,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "41504:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 5195,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "41504:7:2",
+ "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": 5197,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41504:29:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "41475:58:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5201,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 5199,
+ "name": "auctionElapsedTime",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5193,
+ "src": "41597:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 5200,
+ "name": "AUCTION_TIME",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3268,
+ "src": "41619:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "41597:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 5304,
+ "nodeType": "Block",
+ "src": "41683:1369:2",
+ "statements": [
+ {
+ "assignments": [
+ 5210
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5210,
+ "mutability": "mutable",
+ "name": "startingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5304,
+ "src": "41727:38:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5209,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "41727:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5211,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "41727:38:2"
+ },
+ {
+ "id": 5257,
+ "nodeType": "Block",
+ "src": "41780:518:2",
+ "statements": [
+ {
+ "assignments": [
+ 5215
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5215,
+ "mutability": "mutable",
+ "name": "fixedOracleDeviation",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5257,
+ "src": "41884:45:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5214,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "41884:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5221,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5218,
+ "name": "oracleDeviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3310,
+ "src": "41951:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5219,
+ "name": "SCALING_FACTOR",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3260,
+ "src": "41968:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5216,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "41932:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5217,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "41932:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5220,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "41932:51:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "41884:99:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 5222,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5173,
+ "src": "42006:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 5255,
+ "nodeType": "Block",
+ "src": "42144:140:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5253,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5238,
+ "name": "startingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5210,
+ "src": "42166:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5251,
+ "name": "_spotPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5167,
+ "src": "42254:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5245,
+ "name": "_spotPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5167,
+ "src": "42230:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5243,
+ "name": "fixedOracleDeviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5215,
+ "src": "42205:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5244,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "42205:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5246,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42205:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5241,
+ "name": "_cashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5165,
+ "src": "42190:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5242,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "42190:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5247,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42190:52:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5248,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "42244:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5239,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "42182:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5240,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "42182:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5249,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42182:67:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5250,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "42182:71:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5252,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42182:83:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "42166:99:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5254,
+ "nodeType": "ExpressionStatement",
+ "src": "42166:99:2"
+ }
+ ]
+ },
+ "id": 5256,
+ "nodeType": "IfStatement",
+ "src": "42002:282:2",
+ "trueBody": {
+ "id": 5237,
+ "nodeType": "Block",
+ "src": "42014:124:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5235,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5223,
+ "name": "startingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5210,
+ "src": "42036:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5230,
+ "name": "_spotPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5167,
+ "src": "42100:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5228,
+ "name": "fixedOracleDeviation",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5215,
+ "src": "42075:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5229,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "42075:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5231,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42075:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5226,
+ "name": "_cashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5165,
+ "src": "42060:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5227,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "42060:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5232,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42060:52:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5233,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "42114:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5224,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "42052:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "max",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10871,
+ "src": "42052:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5234,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42052:67:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "42036:83:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5236,
+ "nodeType": "ExpressionStatement",
+ "src": "42036:83:2"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "assignments": [
+ 5261
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5261,
+ "mutability": "mutable",
+ "name": "auctionElapsedTimeFixedPoint",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5304,
+ "src": "42386:53:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5260,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "42386:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5267,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5264,
+ "name": "auctionElapsedTime",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5193,
+ "src": "42461:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "3138",
+ "id": 5265,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "42481:2:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_18_by_1",
+ "typeString": "int_const 18"
+ },
+ "value": "18"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_rational_18_by_1",
+ "typeString": "int_const 18"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5262,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "42442:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5263,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "42442:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5266,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42442:42:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "42386:98:2"
+ },
+ {
+ "assignments": [
+ 5271
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5271,
+ "mutability": "mutable",
+ "name": "auctionTime",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5304,
+ "src": "42576:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5270,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "42576:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5277,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5274,
+ "name": "AUCTION_TIME",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3268,
+ "src": "42634:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "3138",
+ "id": 5275,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "42648:2:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_18_by_1",
+ "typeString": "int_const 18"
+ },
+ "value": "18"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_rational_18_by_1",
+ "typeString": "int_const 18"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5272,
+ "name": "FPI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 10957,
+ "src": "42615:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_FixedPointInt256_$10957_$",
+ "typeString": "type(library FixedPointInt256)"
+ }
+ },
+ "id": 5273,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "fromScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10640,
+ "src": "42615:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5276,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42615:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "42576:75:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5293,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5278,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5181,
+ "src": "42776:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5290,
+ "name": "auctionTime",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5271,
+ "src": "42890:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5287,
+ "name": "auctionElapsedTimeFixedPoint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5261,
+ "src": "42856:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5283,
+ "name": "startingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5210,
+ "src": "42836:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5281,
+ "name": "endingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5186,
+ "src": "42820:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5282,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "42820:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5284,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42820:30:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "id": 5285,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "42819:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5286,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "42819:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5288,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42819:66:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5289,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10831,
+ "src": "42819:70:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5291,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42819:83:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5279,
+ "name": "startingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5210,
+ "src": "42784:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5280,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10765,
+ "src": "42784:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5292,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42784:132:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "42776:140:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5294,
+ "nodeType": "ExpressionStatement",
+ "src": "42776:140:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5297,
+ "name": "endingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5186,
+ "src": "43008:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5295,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5181,
+ "src": "42988:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5296,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isGreaterThan",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10905,
+ "src": "42988:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 5298,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "42988:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5303,
+ "nodeType": "IfStatement",
+ "src": "42984:57:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5301,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5299,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5181,
+ "src": "43022:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 5300,
+ "name": "endingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5186,
+ "src": "43030:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "43022:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5302,
+ "nodeType": "ExpressionStatement",
+ "src": "43022:19:2"
+ }
+ }
+ ]
+ },
+ "id": 5305,
+ "nodeType": "IfStatement",
+ "src": "41593:1459:2",
+ "trueBody": {
+ "id": 5206,
+ "nodeType": "Block",
+ "src": "41633:44:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5204,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5202,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5181,
+ "src": "41647:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 5203,
+ "name": "endingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5186,
+ "src": "41655:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "src": "41647:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5205,
+ "nodeType": "ExpressionStatement",
+ "src": "41647:19:2"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5308,
+ "name": "_collateralDecimals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5171,
+ "src": "43088:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 5309,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43109:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5306,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5181,
+ "src": "43069:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5307,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toScaledUint",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10745,
+ "src": "43069:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_uint256_$_t_bool_$returns$_t_uint256_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,uint256,bool) pure returns (uint256)"
+ }
+ },
+ "id": 5310,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43069:45:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 5177,
+ "id": 5311,
+ "nodeType": "Return",
+ "src": "43062:52:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5159,
+ "nodeType": "StructuredDocumentation",
+ "src": "39444:1415:2",
+ "text": " @notice return debt price, how much collateral asset per 1 otoken repaid in collateral decimal\n ending price = vault collateral / vault debt\n if auction ended, return ending price\n else calculate starting price\n for put option:\n starting price = max(cash value - underlying price * oracle deviation, 0)\n for call option:\n max(cash value - underlying price * oracle deviation, 0)\n starting price = ---------------------------------------------------------------\n underlying price\n starting price + (ending price - starting price) * auction elapsed time\n then price = --------------------------------------------------------------------------\n auction time\n @param _vaultCollateral vault collateral amount\n @param _vaultDebt vault short amount\n @param _cashValue option cash value\n @param _spotPrice option underlying asset price (in USDC)\n @param _auctionStartingTime auction starting timestamp (_spotPrice timestamp from chainlink)\n @param _collateralDecimals collateral asset decimals\n @param _isPut otoken type, true for put, false for call option\n @return price of 1 debt otoken in collateral asset scaled by collateral decimals"
+ },
+ "id": 5313,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getDebtPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5174,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5161,
+ "mutability": "mutable",
+ "name": "_vaultCollateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "40896:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5160,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "40896:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5163,
+ "mutability": "mutable",
+ "name": "_vaultDebt",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "40947:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5162,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "40947:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5165,
+ "mutability": "mutable",
+ "name": "_cashValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "40992:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5164,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "40992:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5167,
+ "mutability": "mutable",
+ "name": "_spotPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "41037:35:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5166,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "41037:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5169,
+ "mutability": "mutable",
+ "name": "_auctionStartingTime",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "41082:28:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5168,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "41082:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5171,
+ "mutability": "mutable",
+ "name": "_collateralDecimals",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "41120:27:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5170,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "41120:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5173,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "41157:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5172,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "41157:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "40886:288:2"
+ },
+ "returnParameters": {
+ "id": 5177,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5176,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5313,
+ "src": "41198:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5175,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "41198:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "41197:9:2"
+ },
+ "scope": 5915,
+ "src": "40864:2257:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5518,
+ "nodeType": "Block",
+ "src": "43549:2257:2",
+ "statements": [
+ {
+ "assignments": [
+ 5324
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5324,
+ "mutability": "mutable",
+ "name": "vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5518,
+ "src": "43559:32:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5323,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "43559:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5364,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5328,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43628:1:2",
+ "subdenomination": null,
+ "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": 5327,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "43620:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5326,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43620:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5329,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43620:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5332,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43652:1:2",
+ "subdenomination": null,
+ "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": 5331,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "43644:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5330,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43644:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5333,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43644:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5336,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43676:1:2",
+ "subdenomination": null,
+ "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": 5335,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "43668:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5334,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43668:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5337,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43668:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5340,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43700:1:2",
+ "subdenomination": null,
+ "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": 5339,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "43692:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5338,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43692:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43692:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5344,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43724:1:2",
+ "subdenomination": null,
+ "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": 5343,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "43716:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5342,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43716:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5345,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43716:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5348,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43748:1:2",
+ "subdenomination": null,
+ "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": 5347,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "43740:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5346,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "43740:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5349,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43740:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5350,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43764:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5351,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43779:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5352,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43794:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5353,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43809:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5354,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43824:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5355,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43839:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5356,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43854:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5357,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43869:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 5358,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43884:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 5359,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43903:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 5360,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43922:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 5361,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43941:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 5362,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "43960:5:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 5325,
+ "name": "VaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3307,
+ "src": "43594:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_VaultDetails_$3307_storage_ptr_$",
+ "typeString": "type(struct MarginCalculator.VaultDetails storage pointer)"
+ }
+ },
+ "id": 5363,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "43594:381:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "43559:416:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5372,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5365,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44056:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5367,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "44056:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5369,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5316,
+ "src": "44091:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5370,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "44091:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ ],
+ "id": 5368,
+ "name": "_isNotEmpty",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5569,
+ "src": "44079:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address[] memory) pure returns (bool)"
+ }
+ },
+ "id": 5371,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44079:31:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "44056:54:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 5373,
+ "nodeType": "ExpressionStatement",
+ "src": "44056:54:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5381,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5374,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44120:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5376,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "44120:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5378,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5316,
+ "src": "44156:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5379,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "44156:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ ],
+ "id": 5377,
+ "name": "_isNotEmpty",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5569,
+ "src": "44144:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address[] memory) pure returns (bool)"
+ }
+ },
+ "id": 5380,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44144:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "44120:56:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 5382,
+ "nodeType": "ExpressionStatement",
+ "src": "44120:56:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5390,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5383,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44186:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5385,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "hasCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3306,
+ "src": "44186:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5387,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5316,
+ "src": "44227:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5388,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "44227:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ ],
+ "id": 5386,
+ "name": "_isNotEmpty",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5569,
+ "src": "44215:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address[] memory) pure returns (bool)"
+ }
+ },
+ "id": 5389,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44215:36:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "44186:65:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 5391,
+ "nodeType": "ExpressionStatement",
+ "src": "44186:65:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5396,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5392,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44262:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5394,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "vaultType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3296,
+ "src": "44262:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 5395,
+ "name": "_vaultType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5318,
+ "src": "44287:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "44262:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 5397,
+ "nodeType": "ExpressionStatement",
+ "src": "44262:35:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5398,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44358:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5399,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "44358:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5446,
+ "nodeType": "IfStatement",
+ "src": "44354:577:2",
+ "trueBody": {
+ "id": 5445,
+ "nodeType": "Block",
+ "src": "44380:551:2",
+ "statements": [
+ {
+ "assignments": [
+ 5401
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5401,
+ "mutability": "mutable",
+ "name": "long",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5445,
+ "src": "44394:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5400,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "44394:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5408,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5403,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5316,
+ "src": "44433:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5404,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "44433:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5406,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5405,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "44452:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "44433:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5402,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "44417:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 5407,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44417:38:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "44394:61:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5429,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5409,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44487:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5411,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "longCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3280,
+ "src": "44487:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5412,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44537:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5413,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "longUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3276,
+ "src": "44537:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5414,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44587:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5415,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "longStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3278,
+ "src": "44587:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5416,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44633:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5417,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "longStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3288,
+ "src": "44633:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5418,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44679:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5419,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "longExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3290,
+ "src": "44679:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5420,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44729:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5421,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "isLongPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3300,
+ "src": "44729:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 5422,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "TupleExpression",
+ "src": "44469:296:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5426,
+ "name": "long",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5401,
+ "src": "44794:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ ],
+ "id": 5425,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "44786:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5424,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "44786:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5427,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44786:13:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5423,
+ "name": "_getOtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5914,
+ "src": "44768:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "function (address) view returns (address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 5428,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44768:32:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "src": "44469:331:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5430,
+ "nodeType": "ExpressionStatement",
+ "src": "44469:331:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5443,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5431,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44814:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5433,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "longCollateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3292,
+ "src": "44814:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5437,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44875:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5438,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3280,
+ "src": "44875:32:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5436,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "44860:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 5439,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44860:48:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 5440,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "decimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9363,
+ "src": "44860:57:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
+ "typeString": "function () view external returns (uint8)"
+ }
+ },
+ "id": 5441,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44860:59:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ ],
+ "id": 5435,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "44852:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint256_$",
+ "typeString": "type(uint256)"
+ },
+ "typeName": {
+ "id": 5434,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "44852:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5442,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "44852:68:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "44814:106:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 5444,
+ "nodeType": "ExpressionStatement",
+ "src": "44814:106:2"
+ }
+ ]
+ }
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5447,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "44992:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5448,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "44992:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5495,
+ "nodeType": "IfStatement",
+ "src": "44988:619:2",
+ "trueBody": {
+ "id": 5494,
+ "nodeType": "Block",
+ "src": "45015:592:2",
+ "statements": [
+ {
+ "assignments": [
+ 5450
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5450,
+ "mutability": "mutable",
+ "name": "short",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5494,
+ "src": "45029:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5449,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "45029:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5457,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5452,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5316,
+ "src": "45069:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5453,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "45069:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5455,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5454,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "45089:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "45069:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5451,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "45053:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 5456,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45053:39:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "45029:63:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5478,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5458,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45124:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5460,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "45124:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5461,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45175:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5462,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "45175:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5463,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45226:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5464,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "shortStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3272,
+ "src": "45226:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5465,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45273:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5466,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "shortStrikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3282,
+ "src": "45273:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5467,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45320:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5468,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "shortExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3284,
+ "src": "45320:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5469,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45371:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5470,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "45371:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 5471,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "TupleExpression",
+ "src": "45106:302:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5475,
+ "name": "short",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5450,
+ "src": "45437:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ ],
+ "id": 5474,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "45429:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5473,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "45429:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5476,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45429:14:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5472,
+ "name": "_getOtokenDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5914,
+ "src": "45411:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "function (address) view returns (address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 5477,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45411:33:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "src": "45106:338:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5479,
+ "nodeType": "ExpressionStatement",
+ "src": "45106:338:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5492,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5480,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45458:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5482,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "shortCollateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3286,
+ "src": "45458:36:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5486,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45537:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5487,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "45537:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5485,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "45522:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 5488,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45522:49:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 5489,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "decimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9363,
+ "src": "45522:58:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
+ "typeString": "function () view external returns (uint8)"
+ }
+ },
+ "id": 5490,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45522:60:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ ],
+ "id": 5484,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "45497:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint256_$",
+ "typeString": "type(uint256)"
+ },
+ "typeName": {
+ "id": 5483,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "45497:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5491,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45497:99:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "45458:138:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 5493,
+ "nodeType": "ExpressionStatement",
+ "src": "45458:138:2"
+ }
+ ]
+ }
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5496,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45621:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5497,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3306,
+ "src": "45621:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5515,
+ "nodeType": "IfStatement",
+ "src": "45617:153:2",
+ "trueBody": {
+ "id": 5514,
+ "nodeType": "Block",
+ "src": "45649:121:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5512,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5498,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45663:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5500,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "collateralDecimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3294,
+ "src": "45663:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5504,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5316,
+ "src": "45720:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5505,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "45720:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5507,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5506,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "45744:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "45720:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5503,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "45705:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 5508,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45705:42:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 5509,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "decimals",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9363,
+ "src": "45705:51:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
+ "typeString": "function () view external returns (uint8)"
+ }
+ },
+ "id": 5510,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45705:53:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ ],
+ "id": 5502,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "45697:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint256_$",
+ "typeString": "type(uint256)"
+ },
+ "typeName": {
+ "id": 5501,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "45697:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5511,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "45697:62:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "45663:96:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 5513,
+ "nodeType": "ExpressionStatement",
+ "src": "45663:96:2"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5516,
+ "name": "vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5324,
+ "src": "45787:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "functionReturnParameters": 5322,
+ "id": 5517,
+ "nodeType": "Return",
+ "src": "45780:19:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5314,
+ "nodeType": "StructuredDocumentation",
+ "src": "43127:266:2",
+ "text": " @notice get vault details to save us from making multiple external calls\n @param _vault vault struct\n @param _vaultType vault type, 0 for max loss/spreads and 1 for naked margin vault\n @return vault details in VaultDetails struct"
+ },
+ "id": 5519,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getVaultDetails",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5319,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5316,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5519,
+ "src": "43424:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5315,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "43424:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5318,
+ "mutability": "mutable",
+ "name": "_vaultType",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5519,
+ "src": "43457:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5317,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "43457:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "43423:53:2"
+ },
+ "returnParameters": {
+ "id": 5322,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5321,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5519,
+ "src": "43524:19:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5320,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "43524:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "43523:21:2"
+ },
+ "scope": 5915,
+ "src": "43398:2408:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5544,
+ "nodeType": "Block",
+ "src": "46397:94:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5540,
+ "name": "_longAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5524,
+ "src": "46471:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5538,
+ "name": "_longCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5528,
+ "src": "46452:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5539,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "46452:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5541,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "46452:31:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5535,
+ "name": "_shortAmount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5522,
+ "src": "46434:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5533,
+ "name": "_shortCashValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5526,
+ "src": "46414:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5534,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mul",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10808,
+ "src": "46414:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5536,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "46414:33:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5537,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "46414:37:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5542,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "46414:70:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5532,
+ "id": 5543,
+ "nodeType": "Return",
+ "src": "46407:77:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5520,
+ "nodeType": "StructuredDocumentation",
+ "src": "45812:297:2",
+ "text": " @dev calculate the cash value obligation for an expired vault, where a positive number is an obligation\n Formula: net = (short cash value * short amount) - ( long cash value * long Amount )\n @return cash value obligation denominated in the strike asset"
+ },
+ "id": 5545,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getExpiredSpreadCashValue",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5529,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5522,
+ "mutability": "mutable",
+ "name": "_shortAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5545,
+ "src": "46159:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5521,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "46159:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5524,
+ "mutability": "mutable",
+ "name": "_longAmount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5545,
+ "src": "46206:36:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5523,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "46206:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5526,
+ "mutability": "mutable",
+ "name": "_shortCashValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5545,
+ "src": "46252:40:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5525,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "46252:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5528,
+ "mutability": "mutable",
+ "name": "_longCashValue",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5545,
+ "src": "46302:39:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5527,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "46302:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "46149:198:2"
+ },
+ "returnParameters": {
+ "id": 5532,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5531,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5545,
+ "src": "46371:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5530,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "46371:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "46370:26:2"
+ },
+ "scope": 5915,
+ "src": "46114:377:2",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5568,
+ "nodeType": "Block",
+ "src": "46692:70:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5566,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5557,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5554,
+ "name": "_assets",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5549,
+ "src": "46709:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "46709:14:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5556,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "46726:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "46709:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5565,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 5558,
+ "name": "_assets",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5549,
+ "src": "46731:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5560,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5559,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "46739:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "46731:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5563,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "46753:1:2",
+ "subdenomination": null,
+ "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": 5562,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "46745:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5561,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "46745:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5564,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "46745:10:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "46731:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "46709:46:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 5553,
+ "id": 5567,
+ "nodeType": "Return",
+ "src": "46702:53:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5546,
+ "nodeType": "StructuredDocumentation",
+ "src": "46497:114:2",
+ "text": " @dev check if asset array contain a token address\n @return True if the array is not empty"
+ },
+ "id": 5569,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isNotEmpty",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5550,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5549,
+ "mutability": "mutable",
+ "name": "_assets",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5569,
+ "src": "46637:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 5547,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "46637:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 5548,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "46637:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "46636:26:2"
+ },
+ "returnParameters": {
+ "id": 5553,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5552,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5569,
+ "src": "46686:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5551,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "46686:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "46685:6:2"
+ },
+ "scope": 5915,
+ "src": "46616:146:2",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5653,
+ "nodeType": "Block",
+ "src": "47333:1349:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5582,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5578,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47407:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5579,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "47407:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5580,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47407:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 5581,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47437:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "47407:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20546f6f206d616e792073686f7274206f746f6b656e7320696e20746865207661756c74",
+ "id": 5583,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47440:55:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d35619a4d8afa4e9e3d678c5e7d411b27d64b3fc688adbd353808aa1788f10c6",
+ "typeString": "literal_string \"MarginCalculator: Too many short otokens in the vault\""
+ },
+ "value": "MarginCalculator: Too many short otokens in the vault"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d35619a4d8afa4e9e3d678c5e7d411b27d64b3fc688adbd353808aa1788f10c6",
+ "typeString": "literal_string \"MarginCalculator: Too many short otokens in the vault\""
+ }
+ ],
+ "id": 5577,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "47399:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5584,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "47399:97:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5585,
+ "nodeType": "ExpressionStatement",
+ "src": "47399:97:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5591,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5587,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47514:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5588,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "47514:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5589,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47514:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 5590,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47543:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "47514:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20546f6f206d616e79206c6f6e67206f746f6b656e7320696e20746865207661756c74",
+ "id": 5592,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47546:54:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_407c60a15ab2cdff12cabed9706b312d37ba07b98523a746740600408d7e3a49",
+ "typeString": "literal_string \"MarginCalculator: Too many long otokens in the vault\""
+ },
+ "value": "MarginCalculator: Too many long otokens in the vault"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_407c60a15ab2cdff12cabed9706b312d37ba07b98523a746740600408d7e3a49",
+ "typeString": "literal_string \"MarginCalculator: Too many long otokens in the vault\""
+ }
+ ],
+ "id": 5586,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "47506:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5593,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "47506:95:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5594,
+ "nodeType": "ExpressionStatement",
+ "src": "47506:95:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5600,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5596,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47619:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5597,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "47619:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5598,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47619:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 5599,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47653:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "47619:35:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20546f6f206d616e7920636f6c6c61746572616c2061737365747320696e20746865207661756c74",
+ "id": 5601,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47656:59:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c1b53978bfb2d39e3d58a7f89a541166b8f0df845e7ea4c65e12c8905e7a08a6",
+ "typeString": "literal_string \"MarginCalculator: Too many collateral assets in the vault\""
+ },
+ "value": "MarginCalculator: Too many collateral assets in the vault"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c1b53978bfb2d39e3d58a7f89a541166b8f0df845e7ea4c65e12c8905e7a08a6",
+ "typeString": "literal_string \"MarginCalculator: Too many collateral assets in the vault\""
+ }
+ ],
+ "id": 5595,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "47611:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5602,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "47611:105:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5603,
+ "nodeType": "ExpressionStatement",
+ "src": "47611:105:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5611,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5605,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47748:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5606,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "47748:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5607,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47748:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5608,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47778:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5609,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10978,
+ "src": "47778:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 5610,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47778:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "47748:56:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a2053686f727420617373657420616e6420616d6f756e74206d69736d61746368",
+ "id": 5612,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47818:51:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_570660b8d50cbb89b87bb9fc9f6841f7c49fe638deff88db22109d79860ab2d7",
+ "typeString": "literal_string \"MarginCalculator: Short asset and amount mismatch\""
+ },
+ "value": "MarginCalculator: Short asset and amount mismatch"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_570660b8d50cbb89b87bb9fc9f6841f7c49fe638deff88db22109d79860ab2d7",
+ "typeString": "literal_string \"MarginCalculator: Short asset and amount mismatch\""
+ }
+ ],
+ "id": 5604,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "47727:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5613,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "47727:152:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5614,
+ "nodeType": "ExpressionStatement",
+ "src": "47727:152:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5622,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5616,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47910:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5617,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "47910:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5618,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47910:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5619,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "47939:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5620,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10981,
+ "src": "47939:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 5621,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "47939:25:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "47910:54:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a204c6f6e6720617373657420616e6420616d6f756e74206d69736d61746368",
+ "id": 5623,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "47978:50:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_eb19109c9dd4abb1edbc32cbf0075ba42a16b8da30df8d51bdc6a00b5da074d8",
+ "typeString": "literal_string \"MarginCalculator: Long asset and amount mismatch\""
+ },
+ "value": "MarginCalculator: Long asset and amount mismatch"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_eb19109c9dd4abb1edbc32cbf0075ba42a16b8da30df8d51bdc6a00b5da074d8",
+ "typeString": "literal_string \"MarginCalculator: Long asset and amount mismatch\""
+ }
+ ],
+ "id": 5615,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "47889:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5624,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "47889:149:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5625,
+ "nodeType": "ExpressionStatement",
+ "src": "47889:149:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5627,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "48069:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5628,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "48069:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5629,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "48069:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5630,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "48103:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5631,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAmounts",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10984,
+ "src": "48103:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 5632,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "48103:31:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "48069:65:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20436f6c6c61746572616c20617373657420616e6420616d6f756e74206d69736d61746368",
+ "id": 5634,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "48148:56:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f036fee22612035713be2eb749c1790f602c8c54c357b817682a99ae6d3d100f",
+ "typeString": "literal_string \"MarginCalculator: Collateral asset and amount mismatch\""
+ },
+ "value": "MarginCalculator: Collateral asset and amount mismatch"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f036fee22612035713be2eb749c1790f602c8c54c357b817682a99ae6d3d100f",
+ "typeString": "literal_string \"MarginCalculator: Collateral asset and amount mismatch\""
+ }
+ ],
+ "id": 5626,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "48048:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5635,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "48048:166:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5636,
+ "nodeType": "ExpressionStatement",
+ "src": "48048:166:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5639,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "48326:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5640,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5574,
+ "src": "48334:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ ],
+ "id": 5638,
+ "name": "_isMarginableLong",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5727,
+ "src": "48308:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_Vault_$10985_memory_ptr_$_t_struct$_VaultDetails_$3307_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (struct MarginVault.Vault memory,struct MarginCalculator.VaultDetails memory) pure returns (bool)"
+ }
+ },
+ "id": 5641,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "48308:40:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a206c6f6e67206173736574206e6f74206d617267696e61626c6520666f722073686f7274206173736574",
+ "id": 5642,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "48362:61:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_737cf8bbda19fc259c300bb19cd809877a71cf37857905c7ba2e0e95d3433af2",
+ "typeString": "literal_string \"MarginCalculator: long asset not marginable for short asset\""
+ },
+ "value": "MarginCalculator: long asset not marginable for short asset"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_737cf8bbda19fc259c300bb19cd809877a71cf37857905c7ba2e0e95d3433af2",
+ "typeString": "literal_string \"MarginCalculator: long asset not marginable for short asset\""
+ }
+ ],
+ "id": 5637,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "48287:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5643,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "48287:146:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5644,
+ "nodeType": "ExpressionStatement",
+ "src": "48287:146:2"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5647,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5572,
+ "src": "48562:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5648,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5574,
+ "src": "48570:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ },
+ {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ ],
+ "id": 5646,
+ "name": "_isMarginableCollateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5778,
+ "src": "48538:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_Vault_$10985_memory_ptr_$_t_struct$_VaultDetails_$3307_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (struct MarginVault.Vault memory,struct MarginCalculator.VaultDetails memory) pure returns (bool)"
+ }
+ },
+ "id": 5649,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "48538:46:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a20636f6c6c61746572616c206173736574206e6f74206d617267696e61626c6520666f722073686f7274206173736574",
+ "id": 5650,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "48598:67:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_aaf7bb30aa076176bee18043b4ec242e5a7ea1d87a4cc3d1f3fda2f98280f235",
+ "typeString": "literal_string \"MarginCalculator: collateral asset not marginable for short asset\""
+ },
+ "value": "MarginCalculator: collateral asset not marginable for short asset"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_aaf7bb30aa076176bee18043b4ec242e5a7ea1d87a4cc3d1f3fda2f98280f235",
+ "typeString": "literal_string \"MarginCalculator: collateral asset not marginable for short asset\""
+ }
+ ],
+ "id": 5645,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "48517:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5651,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "48517:158:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5652,
+ "nodeType": "ExpressionStatement",
+ "src": "48517:158:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5570,
+ "nodeType": "StructuredDocumentation",
+ "src": "46768:450:2",
+ "text": " @dev ensure that:\n a) at most 1 asset type used as collateral\n b) at most 1 series of option used as the long option\n c) at most 1 series of option used as the short option\n d) asset array lengths match for long, short and collateral\n e) long option and collateral asset is acceptable for margin with short asset\n @param _vault the vault to check\n @param _vaultDetails vault details struct"
+ },
+ "id": 5654,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_checkIsValidVault",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5575,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5572,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5654,
+ "src": "47251:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5571,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "47251:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5574,
+ "mutability": "mutable",
+ "name": "_vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5654,
+ "src": "47284:33:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5573,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "47284:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "47250:68:2"
+ },
+ "returnParameters": {
+ "id": 5576,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "47333:0:2"
+ },
+ "scope": 5915,
+ "src": "47223:1459:2",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5726,
+ "nodeType": "Block",
+ "src": "49156:781:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5667,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5664,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49170:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5665,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "vaultType",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3296,
+ "src": "49170:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 5666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "49197:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "49170:28:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5675,
+ "nodeType": "IfStatement",
+ "src": "49166:141:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5671,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "49220:22:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5669,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49221:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5670,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "49221:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e43616c63756c61746f723a206e616b6564206d617267696e207661756c742063616e6e6f742068617665206c6f6e67206f746f6b656e",
+ "id": 5672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "49244:62:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_67d95b2fe02762912c43616a5a019c17dac982b21b6ffd6920927a6f95ad458c",
+ "typeString": "literal_string \"MarginCalculator: naked margin vault cannot have long otoken\""
+ },
+ "value": "MarginCalculator: naked margin vault cannot have long otoken"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_67d95b2fe02762912c43616a5a019c17dac982b21b6ffd6920927a6f95ad458c",
+ "typeString": "literal_string \"MarginCalculator: naked margin vault cannot have long otoken\""
+ }
+ ],
+ "id": 5668,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "49212:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5673,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "49212:95:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5674,
+ "nodeType": "ExpressionStatement",
+ "src": "49212:95:2"
+ }
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5682,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 5678,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "49384:22:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5676,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49385:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5677,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "49385:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 5681,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "49410:23:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5679,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49411:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5680,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "49411:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49384:49:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5685,
+ "nodeType": "IfStatement",
+ "src": "49380:66:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 5683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "49442:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "functionReturnParameters": 5663,
+ "id": 5684,
+ "nodeType": "Return",
+ "src": "49435:11:2"
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5724,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5718,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5712,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5706,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5700,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5694,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5686,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5657,
+ "src": "49476:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5687,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10972,
+ "src": "49476:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5689,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5688,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "49495:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "49476:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5690,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5657,
+ "src": "49501:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5691,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortOtokens",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10969,
+ "src": "49501:19:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5693,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5692,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "49521:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "49501:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "49476:47:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5699,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5695,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49539:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5696,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3276,
+ "src": "49539:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5697,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49576:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5698,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortUnderlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3270,
+ "src": "49576:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "49539:71:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49476:134:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5705,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5701,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49626:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5702,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3278,
+ "src": "49626:29:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5703,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49659:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5704,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortStrikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3272,
+ "src": "49659:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "49626:63:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49476:213:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5711,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5707,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49705:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5708,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3280,
+ "src": "49705:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5709,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49742:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5710,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "49742:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "49705:71:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49476:300:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 5717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5713,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49792:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5714,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3290,
+ "src": "49792:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5715,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49829:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5716,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortExpiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3284,
+ "src": "49829:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "49792:71:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49476:387:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 5723,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5719,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49879:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5720,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isLongPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3300,
+ "src": "49879:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5721,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5659,
+ "src": "49906:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5722,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isShortPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3298,
+ "src": "49906:24:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49879:51:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "49476:454:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 5663,
+ "id": 5725,
+ "nodeType": "Return",
+ "src": "49457:473:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5655,
+ "nodeType": "StructuredDocumentation",
+ "src": "48688:311:2",
+ "text": " @dev if there is a short option and a long option in the vault, ensure that the long option is able to be used as collateral for the short option\n @param _vault the vault to check\n @param _vaultDetails vault details struct\n @return true if long is marginable or false if not"
+ },
+ "id": 5727,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isMarginableLong",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5660,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5657,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5727,
+ "src": "49031:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5656,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "49031:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5659,
+ "mutability": "mutable",
+ "name": "_vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5727,
+ "src": "49064:33:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5658,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "49064:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "49030:68:2"
+ },
+ "returnParameters": {
+ "id": 5663,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5662,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5727,
+ "src": "49146:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5661,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "49146:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "49145:6:2"
+ },
+ "scope": 5915,
+ "src": "49004:933:2",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5777,
+ "nodeType": "Block",
+ "src": "50384:413:2",
+ "statements": [
+ {
+ "assignments": [
+ 5738
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5738,
+ "mutability": "mutable",
+ "name": "isMarginable",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5777,
+ "src": "50394:17:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5737,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "50394:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5740,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 5739,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "50414:4:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "50394:24:2"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 5743,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "50433:28:2",
+ "subExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5741,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5732,
+ "src": "50434:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5742,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasCollateral",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3306,
+ "src": "50434:27:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5746,
+ "nodeType": "IfStatement",
+ "src": "50429:53:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5744,
+ "name": "isMarginable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5738,
+ "src": "50470:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 5736,
+ "id": 5745,
+ "nodeType": "Return",
+ "src": "50463:19:2"
+ }
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5747,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5732,
+ "src": "50497:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5748,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasShort",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3304,
+ "src": "50497:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5760,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5732,
+ "src": "50635:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5761,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "hasLong",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3302,
+ "src": "50635:21:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5773,
+ "nodeType": "IfStatement",
+ "src": "50631:130:2",
+ "trueBody": {
+ "id": 5772,
+ "nodeType": "Block",
+ "src": "50658:103:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5762,
+ "name": "isMarginable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5738,
+ "src": "50672:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5763,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5732,
+ "src": "50687:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5764,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "longCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3280,
+ "src": "50687:33:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5765,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5730,
+ "src": "50724:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5766,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "50724:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5768,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5767,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "50748:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "50724:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "50687:63:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "50672:78:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 5771,
+ "nodeType": "ExpressionStatement",
+ "src": "50672:78:2"
+ }
+ ]
+ }
+ },
+ "id": 5774,
+ "nodeType": "IfStatement",
+ "src": "50493:268:2",
+ "trueBody": {
+ "id": 5759,
+ "nodeType": "Block",
+ "src": "50521:104:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5757,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5749,
+ "name": "isMarginable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5738,
+ "src": "50535:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5756,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5750,
+ "name": "_vaultDetails",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5732,
+ "src": "50550:13:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails memory"
+ }
+ },
+ "id": 5751,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "shortCollateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3274,
+ "src": "50550:34:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 5752,
+ "name": "_vault",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5730,
+ "src": "50588:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault memory"
+ }
+ },
+ "id": 5753,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAssets",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10975,
+ "src": "50588:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 5755,
+ "indexExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5754,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "50612:1:2",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "50588:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "50550:64:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "50535:79:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 5758,
+ "nodeType": "ExpressionStatement",
+ "src": "50535:79:2"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5775,
+ "name": "isMarginable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5738,
+ "src": "50778:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 5736,
+ "id": 5776,
+ "nodeType": "Return",
+ "src": "50771:19:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5728,
+ "nodeType": "StructuredDocumentation",
+ "src": "49943:278:2",
+ "text": " @dev if there is short option and collateral asset in the vault, ensure that the collateral asset is valid for the short option\n @param _vault the vault to check\n @param _vaultDetails vault details struct\n @return true if marginable or false"
+ },
+ "id": 5778,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isMarginableCollateral",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5733,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5730,
+ "mutability": "mutable",
+ "name": "_vault",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5778,
+ "src": "50259:31:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_memory_ptr",
+ "typeString": "struct MarginVault.Vault"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5729,
+ "name": "MarginVault.Vault",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10985,
+ "src": "50259:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Vault_$10985_storage_ptr",
+ "typeString": "struct MarginVault.Vault"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5732,
+ "mutability": "mutable",
+ "name": "_vaultDetails",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5778,
+ "src": "50292:33:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_memory_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5731,
+ "name": "VaultDetails",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 3307,
+ "src": "50292:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_VaultDetails_$3307_storage_ptr",
+ "typeString": "struct MarginCalculator.VaultDetails"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "50258:68:2"
+ },
+ "returnParameters": {
+ "id": 5736,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5735,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5778,
+ "src": "50374:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5734,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "50374:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "50373:6:2"
+ },
+ "scope": 5915,
+ "src": "50226:571:2",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5802,
+ "nodeType": "Block",
+ "src": "51223:88:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5795,
+ "name": "_underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5781,
+ "src": "51261:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5796,
+ "name": "_strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5783,
+ "src": "51274:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5797,
+ "name": "_collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5785,
+ "src": "51283:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5798,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5787,
+ "src": "51296:6:2",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5793,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "51250:3:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 5794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encode",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "51250:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 5799,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "51250:53:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 5792,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "51240:9:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 5800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "51240:64:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "functionReturnParameters": 5791,
+ "id": 5801,
+ "nodeType": "Return",
+ "src": "51233:71:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5779,
+ "nodeType": "StructuredDocumentation",
+ "src": "50803:248:2",
+ "text": " @notice get a product hash\n @param _underlying option underlying asset\n @param _strike option strike asset\n @param _collateral option collateral asset\n @param _isPut option type\n @return product hash"
+ },
+ "id": 5803,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getProductHash",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5788,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5781,
+ "mutability": "mutable",
+ "name": "_underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5803,
+ "src": "51090:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5780,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "51090:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5783,
+ "mutability": "mutable",
+ "name": "_strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5803,
+ "src": "51119:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5782,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "51119:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5785,
+ "mutability": "mutable",
+ "name": "_collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5803,
+ "src": "51144:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5784,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "51144:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5787,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5803,
+ "src": "51173:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5786,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "51173:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "51080:110:2"
+ },
+ "returnParameters": {
+ "id": 5791,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5790,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5803,
+ "src": "51214:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 5789,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "51214:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "51213:9:2"
+ },
+ "scope": 5915,
+ "src": "51056:255:2",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5839,
+ "nodeType": "Block",
+ "src": "51883:230:2",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 5815,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5810,
+ "src": "51897:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 5827,
+ "nodeType": "IfStatement",
+ "src": "51893:107:2",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5818,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5808,
+ "src": "51939:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5816,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5806,
+ "src": "51912:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5817,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isGreaterThan",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10905,
+ "src": "51912:26:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 5819,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "51912:44:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 5824,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "51996:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 5825,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "51912:88:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5822,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5808,
+ "src": "51976:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5820,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5806,
+ "src": "51959:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5821,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "51959:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5823,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "51959:34:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5814,
+ "id": 5826,
+ "nodeType": "Return",
+ "src": "51905:95:2"
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "condition": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5830,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5806,
+ "src": "52049:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5828,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5808,
+ "src": "52018:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5829,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isGreaterThan",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10905,
+ "src": "52018:30:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (bool)"
+ }
+ },
+ "id": 5831,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52018:44:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "argumentTypes": null,
+ "id": 5836,
+ "name": "ZERO",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 3318,
+ "src": "52102:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage",
+ "typeString": "struct FixedPointInt256.FixedPointInt storage ref"
+ }
+ },
+ "id": 5837,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "52018:88:2",
+ "trueExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5834,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5806,
+ "src": "52086:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5832,
+ "name": "_underlyingPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5808,
+ "src": "52065:16:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "id": 5833,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 10785,
+ "src": "52065:20:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_struct$_FixedPointInt_$10548_memory_ptr_$_t_struct$_FixedPointInt_$10548_memory_ptr_$returns$_t_struct$_FixedPointInt_$10548_memory_ptr_$bound_to$_t_struct$_FixedPointInt_$10548_memory_ptr_$",
+ "typeString": "function (struct FixedPointInt256.FixedPointInt memory,struct FixedPointInt256.FixedPointInt memory) pure returns (struct FixedPointInt256.FixedPointInt memory)"
+ }
+ },
+ "id": 5835,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52065:34:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt memory"
+ }
+ },
+ "functionReturnParameters": 5814,
+ "id": 5838,
+ "nodeType": "Return",
+ "src": "52011:95:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5804,
+ "nodeType": "StructuredDocumentation",
+ "src": "51317:364:2",
+ "text": " @notice get option cash value\n @dev this assume that the underlying price is denominated in strike asset\n cash value = max(underlying price - strike price, 0)\n @param _strikePrice option strike price\n @param _underlyingPrice option underlying price\n @param _isPut option type, true for put and false for call option"
+ },
+ "id": 5840,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getCashValue",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5811,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5806,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5840,
+ "src": "51718:37:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5805,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "51718:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5808,
+ "mutability": "mutable",
+ "name": "_underlyingPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5840,
+ "src": "51765:41:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5807,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "51765:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5810,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5840,
+ "src": "51816:11:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5809,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "51816:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "51708:125:2"
+ },
+ "returnParameters": {
+ "id": 5814,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5813,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5840,
+ "src": "51857:24:2",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_memory_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5812,
+ "name": "FPI.FixedPointInt",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 10548,
+ "src": "51857:17:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_FixedPointInt_$10548_storage_ptr",
+ "typeString": "struct FixedPointInt256.FixedPointInt"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "51856:26:2"
+ },
+ "scope": 5915,
+ "src": "51686:427:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5913,
+ "nodeType": "Block",
+ "src": "52420:705:2",
+ "statements": [
+ {
+ "assignments": [
+ 5859
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 5859,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5913,
+ "src": "52430:22:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 5858,
+ "name": "OtokenInterface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9725,
+ "src": "52430:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 5863,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 5861,
+ "name": "_otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5843,
+ "src": "52471:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 5860,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "52455:15:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 5862,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52455:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "52430:49:2"
+ },
+ {
+ "clauses": [
+ {
+ "block": {
+ "id": 5888,
+ "nodeType": "Block",
+ "src": "52715:92:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 5880,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5868,
+ "src": "52737:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5881,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5870,
+ "src": "52749:10:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5882,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5872,
+ "src": "52761:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5883,
+ "name": "strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5874,
+ "src": "52769:11:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5884,
+ "name": "expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5876,
+ "src": "52782:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 5885,
+ "name": "isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5878,
+ "src": "52790:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 5886,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "52736:60:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "functionReturnParameters": 5857,
+ "id": 5887,
+ "nodeType": "Return",
+ "src": "52729:67:2"
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 5889,
+ "nodeType": "TryCatchClause",
+ "parameters": {
+ "id": 5879,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5868,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5889,
+ "src": "52541:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5867,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52541:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5870,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5889,
+ "src": "52573:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5869,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52573:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5872,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5889,
+ "src": "52605:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5871,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52605:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5874,
+ "mutability": "mutable",
+ "name": "strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5889,
+ "src": "52633:19:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5873,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "52633:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5876,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5889,
+ "src": "52666:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5875,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "52666:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5878,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5889,
+ "src": "52694:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5877,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "52694:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "52527:187:2"
+ },
+ "src": "52519:288:2"
+ },
+ {
+ "block": {
+ "id": 5910,
+ "nodeType": "Block",
+ "src": "52814:305:2",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5890,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "52878:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5891,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "collateralAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9663,
+ "src": "52878:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 5892,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52878:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5893,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "52920:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5894,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "underlyingAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9653,
+ "src": "52920:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 5895,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52920:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5896,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "52962:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5897,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "strikeAsset",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9658,
+ "src": "52962:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 5898,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52962:20:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5899,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "53000:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5900,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "strikePrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9668,
+ "src": "53000:18:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 5901,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "53000:20:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5902,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "53038:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5903,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "expiryTimestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9673,
+ "src": "53038:22:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 5904,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "53038:24:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5905,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "53080:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5906,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isPut",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9678,
+ "src": "53080:12:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
+ "typeString": "function () view external returns (bool)"
+ }
+ },
+ "id": 5907,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "53080:14:2",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 5908,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "52860:248:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "functionReturnParameters": 5857,
+ "id": 5909,
+ "nodeType": "Return",
+ "src": "52853:255:2"
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 5911,
+ "nodeType": "TryCatchClause",
+ "parameters": null,
+ "src": "52808:311:2"
+ }
+ ],
+ "externalCall": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "id": 5864,
+ "name": "otoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5859,
+ "src": "52493:6:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 5865,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getOtokenDetails",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9710,
+ "src": "52493:23:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "function () view external returns (address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 5866,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "52493:25:2",
+ "tryCall": true,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 5912,
+ "nodeType": "TryStatement",
+ "src": "52489:630:2"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5841,
+ "nodeType": "StructuredDocumentation",
+ "src": "52119:68:2",
+ "text": " @dev get otoken detail, from both otoken versions"
+ },
+ "id": 5914,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getOtokenDetails",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5844,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5843,
+ "mutability": "mutable",
+ "name": "_otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52219:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5842,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52219:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "52218:17:2"
+ },
+ "returnParameters": {
+ "id": 5857,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5846,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52296:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5845,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52296:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5848,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52317:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5847,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52317:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5850,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52338:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5849,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "52338:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5852,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52359:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5851,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "52359:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5854,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52380:7:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5853,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "52380:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5856,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5914,
+ "src": "52401:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 5855,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "52401:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "52282:133:2"
+ },
+ "scope": 5915,
+ "src": "52192:933:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 5916,
+ "src": "711:52416:2"
+ }
+ ],
+ "src": "47:53081:2"
+ },
+ "id": 2
+ },
+ "contracts/core/MarginPool.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/MarginPool.sol",
+ "exportedSymbols": {
+ "MarginPool": [
+ 6338
+ ]
+ },
+ "id": 6339,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 5917,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "47:24:3"
+ },
+ {
+ "absolutePath": "contracts/interfaces/ERC20Interface.sol",
+ "file": "../interfaces/ERC20Interface.sol",
+ "id": 5919,
+ "nodeType": "ImportDirective",
+ "scope": 6339,
+ "sourceUnit": 9383,
+ "src": "73:64:3",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 5918,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "81:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/AddressBookInterface.sol",
+ "file": "../interfaces/AddressBookInterface.sol",
+ "id": 5921,
+ "nodeType": "ImportDirective",
+ "scope": 6339,
+ "sourceUnit": 9226,
+ "src": "138:76:3",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 5920,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "146:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/SafeMath.sol",
+ "file": "../packages/oz/SafeMath.sol",
+ "id": 5923,
+ "nodeType": "ImportDirective",
+ "scope": 6339,
+ "sourceUnit": 14286,
+ "src": "215:53:3",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 5922,
+ "name": "SafeMath",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "223:8:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/SafeERC20.sol",
+ "file": "../packages/oz/SafeERC20.sol",
+ "id": 5925,
+ "nodeType": "ImportDirective",
+ "scope": 6339,
+ "sourceUnit": 14090,
+ "src": "269:55:3",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 5924,
+ "name": "SafeERC20",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "277:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Ownable.sol",
+ "file": "../packages/oz/Ownable.sol",
+ "id": 5927,
+ "nodeType": "ImportDirective",
+ "scope": 6339,
+ "sourceUnit": 13837,
+ "src": "325:51:3",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 5926,
+ "name": "Ownable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "333:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 5929,
+ "name": "Ownable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 13836,
+ "src": "501:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Ownable_$13836",
+ "typeString": "contract Ownable"
+ }
+ },
+ "id": 5930,
+ "nodeType": "InheritanceSpecifier",
+ "src": "501:7:3"
+ }
+ ],
+ "contractDependencies": [
+ 13619,
+ 13836
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 5928,
+ "nodeType": "StructuredDocumentation",
+ "src": "378:99:3",
+ "text": " @author Opyn Team\n @title MarginPool\n @notice Contract that holds all protocol funds"
+ },
+ "fullyImplemented": true,
+ "id": 6338,
+ "linearizedBaseContracts": [
+ 6338,
+ 13836,
+ 13619
+ ],
+ "name": "MarginPool",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 5933,
+ "libraryName": {
+ "contractScope": null,
+ "id": 5931,
+ "name": "SafeMath",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 14285,
+ "src": "521:8:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SafeMath_$14285",
+ "typeString": "library SafeMath"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "515:27:3",
+ "typeName": {
+ "id": 5932,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "534:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "id": 5936,
+ "libraryName": {
+ "contractScope": null,
+ "id": 5934,
+ "name": "SafeERC20",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 14089,
+ "src": "553:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SafeERC20_$14089",
+ "typeString": "library SafeERC20"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "547:35:3",
+ "typeName": {
+ "contractScope": null,
+ "id": 5935,
+ "name": "ERC20Interface",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 9382,
+ "src": "567:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 5937,
+ "nodeType": "StructuredDocumentation",
+ "src": "588:30:3",
+ "text": "@notice AddressBook module"
+ },
+ "functionSelector": "f5887cdd",
+ "id": 5939,
+ "mutability": "mutable",
+ "name": "addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6338,
+ "src": "623:26:3",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5938,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "623:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 5940,
+ "nodeType": "StructuredDocumentation",
+ "src": "655:79:3",
+ "text": "@dev the address that has the ability to withdraw excess assets in the pool"
+ },
+ "functionSelector": "d811fcf0",
+ "id": 5942,
+ "mutability": "mutable",
+ "name": "farmer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6338,
+ "src": "739:21:3",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5941,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "739:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 5943,
+ "nodeType": "StructuredDocumentation",
+ "src": "766:73:3",
+ "text": "@dev mapping between an asset and the amount of the asset in the pool"
+ },
+ "id": 5947,
+ "mutability": "mutable",
+ "name": "assetBalance",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6338,
+ "src": "844:49:3",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 5946,
+ "keyType": {
+ "id": 5944,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "852:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "844:27:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 5945,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "863:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 5967,
+ "nodeType": "Block",
+ "src": "1029:113:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 5959,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 5954,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5950,
+ "src": "1047:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 5957,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1071:1:3",
+ "subdenomination": null,
+ "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": 5956,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1063:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 5955,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1063:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 5958,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1063:10:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "1047:26:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "496e76616c6964206164647265737320626f6f6b",
+ "id": 5960,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1075:22:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_07c6f3a2c44494e34f0459954f2820110e85ac1fa08281f50bf018e7ae5d479a",
+ "typeString": "literal_string \"Invalid address book\""
+ },
+ "value": "Invalid address book"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_07c6f3a2c44494e34f0459954f2820110e85ac1fa08281f50bf018e7ae5d479a",
+ "typeString": "literal_string \"Invalid address book\""
+ }
+ ],
+ "id": 5953,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "1039:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 5961,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1039:59:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 5962,
+ "nodeType": "ExpressionStatement",
+ "src": "1039:59:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 5965,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 5963,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5939,
+ "src": "1109:11:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 5964,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5950,
+ "src": "1123:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1109:26:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 5966,
+ "nodeType": "ExpressionStatement",
+ "src": "1109:26:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 5948,
+ "nodeType": "StructuredDocumentation",
+ "src": "900:83:3",
+ "text": " @notice contructor\n @param _addressBook AddressBook module"
+ },
+ "id": 5968,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 5951,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5950,
+ "mutability": "mutable",
+ "name": "_addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5968,
+ "src": "1000:20:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5949,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1000:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "999:22:3"
+ },
+ "returnParameters": {
+ "id": 5952,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1029:0:3"
+ },
+ "scope": 6338,
+ "src": "988:154:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 5969,
+ "nodeType": "StructuredDocumentation",
+ "src": "1148:72:3",
+ "text": "@notice emits an event when marginpool receive funds from controller"
+ },
+ "id": 5977,
+ "name": "TransferToPool",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 5976,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5971,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5977,
+ "src": "1246:21:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5970,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1246:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5973,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "user",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5977,
+ "src": "1269:20:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5972,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1269:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5975,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5977,
+ "src": "1291:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5974,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1291:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1245:61:3"
+ },
+ "src": "1225:82:3"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 5978,
+ "nodeType": "StructuredDocumentation",
+ "src": "1312:71:3",
+ "text": "@notice emits an event when marginpool transfer funds to controller"
+ },
+ "id": 5986,
+ "name": "TransferToUser",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 5985,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5980,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5986,
+ "src": "1409:21:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5979,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1409:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5982,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "user",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5986,
+ "src": "1432:20:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5981,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1432:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5984,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5986,
+ "src": "1454:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5983,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1454:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1408:61:3"
+ },
+ "src": "1388:82:3"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 5987,
+ "nodeType": "StructuredDocumentation",
+ "src": "1475:56:3",
+ "text": "@notice emit event after updating the farmer address"
+ },
+ "id": 5993,
+ "name": "FarmerUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 5992,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5989,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "oldAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5993,
+ "src": "1556:26:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5988,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1556:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5991,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "newAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 5993,
+ "src": "1584:26:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5990,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1584:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1555:56:3"
+ },
+ "src": "1536:76:3"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 5994,
+ "nodeType": "StructuredDocumentation",
+ "src": "1617:65:3",
+ "text": "@notice emit event when an asset gets harvested from the pool"
+ },
+ "id": 6002,
+ "name": "AssetFarmed",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6001,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 5996,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6002,
+ "src": "1705:21:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5995,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1705:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 5998,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "receiver",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6002,
+ "src": "1728:24:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 5997,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1728:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6000,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6002,
+ "src": "1754:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 5999,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1754:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1704:65:3"
+ },
+ "src": "1687:83:3"
+ },
+ {
+ "body": {
+ "id": 6018,
+ "nodeType": "Block",
+ "src": "1878:175:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6013,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6006,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "1909:3:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 6007,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "1909:10:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6009,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5939,
+ "src": "1944:11:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6008,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "1923:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 6010,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1923:33:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 6011,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getController",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9150,
+ "src": "1923:47:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 6012,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1923:49:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1909:63:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a2053656e646572206973206e6f7420436f6e74726f6c6c6572",
+ "id": 6014,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1986:38:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_2685414eb1c6115beecaf220cfb1eaf0a55c75846b20d83f4322177e0710055a",
+ "typeString": "literal_string \"MarginPool: Sender is not Controller\""
+ },
+ "value": "MarginPool: Sender is not Controller"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_2685414eb1c6115beecaf220cfb1eaf0a55c75846b20d83f4322177e0710055a",
+ "typeString": "literal_string \"MarginPool: Sender is not Controller\""
+ }
+ ],
+ "id": 6005,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "1888:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6015,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1888:146:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6016,
+ "nodeType": "ExpressionStatement",
+ "src": "1888:146:3"
+ },
+ {
+ "id": 6017,
+ "nodeType": "PlaceholderStatement",
+ "src": "2045:1:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6003,
+ "nodeType": "StructuredDocumentation",
+ "src": "1776:71:3",
+ "text": " @notice check if the sender is the Controller module"
+ },
+ "id": 6019,
+ "name": "onlyController",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6004,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1875:2:3"
+ },
+ "src": "1852:201:3",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 6031,
+ "nodeType": "Block",
+ "src": "2154:94:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6026,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6023,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "2172:3:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 6024,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "2172:10:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 6025,
+ "name": "farmer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5942,
+ "src": "2186:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2172:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a2053656e646572206973206e6f74206661726d6572",
+ "id": 6027,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2194:34:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8b3a3580612d472c9890d83bdb07653779d806876819c8ee64ab85999e860c6f",
+ "typeString": "literal_string \"MarginPool: Sender is not farmer\""
+ },
+ "value": "MarginPool: Sender is not farmer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8b3a3580612d472c9890d83bdb07653779d806876819c8ee64ab85999e860c6f",
+ "typeString": "literal_string \"MarginPool: Sender is not farmer\""
+ }
+ ],
+ "id": 6022,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2164:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6028,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2164:65:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6029,
+ "nodeType": "ExpressionStatement",
+ "src": "2164:65:3"
+ },
+ {
+ "id": 6030,
+ "nodeType": "PlaceholderStatement",
+ "src": "2240:1:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6020,
+ "nodeType": "StructuredDocumentation",
+ "src": "2059:68:3",
+ "text": " @notice check if the sender is the farmer address"
+ },
+ "id": 6032,
+ "name": "onlyFarmer",
+ "nodeType": "ModifierDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6021,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2151:2:3"
+ },
+ "src": "2132:116:3",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 6080,
+ "nodeType": "Block",
+ "src": "2635:342:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6047,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6045,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6039,
+ "src": "2653:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6046,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2663:1:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "2653:11:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a207472616e73666572546f506f6f6c20616d6f756e7420697320657175616c20746f2030",
+ "id": 6048,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2666:49:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0f45d74efb643c1571c9eb3ef3b8f2562e811a42f64d67df031e62dcbbd13154",
+ "typeString": "literal_string \"MarginPool: transferToPool amount is equal to 0\""
+ },
+ "value": "MarginPool: transferToPool amount is equal to 0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_0f45d74efb643c1571c9eb3ef3b8f2562e811a42f64d67df031e62dcbbd13154",
+ "typeString": "literal_string \"MarginPool: transferToPool amount is equal to 0\""
+ }
+ ],
+ "id": 6044,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2645:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6049,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2645:71:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6050,
+ "nodeType": "ExpressionStatement",
+ "src": "2645:71:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6060,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6051,
+ "name": "assetBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5947,
+ "src": "2726:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6053,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6052,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6035,
+ "src": "2739:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "2726:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6058,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6039,
+ "src": "2774:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6054,
+ "name": "assetBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5947,
+ "src": "2749:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6056,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6055,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6035,
+ "src": "2762:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2749:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6057,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "2749:24:3",
+ "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": 6059,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2749:33:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2726:56:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6061,
+ "nodeType": "ExpressionStatement",
+ "src": "2726:56:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6066,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6037,
+ "src": "2887:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6069,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -28,
+ "src": "2902:4:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPool_$6338",
+ "typeString": "contract MarginPool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_MarginPool_$6338",
+ "typeString": "contract MarginPool"
+ }
+ ],
+ "id": 6068,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2894:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6067,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2894:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6070,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2894:13:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6071,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6039,
+ "src": "2909:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6063,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6035,
+ "src": "2862:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6062,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "2847:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 6064,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2847:22:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 6065,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "safeTransferFrom",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 13935,
+ "src": "2847:39:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20Interface_$9382_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "function (contract ERC20Interface,address,address,uint256)"
+ }
+ },
+ "id": 6072,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2847:70:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6073,
+ "nodeType": "ExpressionStatement",
+ "src": "2847:70:3"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6075,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6035,
+ "src": "2947:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6076,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6037,
+ "src": "2955:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6077,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6039,
+ "src": "2962:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6074,
+ "name": "TransferToPool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5977,
+ "src": "2932:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 6078,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2932:38:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6079,
+ "nodeType": "EmitStatement",
+ "src": "2927:43:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6033,
+ "nodeType": "StructuredDocumentation",
+ "src": "2254:252:3",
+ "text": " @notice transfers an asset from a user to the pool\n @param _asset address of the asset to transfer\n @param _user address of the user to transfer assets from\n @param _amount amount of the token to transfer from _user"
+ },
+ "functionSelector": "dd2c99f7",
+ "id": 6081,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6042,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6041,
+ "name": "onlyController",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6019,
+ "src": "2620:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "2620:14:3"
+ }
+ ],
+ "name": "transferToPool",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6040,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6035,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6081,
+ "src": "2544:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6034,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2544:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6037,
+ "mutability": "mutable",
+ "name": "_user",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6081,
+ "src": "2568:13:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6036,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2568:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6039,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6081,
+ "src": "2591:15:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6038,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2591:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2534:78:3"
+ },
+ "returnParameters": {
+ "id": 6043,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2635:0:3"
+ },
+ "scope": 6338,
+ "src": "2511:466:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 6128,
+ "nodeType": "Block",
+ "src": "3360:332:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6099,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6094,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6086,
+ "src": "3378:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6097,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -28,
+ "src": "3395:4:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPool_$6338",
+ "typeString": "contract MarginPool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_MarginPool_$6338",
+ "typeString": "contract MarginPool"
+ }
+ ],
+ "id": 6096,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "3387:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6095,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3387:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6098,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3387:13:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3378:22:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a2063616e6e6f74207472616e736665722061737365747320746f206f6e6573656c66",
+ "id": 6100,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3402:47:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_780efa7baa77caf417788f8a0a31667a961b9ce8dd6e231ab5b2d7876d42b5bb",
+ "typeString": "literal_string \"MarginPool: cannot transfer assets to oneself\""
+ },
+ "value": "MarginPool: cannot transfer assets to oneself"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_780efa7baa77caf417788f8a0a31667a961b9ce8dd6e231ab5b2d7876d42b5bb",
+ "typeString": "literal_string \"MarginPool: cannot transfer assets to oneself\""
+ }
+ ],
+ "id": 6093,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3370:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6101,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3370:80:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6102,
+ "nodeType": "ExpressionStatement",
+ "src": "3370:80:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6112,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6103,
+ "name": "assetBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5947,
+ "src": "3460:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6105,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6104,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6084,
+ "src": "3473:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "3460:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6110,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6088,
+ "src": "3508:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6106,
+ "name": "assetBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5947,
+ "src": "3483:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6108,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6107,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6084,
+ "src": "3496:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "3483:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6109,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "3483:24:3",
+ "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": 6111,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3483:33:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "3460:56:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6113,
+ "nodeType": "ExpressionStatement",
+ "src": "3460:56:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6118,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6086,
+ "src": "3617:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6119,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6088,
+ "src": "3624:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6115,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6084,
+ "src": "3596:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6114,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "3581:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 6116,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3581:22:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 6117,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "safeTransfer",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 13910,
+ "src": "3581:35:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20Interface_$9382_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "function (contract ERC20Interface,address,uint256)"
+ }
+ },
+ "id": 6120,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3581:51:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6121,
+ "nodeType": "ExpressionStatement",
+ "src": "3581:51:3"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6123,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6084,
+ "src": "3662:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6124,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6086,
+ "src": "3670:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6125,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6088,
+ "src": "3677:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6122,
+ "name": "TransferToUser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5986,
+ "src": "3647:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 6126,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3647:38:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6127,
+ "nodeType": "EmitStatement",
+ "src": "3642:43:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6082,
+ "nodeType": "StructuredDocumentation",
+ "src": "2983:248:3",
+ "text": " @notice transfers an asset from the pool to a user\n @param _asset address of the asset to transfer\n @param _user address of the user to transfer assets to\n @param _amount amount of the token to transfer to _user"
+ },
+ "functionSelector": "fa93b2a5",
+ "id": 6129,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6091,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6090,
+ "name": "onlyController",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6019,
+ "src": "3345:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "3345:14:3"
+ }
+ ],
+ "name": "transferToUser",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6089,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6084,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6129,
+ "src": "3269:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6083,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3269:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6086,
+ "mutability": "mutable",
+ "name": "_user",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6129,
+ "src": "3293:13:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6085,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3293:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6088,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6129,
+ "src": "3316:15:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6087,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3316:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3259:78:3"
+ },
+ "returnParameters": {
+ "id": 6092,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3360:0:3"
+ },
+ "scope": 6338,
+ "src": "3236:456:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 6141,
+ "nodeType": "Block",
+ "src": "3902:44:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6137,
+ "name": "assetBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5947,
+ "src": "3919:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6139,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6138,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6132,
+ "src": "3932:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "3919:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 6136,
+ "id": 6140,
+ "nodeType": "Return",
+ "src": "3912:27:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6130,
+ "nodeType": "StructuredDocumentation",
+ "src": "3698:125:3",
+ "text": " @notice get the stored balance of an asset\n @param _asset asset address\n @return asset balance"
+ },
+ "functionSelector": "c595b007",
+ "id": 6142,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getStoredBalance",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6133,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6132,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6142,
+ "src": "3854:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6131,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3854:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3853:16:3"
+ },
+ "returnParameters": {
+ "id": 6136,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6135,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6142,
+ "src": "3893:7:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6134,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3893:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3892:9:3"
+ },
+ "scope": 6338,
+ "src": "3828:118:3",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6197,
+ "nodeType": "Block",
+ "src": "4375:370:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 6168,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6162,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6158,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6146,
+ "src": "4406:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6159,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4406:13:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6160,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6149,
+ "src": "4423:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6161,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4423:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4406:29:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6167,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6163,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6149,
+ "src": "4439:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6164,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4439:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6165,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6152,
+ "src": "4455:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 6166,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4455:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4439:30:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "4406:63:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a2062617463685472616e73666572546f506f6f6c206172726179206c656e6774687320617265206e6f7420657175616c",
+ "id": 6169,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4483:61:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_acdbb28b9ca6a6d29d2621091ce4c26e500b69d960a9888d5a116865f6df6eaa",
+ "typeString": "literal_string \"MarginPool: batchTransferToPool array lengths are not equal\""
+ },
+ "value": "MarginPool: batchTransferToPool array lengths are not equal"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_acdbb28b9ca6a6d29d2621091ce4c26e500b69d960a9888d5a116865f6df6eaa",
+ "typeString": "literal_string \"MarginPool: batchTransferToPool array lengths are not equal\""
+ }
+ ],
+ "id": 6157,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "4385:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6170,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4385:169:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6171,
+ "nodeType": "ExpressionStatement",
+ "src": "4385:169:3"
+ },
+ {
+ "body": {
+ "id": 6195,
+ "nodeType": "Block",
+ "src": "4609:130:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6184,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6146,
+ "src": "4696:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6186,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6185,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6173,
+ "src": "4703:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4696:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6187,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6149,
+ "src": "4707:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6189,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6188,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6173,
+ "src": "4713:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4707:8:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6190,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6152,
+ "src": "4717:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 6192,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6191,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6173,
+ "src": "4725:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4717:10:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6183,
+ "name": "transferToPool",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6081,
+ "src": "4681:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 6193,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4681:47:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6194,
+ "nodeType": "ExpressionStatement",
+ "src": "4681:47:3"
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6179,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6176,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6173,
+ "src": "4585:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6177,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6146,
+ "src": "4589:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6178,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4589:13:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4585:17:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 6196,
+ "initializationExpression": {
+ "assignments": [
+ 6173
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6173,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6196,
+ "src": "4570:9:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6172,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4570:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6175,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6174,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4582:1:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4570:13:3"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6181,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "4604:3:3",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 6180,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6173,
+ "src": "4604:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6182,
+ "nodeType": "ExpressionStatement",
+ "src": "4604:3:3"
+ },
+ "nodeType": "ForStatement",
+ "src": "4565:174:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6143,
+ "nodeType": "StructuredDocumentation",
+ "src": "3952:260:3",
+ "text": " @notice transfers multiple assets from users to the pool\n @param _asset addresses of the assets to transfer\n @param _user addresses of the users to transfer assets to\n @param _amount amount of each token to transfer to pool"
+ },
+ "functionSelector": "4979cd14",
+ "id": 6198,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6155,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6154,
+ "name": "onlyController",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6019,
+ "src": "4360:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4360:14:3"
+ }
+ ],
+ "name": "batchTransferToPool",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6153,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6146,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6198,
+ "src": "4255:23:3",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6144,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4255:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6145,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "4255:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6149,
+ "mutability": "mutable",
+ "name": "_user",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6198,
+ "src": "4288:22:3",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6147,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4288:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6148,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "4288:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6152,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6198,
+ "src": "4320:24:3",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6150,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4320:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6151,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "4320:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4245:105:3"
+ },
+ "returnParameters": {
+ "id": 6156,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4375:0:3"
+ },
+ "scope": 6338,
+ "src": "4217:528:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6253,
+ "nodeType": "Block",
+ "src": "5175:370:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 6224,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6218,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6214,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6202,
+ "src": "5206:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6215,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5206:13:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6216,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6205,
+ "src": "5223:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6217,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5223:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5206:29:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&&",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6223,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6219,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6205,
+ "src": "5239:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6220,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5239:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6221,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6208,
+ "src": "5255:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 6222,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5255:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5239:30:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "5206:63:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a2062617463685472616e73666572546f55736572206172726179206c656e6774687320617265206e6f7420657175616c",
+ "id": 6225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5283:61:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f648042236b105afe299c9e60220cc2ab4b30a76eb421600556bdb6a6322e30e",
+ "typeString": "literal_string \"MarginPool: batchTransferToUser array lengths are not equal\""
+ },
+ "value": "MarginPool: batchTransferToUser array lengths are not equal"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f648042236b105afe299c9e60220cc2ab4b30a76eb421600556bdb6a6322e30e",
+ "typeString": "literal_string \"MarginPool: batchTransferToUser array lengths are not equal\""
+ }
+ ],
+ "id": 6213,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "5185:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6226,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5185:169:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6227,
+ "nodeType": "ExpressionStatement",
+ "src": "5185:169:3"
+ },
+ {
+ "body": {
+ "id": 6251,
+ "nodeType": "Block",
+ "src": "5409:130:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6240,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6202,
+ "src": "5496:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6242,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6241,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6229,
+ "src": "5503:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5496:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6243,
+ "name": "_user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6205,
+ "src": "5507:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6245,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6244,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6229,
+ "src": "5513:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5507:8:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6246,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6208,
+ "src": "5517:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[] memory"
+ }
+ },
+ "id": 6248,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6247,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6229,
+ "src": "5525:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5517:10:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6239,
+ "name": "transferToUser",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6129,
+ "src": "5481:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 6249,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5481:47:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6250,
+ "nodeType": "ExpressionStatement",
+ "src": "5481:47:3"
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6235,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6232,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6229,
+ "src": "5385:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6233,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6202,
+ "src": "5389:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[] memory"
+ }
+ },
+ "id": 6234,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5389:13:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5385:17:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 6252,
+ "initializationExpression": {
+ "assignments": [
+ 6229
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6229,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6252,
+ "src": "5370:9:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6228,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5370:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6231,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6230,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5382:1:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5370:13:3"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6237,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "5404:3:3",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 6236,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6229,
+ "src": "5404:1:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6238,
+ "nodeType": "ExpressionStatement",
+ "src": "5404:3:3"
+ },
+ "nodeType": "ForStatement",
+ "src": "5365:174:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6199,
+ "nodeType": "StructuredDocumentation",
+ "src": "4751:261:3",
+ "text": " @notice transfers multiple assets from the pool to users\n @param _asset addresses of the assets to transfer\n @param _user addresses of the users to transfer assets to\n @param _amount amount of each token to transfer to _user"
+ },
+ "functionSelector": "86a19c5e",
+ "id": 6254,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6211,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6210,
+ "name": "onlyController",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6019,
+ "src": "5160:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5160:14:3"
+ }
+ ],
+ "name": "batchTransferToUser",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6209,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6202,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6254,
+ "src": "5055:23:3",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6200,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5055:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6201,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "5055:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6205,
+ "mutability": "mutable",
+ "name": "_user",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6254,
+ "src": "5088:22:3",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6203,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5088:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6204,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "5088:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6208,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6254,
+ "src": "5120:24:3",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6206,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5120:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6207,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "5120:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5045:105:3"
+ },
+ "returnParameters": {
+ "id": 6212,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5175:0:3"
+ },
+ "scope": 6338,
+ "src": "5017:528:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6318,
+ "nodeType": "Block",
+ "src": "5959:457:3",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6272,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6267,
+ "name": "_receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6259,
+ "src": "5977:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6270,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5998:1:3",
+ "subdenomination": null,
+ "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": 6269,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "5990:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6268,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5990:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6271,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5990:10:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "5977:23:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a20696e76616c69642072656365697665722061646472657373",
+ "id": 6273,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6002:38:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c9639a312a6c73d8693d5ada429261a5eeb25ea822c4906311f2674c101905fc",
+ "typeString": "literal_string \"MarginPool: invalid receiver address\""
+ },
+ "value": "MarginPool: invalid receiver address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c9639a312a6c73d8693d5ada429261a5eeb25ea822c4906311f2674c101905fc",
+ "typeString": "literal_string \"MarginPool: invalid receiver address\""
+ }
+ ],
+ "id": 6266,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "5969:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6274,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5969:72:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6275,
+ "nodeType": "ExpressionStatement",
+ "src": "5969:72:3"
+ },
+ {
+ "assignments": [
+ 6277
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6277,
+ "mutability": "mutable",
+ "name": "externalBalance",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6318,
+ "src": "6052:23:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6276,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6052:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6287,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6284,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -28,
+ "src": "6119:4:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_MarginPool_$6338",
+ "typeString": "contract MarginPool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_MarginPool_$6338",
+ "typeString": "contract MarginPool"
+ }
+ ],
+ "id": 6283,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6111:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6282,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6111:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6285,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6111:13:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6279,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6257,
+ "src": "6093:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6278,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "6078:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 6280,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6078:22:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 6281,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "balanceOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9316,
+ "src": "6078:32:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
+ "typeString": "function (address) view external returns (uint256)"
+ }
+ },
+ "id": 6286,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6078:47:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6052:73:3"
+ },
+ {
+ "assignments": [
+ 6289
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6289,
+ "mutability": "mutable",
+ "name": "storedBalance",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6318,
+ "src": "6135:21:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6288,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6135:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6293,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6290,
+ "name": "assetBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5947,
+ "src": "6159:12:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6292,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6291,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6257,
+ "src": "6172:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6159:20:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6135:44:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6300,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6295,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6261,
+ "src": "6198:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6298,
+ "name": "storedBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6289,
+ "src": "6229:13:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 6296,
+ "name": "externalBalance",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6277,
+ "src": "6209:15:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6297,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "6209:19:3",
+ "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": 6299,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6209:34:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6198:45:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d617267696e506f6f6c3a20616d6f756e7420746f206661726d2065786365656473206c696d6974",
+ "id": 6301,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6245:42:3",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7c20dad25ba0b0107c48bd548f3e5372c4fc48d6754c9f65dfa6094d7949f84f",
+ "typeString": "literal_string \"MarginPool: amount to farm exceeds limit\""
+ },
+ "value": "MarginPool: amount to farm exceeds limit"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7c20dad25ba0b0107c48bd548f3e5372c4fc48d6754c9f65dfa6094d7949f84f",
+ "typeString": "literal_string \"MarginPool: amount to farm exceeds limit\""
+ }
+ ],
+ "id": 6294,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "6190:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6302,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6190:98:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6303,
+ "nodeType": "ExpressionStatement",
+ "src": "6190:98:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6308,
+ "name": "_receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6259,
+ "src": "6335:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6309,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6261,
+ "src": "6346:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6305,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6257,
+ "src": "6314:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6304,
+ "name": "ERC20Interface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9382,
+ "src": "6299:14:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "type(contract ERC20Interface)"
+ }
+ },
+ "id": 6306,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6299:22:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Interface_$9382",
+ "typeString": "contract ERC20Interface"
+ }
+ },
+ "id": 6307,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "safeTransfer",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 13910,
+ "src": "6299:35:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20Interface_$9382_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_ERC20Interface_$9382_$",
+ "typeString": "function (contract ERC20Interface,address,uint256)"
+ }
+ },
+ "id": 6310,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6299:55:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6311,
+ "nodeType": "ExpressionStatement",
+ "src": "6299:55:3"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6313,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6257,
+ "src": "6382:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6314,
+ "name": "_receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6259,
+ "src": "6390:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6315,
+ "name": "_amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6261,
+ "src": "6401:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6312,
+ "name": "AssetFarmed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6002,
+ "src": "6370:11:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 6316,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6370:39:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6317,
+ "nodeType": "EmitStatement",
+ "src": "6365:44:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6255,
+ "nodeType": "StructuredDocumentation",
+ "src": "5551:287:3",
+ "text": " @notice function to collect the excess balance of a particular asset\n @dev can only be called by the farmer address. Do not farm otokens.\n @param _asset asset address\n @param _receiver receiver address\n @param _amount amount to remove from pool"
+ },
+ "functionSelector": "baf46ba6",
+ "id": 6319,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6264,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6263,
+ "name": "onlyFarmer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6032,
+ "src": "5948:10:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5948:10:3"
+ }
+ ],
+ "name": "farm",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6262,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6257,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6319,
+ "src": "5866:14:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6256,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5866:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6259,
+ "mutability": "mutable",
+ "name": "_receiver",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6319,
+ "src": "5890:17:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6258,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5890:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6261,
+ "mutability": "mutable",
+ "name": "_amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6319,
+ "src": "5917:15:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6260,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5917:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5856:82:3"
+ },
+ "returnParameters": {
+ "id": 6265,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5959:0:3"
+ },
+ "scope": 6338,
+ "src": "5843:573:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6336,
+ "nodeType": "Block",
+ "src": "6627:79:3",
+ "statements": [
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6328,
+ "name": "farmer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5942,
+ "src": "6656:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6329,
+ "name": "_farmer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6322,
+ "src": "6664:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6327,
+ "name": "FarmerUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5993,
+ "src": "6642:13:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address)"
+ }
+ },
+ "id": 6330,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6642:30:3",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6331,
+ "nodeType": "EmitStatement",
+ "src": "6637:35:3"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6334,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 6332,
+ "name": "farmer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 5942,
+ "src": "6683:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6333,
+ "name": "_farmer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6322,
+ "src": "6692:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "6683:16:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6335,
+ "nodeType": "ExpressionStatement",
+ "src": "6683:16:3"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6320,
+ "nodeType": "StructuredDocumentation",
+ "src": "6422:145:3",
+ "text": " @notice function to set farmer address\n @dev can only be called by MarginPool owner\n @param _farmer farmer address"
+ },
+ "functionSelector": "e2ed781c",
+ "id": 6337,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6325,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6324,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "6617:9:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "6617:9:3"
+ }
+ ],
+ "name": "setFarmer",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6323,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6322,
+ "mutability": "mutable",
+ "name": "_farmer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6337,
+ "src": "6591:15:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6321,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6591:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6590:17:3"
+ },
+ "returnParameters": {
+ "id": 6326,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6627:0:3"
+ },
+ "scope": 6338,
+ "src": "6572:134:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 6339,
+ "src": "478:6230:3"
+ }
+ ],
+ "src": "47:6662:3"
+ },
+ "id": 3
+ },
+ "contracts/core/Oracle.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/Oracle.sol",
+ "exportedSymbols": {
+ "Oracle": [
+ 7073
+ ]
+ },
+ "id": 7074,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 6340,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "47:24:4"
+ },
+ {
+ "absolutePath": "contracts/interfaces/OpynPricerInterface.sol",
+ "file": "../interfaces/OpynPricerInterface.sol",
+ "id": 6342,
+ "nodeType": "ImportDirective",
+ "scope": 7074,
+ "sourceUnit": 9522,
+ "src": "73:74:4",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 6341,
+ "name": "OpynPricerInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "81:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Ownable.sol",
+ "file": "../packages/oz/Ownable.sol",
+ "id": 6344,
+ "nodeType": "ImportDirective",
+ "scope": 7074,
+ "sourceUnit": 13837,
+ "src": "148:51:4",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 6343,
+ "name": "Ownable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "156:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/SafeMath.sol",
+ "file": "../packages/oz/SafeMath.sol",
+ "id": 6346,
+ "nodeType": "ImportDirective",
+ "scope": 7074,
+ "sourceUnit": 14286,
+ "src": "200:53:4",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 6345,
+ "name": "SafeMath",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "208:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 6348,
+ "name": "Ownable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 13836,
+ "src": "511:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Ownable_$13836",
+ "typeString": "contract Ownable"
+ }
+ },
+ "id": 6349,
+ "nodeType": "InheritanceSpecifier",
+ "src": "511:7:4"
+ }
+ ],
+ "contractDependencies": [
+ 13619,
+ 13836
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 6347,
+ "nodeType": "StructuredDocumentation",
+ "src": "255:236:4",
+ "text": " @author Opyn Team\n @title Oracle Module\n @notice The Oracle module sets, retrieves, and stores USD prices (USD per asset) for underlying, collateral, and strike assets\n manages pricers that are used for different assets"
+ },
+ "fullyImplemented": true,
+ "id": 7073,
+ "linearizedBaseContracts": [
+ 7073,
+ 13836,
+ 13619
+ ],
+ "name": "Oracle",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 6352,
+ "libraryName": {
+ "contractScope": null,
+ "id": 6350,
+ "name": "SafeMath",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 14285,
+ "src": "531:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SafeMath_$14285",
+ "typeString": "library SafeMath"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "525:27:4",
+ "typeName": {
+ "id": 6351,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "544:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "canonicalName": "Oracle.Price",
+ "id": 6357,
+ "members": [
+ {
+ "constant": false,
+ "id": 6354,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6357,
+ "src": "671:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6353,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "671:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6356,
+ "mutability": "mutable",
+ "name": "timestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6357,
+ "src": "694:17:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6355,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "694:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "name": "Price",
+ "nodeType": "StructDefinition",
+ "scope": 7073,
+ "src": "648:127:4",
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 6358,
+ "nodeType": "StructuredDocumentation",
+ "src": "781:115:4",
+ "text": "/ @dev disputer is a role defined by the owner that has the ability to dispute a price during the dispute period"
+ },
+ "id": 6360,
+ "mutability": "mutable",
+ "name": "disputer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "901:25:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6359,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "901:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6362,
+ "mutability": "mutable",
+ "name": "migrated",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "933:13:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 6361,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "933:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 6363,
+ "nodeType": "StructuredDocumentation",
+ "src": "953:158:4",
+ "text": "@dev mapping of asset pricer to its locking period\n locking period is the period of time after the expiry timestamp where a price can not be pushed"
+ },
+ "id": 6367,
+ "mutability": "mutable",
+ "name": "pricerLockingPeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "1116:56:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 6366,
+ "keyType": {
+ "id": 6364,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1124:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1116:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 6365,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1135:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 6368,
+ "nodeType": "StructuredDocumentation",
+ "src": "1178:167:4",
+ "text": "@dev mapping of asset pricer to its dispute period\n dispute period is the period of time after an expiry price has been pushed where a price can be disputed"
+ },
+ "id": 6372,
+ "mutability": "mutable",
+ "name": "pricerDisputePeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "1350:56:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 6371,
+ "keyType": {
+ "id": 6369,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1358:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1350:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 6370,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1369:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 6373,
+ "nodeType": "StructuredDocumentation",
+ "src": "1412:48:4",
+ "text": "@dev mapping between an asset and its pricer"
+ },
+ "id": 6377,
+ "mutability": "mutable",
+ "name": "assetPricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "1465:48:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ },
+ "typeName": {
+ "id": 6376,
+ "keyType": {
+ "id": 6374,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1473:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1465:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ },
+ "valueType": {
+ "id": 6375,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1484:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 6378,
+ "nodeType": "StructuredDocumentation",
+ "src": "1519:97:4",
+ "text": "@dev mapping between asset, expiry timestamp, and the Price structure at the expiry timestamp"
+ },
+ "id": 6384,
+ "mutability": "mutable",
+ "name": "storedPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "1621:66:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price))"
+ },
+ "typeName": {
+ "id": 6383,
+ "keyType": {
+ "id": 6379,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1629:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1621:45:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price))"
+ },
+ "valueType": {
+ "id": 6382,
+ "keyType": {
+ "id": 6380,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1648:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1640:25:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price)"
+ },
+ "valueType": {
+ "contractScope": null,
+ "id": 6381,
+ "name": "Price",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 6357,
+ "src": "1659:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price"
+ }
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 6385,
+ "nodeType": "StructuredDocumentation",
+ "src": "1693:47:4",
+ "text": "@dev mapping between stable asset and price"
+ },
+ "id": 6389,
+ "mutability": "mutable",
+ "name": "stablePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7073,
+ "src": "1745:48:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 6388,
+ "keyType": {
+ "id": 6386,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1753:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1745:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 6387,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1764:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6390,
+ "nodeType": "StructuredDocumentation",
+ "src": "1800:55:4",
+ "text": "@notice emits an event when the disputer is updated"
+ },
+ "id": 6394,
+ "name": "DisputerUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6393,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6392,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "newDisputer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6394,
+ "src": "1882:27:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6391,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1882:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1881:29:4"
+ },
+ "src": "1860:51:4"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6395,
+ "nodeType": "StructuredDocumentation",
+ "src": "1916:66:4",
+ "text": "@notice emits an event when the pricer is updated for an asset"
+ },
+ "id": 6401,
+ "name": "PricerUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6400,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6397,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6401,
+ "src": "2007:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6396,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2007:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6399,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6401,
+ "src": "2030:22:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6398,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2030:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2006:47:4"
+ },
+ "src": "1987:67:4"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6402,
+ "nodeType": "StructuredDocumentation",
+ "src": "2059:74:4",
+ "text": "@notice emits an event when the locking period is updated for a pricer"
+ },
+ "id": 6408,
+ "name": "PricerLockingPeriodUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6407,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6404,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6408,
+ "src": "2171:22:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6403,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2171:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6406,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "lockingPeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6408,
+ "src": "2195:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6405,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2195:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2170:47:4"
+ },
+ "src": "2138:80:4"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6409,
+ "nodeType": "StructuredDocumentation",
+ "src": "2223:74:4",
+ "text": "@notice emits an event when the dispute period is updated for a pricer"
+ },
+ "id": 6415,
+ "name": "PricerDisputePeriodUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6414,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6411,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6415,
+ "src": "2335:22:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6410,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2335:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6413,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "disputePeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6415,
+ "src": "2359:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6412,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2359:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2334:47:4"
+ },
+ "src": "2302:80:4"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6416,
+ "nodeType": "StructuredDocumentation",
+ "src": "2387:79:4",
+ "text": "@notice emits an event when an expiry price is updated for a specific asset"
+ },
+ "id": 6426,
+ "name": "ExpiryPriceUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6425,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6418,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6426,
+ "src": "2505:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6417,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2505:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6420,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6426,
+ "src": "2536:31:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6419,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2536:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6422,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6426,
+ "src": "2577:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6421,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2577:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6424,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "onchainTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6426,
+ "src": "2600:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6423,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2600:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2495:135:4"
+ },
+ "src": "2471:160:4"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6427,
+ "nodeType": "StructuredDocumentation",
+ "src": "2636:87:4",
+ "text": "@notice emits an event when the disputer disputes a price during the dispute period"
+ },
+ "id": 6439,
+ "name": "ExpiryPriceDisputed",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6438,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6429,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6439,
+ "src": "2763:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6428,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2763:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6431,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6439,
+ "src": "2794:31:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6430,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2794:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6433,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "disputedPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6439,
+ "src": "2835:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6432,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2835:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6435,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "newPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6439,
+ "src": "2866:16:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6434,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2866:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6437,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "disputeTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6439,
+ "src": "2892:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6436,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2892:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2753:169:4"
+ },
+ "src": "2728:195:4"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 6440,
+ "nodeType": "StructuredDocumentation",
+ "src": "2928:60:4",
+ "text": "@notice emits an event when a stable asset price changes"
+ },
+ "id": 6446,
+ "name": "StablePriceUpdated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 6445,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6442,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6446,
+ "src": "3018:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6441,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3018:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6444,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6446,
+ "src": "3041:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6443,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3041:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3017:38:4"
+ },
+ "src": "2993:63:4"
+ },
+ {
+ "body": {
+ "id": 6502,
+ "nodeType": "Block",
+ "src": "3567:292:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6462,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "3585:9:4",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 6461,
+ "name": "migrated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6362,
+ "src": "3586:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a206d6967726174696f6e20616c726561647920646f6e65",
+ "id": 6463,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3596:32:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_280bb3d31877334cc9d54ff16b929a6c7af3889d4dc04f2fe45f0069d8669265",
+ "typeString": "literal_string \"Oracle: migration already done\""
+ },
+ "value": "Oracle: migration already done"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_280bb3d31877334cc9d54ff16b929a6c7af3889d4dc04f2fe45f0069d8669265",
+ "typeString": "literal_string \"Oracle: migration already done\""
+ }
+ ],
+ "id": 6460,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3577:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6464,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3577:52:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6465,
+ "nodeType": "ExpressionStatement",
+ "src": "3577:52:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6471,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6467,
+ "name": "_expiries",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6452,
+ "src": "3647:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 6468,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3647:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6469,
+ "name": "_prices",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6455,
+ "src": "3667:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 6470,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3667:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "3647:34:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a20696e76616c6964206d6967726174696f6e2064617461",
+ "id": 6472,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3683:32:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c0af84e94787b489270046b39106867f7f88732aaac65ec92cc7588fabd4d84b",
+ "typeString": "literal_string \"Oracle: invalid migration data\""
+ },
+ "value": "Oracle: invalid migration data"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c0af84e94787b489270046b39106867f7f88732aaac65ec92cc7588fabd4d84b",
+ "typeString": "literal_string \"Oracle: invalid migration data\""
+ }
+ ],
+ "id": 6466,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3639:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6473,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3639:77:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6474,
+ "nodeType": "ExpressionStatement",
+ "src": "3639:77:4"
+ },
+ {
+ "body": {
+ "id": 6500,
+ "nodeType": "Block",
+ "src": "3770:83:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6498,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6485,
+ "name": "storedPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6384,
+ "src": "3784:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price storage ref))"
+ }
+ },
+ "id": 6490,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6486,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6449,
+ "src": "3796:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "3784:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price storage ref)"
+ }
+ },
+ "id": 6491,
+ "indexExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6487,
+ "name": "_expiries",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6452,
+ "src": "3804:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 6489,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6488,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6476,
+ "src": "3814:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "3804:12:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "3784:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6493,
+ "name": "_prices",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6455,
+ "src": "3826:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 6495,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6494,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6476,
+ "src": "3834:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "3826:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6496,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "3838:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6492,
+ "name": "Price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6357,
+ "src": "3820:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_Price_$6357_storage_ptr_$",
+ "typeString": "type(struct Oracle.Price storage pointer)"
+ }
+ },
+ "id": 6497,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3820:22:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_memory_ptr",
+ "typeString": "struct Oracle.Price memory"
+ }
+ },
+ "src": "3784:58:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "id": 6499,
+ "nodeType": "ExpressionStatement",
+ "src": "3784:58:4"
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6481,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6478,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6476,
+ "src": "3743:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6479,
+ "name": "_expiries",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6452,
+ "src": "3747:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[] calldata"
+ }
+ },
+ "id": 6480,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3747:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "3743:20:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 6501,
+ "initializationExpression": {
+ "assignments": [
+ 6476
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6476,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6501,
+ "src": "3732:9:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6475,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3732:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6477,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3732:9:4"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6483,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "3765:3:4",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 6482,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6476,
+ "src": "3765:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6484,
+ "nodeType": "ExpressionStatement",
+ "src": "3765:3:4"
+ },
+ "nodeType": "ForStatement",
+ "src": "3727:126:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6447,
+ "nodeType": "StructuredDocumentation",
+ "src": "3062:354:4",
+ "text": " @notice function to mgirate asset prices from old oracle to new deployed oracle\n @dev this can only be called by owner, should be used at the deployment time before setting Oracle module into AddressBook\n @param _asset asset address\n @param _expiries array of expiries timestamps\n @param _prices array of prices"
+ },
+ "functionSelector": "2e4cf6ea",
+ "id": 6503,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6458,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6457,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "3557:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "3557:9:4"
+ }
+ ],
+ "name": "migrateOracle",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6456,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6449,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6503,
+ "src": "3453:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6448,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3453:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6452,
+ "mutability": "mutable",
+ "name": "_expiries",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6503,
+ "src": "3477:28:4",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6450,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3477:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6451,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "3477:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6455,
+ "mutability": "mutable",
+ "name": "_prices",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6503,
+ "src": "3515:26:4",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
+ "typeString": "uint256[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 6453,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3515:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6454,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "3515:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
+ "typeString": "uint256[]"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3443:104:4"
+ },
+ "returnParameters": {
+ "id": 6459,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3567:0:4"
+ },
+ "scope": 7073,
+ "src": "3421:438:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6513,
+ "nodeType": "Block",
+ "src": "4065:32:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6511,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 6509,
+ "name": "migrated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6362,
+ "src": "4075:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 6510,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4086:4:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "src": "4075:15:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 6512,
+ "nodeType": "ExpressionStatement",
+ "src": "4075:15:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6504,
+ "nodeType": "StructuredDocumentation",
+ "src": "3865:152:4",
+ "text": " @notice end migration process\n @dev can only be called by owner, should be called before setting Oracle module into AddressBook"
+ },
+ "functionSelector": "6c525d04",
+ "id": 6514,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6507,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6506,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4055:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4055:9:4"
+ }
+ ],
+ "name": "endMigration",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6505,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4043:2:4"
+ },
+ "returnParameters": {
+ "id": 6508,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4065:0:4"
+ },
+ "scope": 7073,
+ "src": "4022:75:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6554,
+ "nodeType": "Block",
+ "src": "4355:270:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6530,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6525,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6519,
+ "src": "4373:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6528,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4392:1:4",
+ "subdenomination": null,
+ "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": 6527,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "4384:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6526,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4384:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6529,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4384:10:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "4373:21:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a2063616e6e6f74207365742070726963657220746f2061646472657373283029",
+ "id": 6531,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4396:41:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_bb4fd9bdc97819dad4d6a9cac0104191e61c9302dc6dd7cb8e167eff66f9fb5b",
+ "typeString": "literal_string \"Oracle: cannot set pricer to address(0)\""
+ },
+ "value": "Oracle: cannot set pricer to address(0)"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_bb4fd9bdc97819dad4d6a9cac0104191e61c9302dc6dd7cb8e167eff66f9fb5b",
+ "typeString": "literal_string \"Oracle: cannot set pricer to address(0)\""
+ }
+ ],
+ "id": 6524,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "4365:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6532,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4365:73:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6533,
+ "nodeType": "ExpressionStatement",
+ "src": "4365:73:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6539,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6535,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "4456:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6537,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6536,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6517,
+ "src": "4468:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4456:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6538,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4479:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "4456:24:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a20636f756c64206e6f742073657420612070726963657220666f7220737461626c65206173736574",
+ "id": 6540,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4482:49:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_bb1b55f9d4981dcbff21911f5a217b09781c0815ede7b7225dc3c215a1ea323c",
+ "typeString": "literal_string \"Oracle: could not set a pricer for stable asset\""
+ },
+ "value": "Oracle: could not set a pricer for stable asset"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_bb1b55f9d4981dcbff21911f5a217b09781c0815ede7b7225dc3c215a1ea323c",
+ "typeString": "literal_string \"Oracle: could not set a pricer for stable asset\""
+ }
+ ],
+ "id": 6534,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "4448:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6541,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4448:84:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6542,
+ "nodeType": "ExpressionStatement",
+ "src": "4448:84:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6547,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6543,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "4543:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6545,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6544,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6517,
+ "src": "4555:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "4543:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6546,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6519,
+ "src": "4565:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "4543:29:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6548,
+ "nodeType": "ExpressionStatement",
+ "src": "4543:29:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6550,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6517,
+ "src": "4602:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6551,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6519,
+ "src": "4610:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6549,
+ "name": "PricerUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6401,
+ "src": "4588:13:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address)"
+ }
+ },
+ "id": 6552,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4588:30:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6553,
+ "nodeType": "EmitStatement",
+ "src": "4583:35:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6515,
+ "nodeType": "StructuredDocumentation",
+ "src": "4103:171:4",
+ "text": " @notice sets the pricer for an asset\n @dev can only be called by the owner\n @param _asset asset address\n @param _pricer pricer address"
+ },
+ "functionSelector": "3fd3ec8f",
+ "id": 6555,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6522,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6521,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4345:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4345:9:4"
+ }
+ ],
+ "name": "setAssetPricer",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6520,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6517,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6555,
+ "src": "4303:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6516,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4303:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6519,
+ "mutability": "mutable",
+ "name": "_pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6555,
+ "src": "4319:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6518,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4319:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4302:33:4"
+ },
+ "returnParameters": {
+ "id": 6523,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4355:0:4"
+ },
+ "scope": 7073,
+ "src": "4279:346:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6576,
+ "nodeType": "Block",
+ "src": "4910:129:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6569,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6565,
+ "name": "pricerLockingPeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6367,
+ "src": "4920:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6567,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6566,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6558,
+ "src": "4940:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "4920:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6568,
+ "name": "_lockingPeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6560,
+ "src": "4951:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4920:45:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6570,
+ "nodeType": "ExpressionStatement",
+ "src": "4920:45:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6572,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6558,
+ "src": "5008:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6573,
+ "name": "_lockingPeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6560,
+ "src": "5017:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6571,
+ "name": "PricerLockingPeriodUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6408,
+ "src": "4981:26:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 6574,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4981:51:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6575,
+ "nodeType": "EmitStatement",
+ "src": "4976:56:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6556,
+ "nodeType": "StructuredDocumentation",
+ "src": "4631:188:4",
+ "text": " @notice sets the locking period for a pricer\n @dev can only be called by the owner\n @param _pricer pricer address\n @param _lockingPeriod locking period"
+ },
+ "functionSelector": "f19ae734",
+ "id": 6577,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6563,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6562,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "4900:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "4900:9:4"
+ }
+ ],
+ "name": "setLockingPeriod",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6561,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6558,
+ "mutability": "mutable",
+ "name": "_pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6577,
+ "src": "4850:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6557,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4850:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6560,
+ "mutability": "mutable",
+ "name": "_lockingPeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6577,
+ "src": "4867:22:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6559,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4867:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4849:41:4"
+ },
+ "returnParameters": {
+ "id": 6564,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4910:0:4"
+ },
+ "scope": 7073,
+ "src": "4824:215:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6598,
+ "nodeType": "Block",
+ "src": "5682:129:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6591,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6587,
+ "name": "pricerDisputePeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6372,
+ "src": "5692:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6589,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6588,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6580,
+ "src": "5712:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "5692:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6590,
+ "name": "_disputePeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6582,
+ "src": "5723:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "5692:45:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6592,
+ "nodeType": "ExpressionStatement",
+ "src": "5692:45:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6594,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6580,
+ "src": "5780:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6595,
+ "name": "_disputePeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6582,
+ "src": "5789:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6593,
+ "name": "PricerDisputePeriodUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6415,
+ "src": "5753:26:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 6596,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5753:51:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6597,
+ "nodeType": "EmitStatement",
+ "src": "5748:56:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6578,
+ "nodeType": "StructuredDocumentation",
+ "src": "5045:546:4",
+ "text": " @notice sets the dispute period for a pricer\n @dev can only be called by the owner\n for a composite pricer (ie CompoundPricer) that depends on or calls other pricers, ensure\n that the dispute period for the composite pricer is longer than the dispute period for the\n asset pricer that it calls to ensure safe usage as a dispute in the other pricer will cause\n the need for a dispute with the composite pricer's price\n @param _pricer pricer address\n @param _disputePeriod dispute period"
+ },
+ "functionSelector": "8b3cddaf",
+ "id": 6599,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6585,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6584,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "5672:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "5672:9:4"
+ }
+ ],
+ "name": "setDisputePeriod",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6583,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6580,
+ "mutability": "mutable",
+ "name": "_pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6599,
+ "src": "5622:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6579,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5622:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6582,
+ "mutability": "mutable",
+ "name": "_disputePeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6599,
+ "src": "5639:22:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6581,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5639:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5621:41:4"
+ },
+ "returnParameters": {
+ "id": 6586,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5682:0:4"
+ },
+ "scope": 7073,
+ "src": "5596:215:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6615,
+ "nodeType": "Block",
+ "src": "6017:79:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6609,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 6607,
+ "name": "disputer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6360,
+ "src": "6027:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6608,
+ "name": "_disputer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6602,
+ "src": "6038:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "6027:20:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 6610,
+ "nodeType": "ExpressionStatement",
+ "src": "6027:20:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6612,
+ "name": "_disputer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6602,
+ "src": "6079:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6611,
+ "name": "DisputerUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6394,
+ "src": "6063:15:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 6613,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6063:26:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6614,
+ "nodeType": "EmitStatement",
+ "src": "6058:31:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6600,
+ "nodeType": "StructuredDocumentation",
+ "src": "5817:136:4",
+ "text": " @notice set the disputer address\n @dev can only be called by the owner\n @param _disputer disputer address"
+ },
+ "functionSelector": "8ee5074d",
+ "id": 6616,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6605,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6604,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "6007:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "6007:9:4"
+ }
+ ],
+ "name": "setDisputer",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6603,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6602,
+ "mutability": "mutable",
+ "name": "_disputer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6616,
+ "src": "5979:17:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6601,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5979:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5978:19:4"
+ },
+ "returnParameters": {
+ "id": 6606,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6017:0:4"
+ },
+ "scope": 7073,
+ "src": "5958:138:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6649,
+ "nodeType": "Block",
+ "src": "6335:211:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6634,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6627,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "6353:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6629,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6628,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6619,
+ "src": "6365:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "6353:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6632,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6384:1:4",
+ "subdenomination": null,
+ "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": 6631,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "6376:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6630,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6376:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6376:10:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "6353:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a20636f756c64206e6f742073657420737461626c6520707269636520666f7220616e206173736574207769746820707269636572",
+ "id": 6635,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6388:61:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1bf635d94d38f993aeaafe6f28b3c4f45ab030647a04fc1e2b7d74d2e3c486ca",
+ "typeString": "literal_string \"Oracle: could not set stable price for an asset with pricer\""
+ },
+ "value": "Oracle: could not set stable price for an asset with pricer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1bf635d94d38f993aeaafe6f28b3c4f45ab030647a04fc1e2b7d74d2e3c486ca",
+ "typeString": "literal_string \"Oracle: could not set stable price for an asset with pricer\""
+ }
+ ],
+ "id": 6626,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "6345:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6636,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6345:105:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6637,
+ "nodeType": "ExpressionStatement",
+ "src": "6345:105:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6642,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6638,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "6461:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6640,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6639,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6619,
+ "src": "6473:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "6461:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6641,
+ "name": "_price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6621,
+ "src": "6483:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6461:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6643,
+ "nodeType": "ExpressionStatement",
+ "src": "6461:28:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6645,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6619,
+ "src": "6524:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6646,
+ "name": "_price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6621,
+ "src": "6532:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6644,
+ "name": "StablePriceUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6446,
+ "src": "6505:18:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 6647,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6505:34:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6648,
+ "nodeType": "EmitStatement",
+ "src": "6500:39:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6617,
+ "nodeType": "StructuredDocumentation",
+ "src": "6102:153:4",
+ "text": " @notice set stable asset price\n @dev price should be scaled by 1e8\n @param _asset asset address\n @param _price price"
+ },
+ "functionSelector": "601407eb",
+ "id": 6650,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 6624,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 6623,
+ "name": "onlyOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13785,
+ "src": "6325:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "6325:9:4"
+ }
+ ],
+ "name": "setStablePrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6622,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6619,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6650,
+ "src": "6284:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6618,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6284:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6621,
+ "mutability": "mutable",
+ "name": "_price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6650,
+ "src": "6300:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6620,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6300:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6283:32:4"
+ },
+ "returnParameters": {
+ "id": 6625,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6335:0:4"
+ },
+ "scope": 7073,
+ "src": "6260:286:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6712,
+ "nodeType": "Block",
+ "src": "6977:522:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6664,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6661,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "6995:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 6662,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "6995:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 6663,
+ "name": "disputer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6360,
+ "src": "7009:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "6995:22:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a2063616c6c6572206973206e6f7420746865206469737075746572",
+ "id": 6665,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7019:36:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_11013e37e2d39eba16c9ddc0ba5b23fb26f9437330b688972cd16a1625fcfa61",
+ "typeString": "literal_string \"Oracle: caller is not the disputer\""
+ },
+ "value": "Oracle: caller is not the disputer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_11013e37e2d39eba16c9ddc0ba5b23fb26f9437330b688972cd16a1625fcfa61",
+ "typeString": "literal_string \"Oracle: caller is not the disputer\""
+ }
+ ],
+ "id": 6660,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "6987:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6987:69:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6667,
+ "nodeType": "ExpressionStatement",
+ "src": "6987:69:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6673,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "7074:46:4",
+ "subExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6670,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6653,
+ "src": "7095:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6671,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6655,
+ "src": "7103:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6669,
+ "name": "isDisputePeriodOver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7072,
+ "src": "7075:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 6672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7075:45:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a206469737075746520706572696f64206f766572",
+ "id": 6674,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7122:29:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_e78f0b03f4ca227fc9436e88a43032c66f86aec6f5473c1dbc57ce9e07a08197",
+ "typeString": "literal_string \"Oracle: dispute period over\""
+ },
+ "value": "Oracle: dispute period over"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_e78f0b03f4ca227fc9436e88a43032c66f86aec6f5473c1dbc57ce9e07a08197",
+ "typeString": "literal_string \"Oracle: dispute period over\""
+ }
+ ],
+ "id": 6668,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "7066:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6675,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7066:86:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6676,
+ "nodeType": "ExpressionStatement",
+ "src": "7066:86:4"
+ },
+ {
+ "assignments": [
+ 6678
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6678,
+ "mutability": "mutable",
+ "name": "priceToUpdate",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6712,
+ "src": "7163:27:4",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 6677,
+ "name": "Price",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 6357,
+ "src": "7163:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6684,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6679,
+ "name": "storedPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6384,
+ "src": "7193:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price storage ref))"
+ }
+ },
+ "id": 6681,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6680,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6653,
+ "src": "7205:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7193:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price storage ref)"
+ }
+ },
+ "id": 6683,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6682,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6655,
+ "src": "7213:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7193:37:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7163:67:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6689,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6686,
+ "name": "priceToUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6678,
+ "src": "7249:13:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price storage pointer"
+ }
+ },
+ "id": 6687,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "timestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6356,
+ "src": "7249:23:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6688,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7276:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "7249:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a20707269636520746f206469737075746520646f6573206e6f74206578697374",
+ "id": 6690,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7279:41:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_4d39d8a5ecdaaae50eef523465877979a9f68b152ed53a1caafe87279d6923ae",
+ "typeString": "literal_string \"Oracle: price to dispute does not exist\""
+ },
+ "value": "Oracle: price to dispute does not exist"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_4d39d8a5ecdaaae50eef523465877979a9f68b152ed53a1caafe87279d6923ae",
+ "typeString": "literal_string \"Oracle: price to dispute does not exist\""
+ }
+ ],
+ "id": 6685,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "7241:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6691,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7241:80:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6692,
+ "nodeType": "ExpressionStatement",
+ "src": "7241:80:4"
+ },
+ {
+ "assignments": [
+ 6694
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6694,
+ "mutability": "mutable",
+ "name": "oldPrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6712,
+ "src": "7332:16:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6693,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7332:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6697,
+ "initialValue": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6695,
+ "name": "priceToUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6678,
+ "src": "7351:13:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price storage pointer"
+ }
+ },
+ "id": 6696,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "price",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6354,
+ "src": "7351:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7332:38:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6702,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6698,
+ "name": "priceToUpdate",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6678,
+ "src": "7380:13:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price storage pointer"
+ }
+ },
+ "id": 6700,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "price",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6354,
+ "src": "7380:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 6701,
+ "name": "_price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6657,
+ "src": "7402:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "7380:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6703,
+ "nodeType": "ExpressionStatement",
+ "src": "7380:28:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6705,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6653,
+ "src": "7444:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6706,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6655,
+ "src": "7452:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6707,
+ "name": "oldPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6694,
+ "src": "7470:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6708,
+ "name": "_price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6657,
+ "src": "7480:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6709,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "7488:3:4",
+ "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_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6704,
+ "name": "ExpiryPriceDisputed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6439,
+ "src": "7424:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256,uint256,uint256,uint256)"
+ }
+ },
+ "id": 6710,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7424:68:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6711,
+ "nodeType": "EmitStatement",
+ "src": "7419:73:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6651,
+ "nodeType": "StructuredDocumentation",
+ "src": "6552:295:4",
+ "text": " @notice dispute an asset price during the dispute period\n @dev only the disputer can dispute a price during the dispute period, by setting a new one\n @param _asset asset address\n @param _expiryTimestamp expiry timestamp\n @param _price the correct price"
+ },
+ "functionSelector": "57a37dca",
+ "id": 6713,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "disputeExpiryPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6658,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6653,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6713,
+ "src": "6889:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6652,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6889:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6655,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6713,
+ "src": "6913:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6654,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6913:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6657,
+ "mutability": "mutable",
+ "name": "_price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6713,
+ "src": "6947:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6656,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6947:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6879:88:4"
+ },
+ "returnParameters": {
+ "id": 6659,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6977:0:4"
+ },
+ "scope": 7073,
+ "src": "6852:647:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6771,
+ "nodeType": "Block",
+ "src": "7970:467:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6729,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 6724,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "7988:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 6725,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "7988:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6726,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "8002:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6728,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6727,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6716,
+ "src": "8014:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8002:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7988:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a2063616c6c6572206973206e6f7420617574686f72697a656420746f2073657420657870697279207072696365",
+ "id": 6730,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8023:54:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c47abbb6736ee204472e6633273955d8ff1dd31133bc18eca462dddd5300b686",
+ "typeString": "literal_string \"Oracle: caller is not authorized to set expiry price\""
+ },
+ "value": "Oracle: caller is not authorized to set expiry price"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c47abbb6736ee204472e6633273955d8ff1dd31133bc18eca462dddd5300b686",
+ "typeString": "literal_string \"Oracle: caller is not authorized to set expiry price\""
+ }
+ ],
+ "id": 6723,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "7980:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6731,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7980:98:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6732,
+ "nodeType": "ExpressionStatement",
+ "src": "7980:98:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6735,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6716,
+ "src": "8116:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6736,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6718,
+ "src": "8124:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6734,
+ "name": "isLockingPeriodOver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7012,
+ "src": "8096:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 6737,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8096:45:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a206c6f636b696e6720706572696f64206973206e6f74206f76657220796574",
+ "id": 6738,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8143:40:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9db9b8ef20b3d67f6ce4f89cac2651b2e7ff57b6284aa6fb53c2fe92e00b38e7",
+ "typeString": "literal_string \"Oracle: locking period is not over yet\""
+ },
+ "value": "Oracle: locking period is not over yet"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9db9b8ef20b3d67f6ce4f89cac2651b2e7ff57b6284aa6fb53c2fe92e00b38e7",
+ "typeString": "literal_string \"Oracle: locking period is not over yet\""
+ }
+ ],
+ "id": 6733,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "8088:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6739,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8088:96:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6740,
+ "nodeType": "ExpressionStatement",
+ "src": "8088:96:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6749,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6742,
+ "name": "storedPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6384,
+ "src": "8202:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price storage ref))"
+ }
+ },
+ "id": 6744,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6743,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6716,
+ "src": "8214:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8202:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price storage ref)"
+ }
+ },
+ "id": 6746,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6745,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6718,
+ "src": "8222:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8202:37:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "id": 6747,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "timestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6356,
+ "src": "8202:47:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6748,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8253:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "8202:52:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a206469737075746520706572696f642073746172746564",
+ "id": 6750,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8256:32:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a8de8f6e37461cbd39e304e8f3d2d673ed1031fd1f633780550c8295ee5be3c4",
+ "typeString": "literal_string \"Oracle: dispute period started\""
+ },
+ "value": "Oracle: dispute period started"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_a8de8f6e37461cbd39e304e8f3d2d673ed1031fd1f633780550c8295ee5be3c4",
+ "typeString": "literal_string \"Oracle: dispute period started\""
+ }
+ ],
+ "id": 6741,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "8194:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6751,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8194:95:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6752,
+ "nodeType": "ExpressionStatement",
+ "src": "8194:95:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6762,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6753,
+ "name": "storedPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6384,
+ "src": "8300:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price storage ref))"
+ }
+ },
+ "id": 6756,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6754,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6716,
+ "src": "8312:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8300:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price storage ref)"
+ }
+ },
+ "id": 6757,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6755,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6718,
+ "src": "8320:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "8300:37:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6759,
+ "name": "_price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6720,
+ "src": "8346:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6760,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "8354:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6758,
+ "name": "Price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6357,
+ "src": "8340:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_Price_$6357_storage_ptr_$",
+ "typeString": "type(struct Oracle.Price storage pointer)"
+ }
+ },
+ "id": 6761,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8340:18:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_memory_ptr",
+ "typeString": "struct Oracle.Price memory"
+ }
+ },
+ "src": "8300:58:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "id": 6763,
+ "nodeType": "ExpressionStatement",
+ "src": "8300:58:4"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6765,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6716,
+ "src": "8392:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6766,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6718,
+ "src": "8400:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6767,
+ "name": "_price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6720,
+ "src": "8418:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6768,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "8426:3:4",
+ "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_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6764,
+ "name": "ExpiryPriceUpdated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6426,
+ "src": "8373:18:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256,uint256,uint256)"
+ }
+ },
+ "id": 6769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8373:57:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6770,
+ "nodeType": "EmitStatement",
+ "src": "8368:62:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6714,
+ "nodeType": "StructuredDocumentation",
+ "src": "7505:339:4",
+ "text": " @notice submits the expiry price to the oracle, can only be set from the pricer\n @dev asset price can only be set after the locking period is over and before the dispute period has started\n @param _asset asset address\n @param _expiryTimestamp expiry timestamp\n @param _price asset price at expiry"
+ },
+ "functionSelector": "ee531409",
+ "id": 6772,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "setExpiryPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6721,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6716,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6772,
+ "src": "7882:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6715,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7882:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6718,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6772,
+ "src": "7906:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6717,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7906:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6720,
+ "mutability": "mutable",
+ "name": "_price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6772,
+ "src": "7940:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6719,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7940:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7872:88:4"
+ },
+ "returnParameters": {
+ "id": 6722,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "7970:0:4"
+ },
+ "scope": 7073,
+ "src": "7849:588:4",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6815,
+ "nodeType": "Block",
+ "src": "8725:283:4",
+ "statements": [
+ {
+ "assignments": [
+ 6781
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6781,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6815,
+ "src": "8735:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6780,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8735:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6785,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6782,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "8751:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6784,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6783,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6775,
+ "src": "8763:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8751:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "8735:35:4"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6788,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6786,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6781,
+ "src": "8785:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6787,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8794:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "8785:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 6812,
+ "nodeType": "IfStatement",
+ "src": "8781:198:4",
+ "trueBody": {
+ "id": 6811,
+ "nodeType": "Block",
+ "src": "8797:182:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6797,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6790,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "8819:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6792,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6791,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6775,
+ "src": "8831:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8819:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6795,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8850:1:4",
+ "subdenomination": null,
+ "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": 6794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "8842:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6793,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8842:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6796,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8842:10:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "8819:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a2050726963657220666f722074686973206173736574206e6f7420736574",
+ "id": 6798,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8854:39:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e8aa00f125d5af45dc8ea403016eeed8cd581c8fb7c6a6f7a4db4d26fa64616",
+ "typeString": "literal_string \"Oracle: Pricer for this asset not set\""
+ },
+ "value": "Oracle: Pricer for this asset not set"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1e8aa00f125d5af45dc8ea403016eeed8cd581c8fb7c6a6f7a4db4d26fa64616",
+ "typeString": "literal_string \"Oracle: Pricer for this asset not set\""
+ }
+ ],
+ "id": 6789,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "8811:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6799,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8811:83:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6800,
+ "nodeType": "ExpressionStatement",
+ "src": "8811:83:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6809,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 6801,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6781,
+ "src": "8909:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6803,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "8937:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6805,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6804,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6775,
+ "src": "8949:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8937:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6802,
+ "name": "OpynPricerInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9521,
+ "src": "8917:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OpynPricerInterface_$9521_$",
+ "typeString": "type(contract OpynPricerInterface)"
+ }
+ },
+ "id": 6806,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8917:40:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OpynPricerInterface_$9521",
+ "typeString": "contract OpynPricerInterface"
+ }
+ },
+ "id": 6807,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9511,
+ "src": "8917:49:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
+ "typeString": "function () view external returns (uint256)"
+ }
+ },
+ "id": 6808,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8917:51:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8909:59:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6810,
+ "nodeType": "ExpressionStatement",
+ "src": "8909:59:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6813,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6781,
+ "src": "8996:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 6779,
+ "id": 6814,
+ "nodeType": "Return",
+ "src": "8989:12:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6773,
+ "nodeType": "StructuredDocumentation",
+ "src": "8443:211:4",
+ "text": " @notice get a live asset price from the asset's pricer contract\n @param _asset asset address\n @return price scaled by 1e8, denominated in USD\n e.g. 17568900000 => 175.689 USD"
+ },
+ "functionSelector": "41976e09",
+ "id": 6816,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6776,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6775,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6816,
+ "src": "8677:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6774,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8677:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8676:16:4"
+ },
+ "returnParameters": {
+ "id": 6779,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6778,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6816,
+ "src": "8716:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6777,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8716:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8715:9:4"
+ },
+ "scope": 7073,
+ "src": "8659:349:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6863,
+ "nodeType": "Block",
+ "src": "9409:298:4",
+ "statements": [
+ {
+ "assignments": [
+ 6829
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6829,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6863,
+ "src": "9419:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6828,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9419:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6833,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6830,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "9435:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6832,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6831,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6819,
+ "src": "9447:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "9435:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "9419:35:4"
+ },
+ {
+ "assignments": [
+ 6835
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6835,
+ "mutability": "mutable",
+ "name": "isFinalized",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6863,
+ "src": "9464:16:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 6834,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "9464:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6837,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 6836,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9483:4:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "9464:23:4"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6840,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6838,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6829,
+ "src": "9502:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6839,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9511:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "9502:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 6858,
+ "nodeType": "IfStatement",
+ "src": "9498:165:4",
+ "trueBody": {
+ "id": 6857,
+ "nodeType": "Block",
+ "src": "9514:149:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6848,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 6841,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6829,
+ "src": "9528:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6842,
+ "name": "storedPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6384,
+ "src": "9536:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price storage ref))"
+ }
+ },
+ "id": 6844,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6843,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6819,
+ "src": "9548:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "9536:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price storage ref)"
+ }
+ },
+ "id": 6846,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6845,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6821,
+ "src": "9556:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "9536:37:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "id": 6847,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "price",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6354,
+ "src": "9536:43:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "9528:51:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 6849,
+ "nodeType": "ExpressionStatement",
+ "src": "9528:51:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6855,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 6850,
+ "name": "isFinalized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6835,
+ "src": "9593:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6852,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6819,
+ "src": "9627:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6853,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6821,
+ "src": "9635:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 6851,
+ "name": "isDisputePeriodOver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7072,
+ "src": "9607:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 6854,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9607:45:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "9593:59:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 6856,
+ "nodeType": "ExpressionStatement",
+ "src": "9593:59:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 6859,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6829,
+ "src": "9681:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6860,
+ "name": "isFinalized",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6835,
+ "src": "9688:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 6861,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9680:20:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(uint256,bool)"
+ }
+ },
+ "functionReturnParameters": 6827,
+ "id": 6862,
+ "nodeType": "Return",
+ "src": "9673:27:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6817,
+ "nodeType": "StructuredDocumentation",
+ "src": "9014:286:4",
+ "text": " @notice get the asset price at specific expiry timestamp\n @param _asset asset address\n @param _expiryTimestamp expiry timestamp\n @return price scaled by 1e8, denominated in USD\n @return isFinalized True, if the price is finalized, False if not"
+ },
+ "functionSelector": "01957f81",
+ "id": 6864,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getExpiryPrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6822,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6819,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6864,
+ "src": "9329:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6818,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9329:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6821,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6864,
+ "src": "9345:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6820,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9345:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9328:42:4"
+ },
+ "returnParameters": {
+ "id": 6827,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6824,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6864,
+ "src": "9394:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6823,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9394:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6826,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6864,
+ "src": "9403:4:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 6825,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "9403:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9393:15:4"
+ },
+ "scope": 7073,
+ "src": "9305:402:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6876,
+ "nodeType": "Block",
+ "src": "9904:43:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6872,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "9921:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6874,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6873,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6867,
+ "src": "9933:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "9921:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 6871,
+ "id": 6875,
+ "nodeType": "Return",
+ "src": "9914:26:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6865,
+ "nodeType": "StructuredDocumentation",
+ "src": "9713:119:4",
+ "text": " @notice get the pricer for an asset\n @param _asset asset address\n @return pricer address"
+ },
+ "functionSelector": "2ecd8857",
+ "id": 6877,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getPricer",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6868,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6867,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6877,
+ "src": "9856:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6866,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9856:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9855:16:4"
+ },
+ "returnParameters": {
+ "id": 6871,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6870,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6877,
+ "src": "9895:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6869,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9895:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9894:9:4"
+ },
+ "scope": 7073,
+ "src": "9837:110:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6885,
+ "nodeType": "Block",
+ "src": "10096:32:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6883,
+ "name": "disputer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6360,
+ "src": "10113:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 6882,
+ "id": 6884,
+ "nodeType": "Return",
+ "src": "10106:15:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6878,
+ "nodeType": "StructuredDocumentation",
+ "src": "9953:83:4",
+ "text": " @notice get the disputer address\n @return disputer address"
+ },
+ "functionSelector": "def3cb05",
+ "id": 6886,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getDisputer",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6879,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "10061:2:4"
+ },
+ "returnParameters": {
+ "id": 6882,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6881,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6886,
+ "src": "10087:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6880,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10087:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10086:9:4"
+ },
+ "scope": 7073,
+ "src": "10041:87:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6898,
+ "nodeType": "Block",
+ "src": "10538:52:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6894,
+ "name": "pricerLockingPeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6367,
+ "src": "10555:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6896,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6895,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6889,
+ "src": "10575:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "10555:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 6893,
+ "id": 6897,
+ "nodeType": "Return",
+ "src": "10548:35:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6887,
+ "nodeType": "StructuredDocumentation",
+ "src": "10134:318:4",
+ "text": " @notice get a pricer's locking period\n locking period is the period of time after the expiry timestamp where a price can not be pushed\n @dev during the locking period an expiry price can not be submitted to this contract\n @param _pricer pricer address\n @return locking period"
+ },
+ "functionSelector": "b7e1d145",
+ "id": 6899,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getPricerLockingPeriod",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6890,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6889,
+ "mutability": "mutable",
+ "name": "_pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6899,
+ "src": "10489:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6888,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10489:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10488:17:4"
+ },
+ "returnParameters": {
+ "id": 6893,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6892,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6899,
+ "src": "10529:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6891,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "10529:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10528:9:4"
+ },
+ "scope": 7073,
+ "src": "10457:133:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6911,
+ "nodeType": "Block",
+ "src": "11015:52:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6907,
+ "name": "pricerDisputePeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6372,
+ "src": "11032:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6909,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6908,
+ "name": "_pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6902,
+ "src": "11052:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11032:28:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 6906,
+ "id": 6910,
+ "nodeType": "Return",
+ "src": "11025:35:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6900,
+ "nodeType": "StructuredDocumentation",
+ "src": "10596:333:4",
+ "text": " @notice get a pricer's dispute period\n dispute period is the period of time after an expiry price has been pushed where a price can be disputed\n @dev during the dispute period, the disputer can dispute the submitted price and modify it\n @param _pricer pricer address\n @return dispute period"
+ },
+ "functionSelector": "9c7fe9d6",
+ "id": 6912,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getPricerDisputePeriod",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6903,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6902,
+ "mutability": "mutable",
+ "name": "_pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6912,
+ "src": "10966:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6901,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10966:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "10965:17:4"
+ },
+ "returnParameters": {
+ "id": 6906,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6905,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6912,
+ "src": "11006:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6904,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11006:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11005:9:4"
+ },
+ "scope": 7073,
+ "src": "10934:133:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 6968,
+ "nodeType": "Block",
+ "src": "11489:360:4",
+ "statements": [
+ {
+ "assignments": [
+ 6925
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6925,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6968,
+ "src": "11499:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6924,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11499:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6929,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6926,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "11515:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6928,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6927,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6915,
+ "src": "11527:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11515:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "11499:35:4"
+ },
+ {
+ "assignments": [
+ 6931
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6931,
+ "mutability": "mutable",
+ "name": "timestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6968,
+ "src": "11544:17:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6930,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11544:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6933,
+ "initialValue": {
+ "argumentTypes": null,
+ "id": 6932,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "11564:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "11544:23:4"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6936,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6934,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6925,
+ "src": "11582:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6935,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11591:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "11582:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 6963,
+ "nodeType": "IfStatement",
+ "src": "11578:229:4",
+ "trueBody": {
+ "id": 6962,
+ "nodeType": "Block",
+ "src": "11594:213:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 6945,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6938,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "11616:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6940,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6939,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6915,
+ "src": "11628:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11616:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6943,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11647:1:4",
+ "subdenomination": null,
+ "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": 6942,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "11639:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 6941,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11639:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 6944,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11639:10:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "11616:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f7261636c653a2050726963657220666f722074686973206173736574206e6f7420736574",
+ "id": 6946,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "11651:39:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e8aa00f125d5af45dc8ea403016eeed8cd581c8fb7c6a6f7a4db4d26fa64616",
+ "typeString": "literal_string \"Oracle: Pricer for this asset not set\""
+ },
+ "value": "Oracle: Pricer for this asset not set"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1e8aa00f125d5af45dc8ea403016eeed8cd581c8fb7c6a6f7a4db4d26fa64616",
+ "typeString": "literal_string \"Oracle: Pricer for this asset not set\""
+ }
+ ],
+ "id": 6937,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "11608:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 6947,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11608:83:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6948,
+ "nodeType": "ExpressionStatement",
+ "src": "11608:83:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 6960,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 6949,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6925,
+ "src": "11707:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6950,
+ "name": "timestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6931,
+ "src": "11714:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 6951,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "TupleExpression",
+ "src": "11706:18:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(uint256,uint256)"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 6958,
+ "name": "_roundId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6917,
+ "src": "11787:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint80",
+ "typeString": "uint80"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint80",
+ "typeString": "uint80"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6953,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "11747:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6955,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6954,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6915,
+ "src": "11759:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "11747:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 6952,
+ "name": "OpynPricerInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9521,
+ "src": "11727:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OpynPricerInterface_$9521_$",
+ "typeString": "type(contract OpynPricerInterface)"
+ }
+ },
+ "id": 6956,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11727:40:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OpynPricerInterface_$9521",
+ "typeString": "contract OpynPricerInterface"
+ }
+ },
+ "id": 6957,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getHistoricalPrice",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9520,
+ "src": "11727:59:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_uint80_$returns$_t_uint256_$_t_uint256_$",
+ "typeString": "function (uint80) view external returns (uint256,uint256)"
+ }
+ },
+ "id": 6959,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11727:69:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(uint256,uint256)"
+ }
+ },
+ "src": "11706:90:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 6961,
+ "nodeType": "ExpressionStatement",
+ "src": "11706:90:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 6964,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6925,
+ "src": "11825:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 6965,
+ "name": "timestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6931,
+ "src": "11832:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 6966,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "11824:18:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(uint256,uint256)"
+ }
+ },
+ "functionReturnParameters": 6923,
+ "id": 6967,
+ "nodeType": "Return",
+ "src": "11817:25:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6913,
+ "nodeType": "StructuredDocumentation",
+ "src": "11073:306:4",
+ "text": " @notice get historical asset price and timestamp\n @dev if asset is a stable asset, will return stored price and timestamp equal to now\n @param _asset asset address to get it's historical price\n @param _roundId chainlink round id\n @return price and round timestamp"
+ },
+ "functionSelector": "1b85462d",
+ "id": 6969,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getChainlinkRoundData",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6918,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6915,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6969,
+ "src": "11415:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6914,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11415:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6917,
+ "mutability": "mutable",
+ "name": "_roundId",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6969,
+ "src": "11431:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint80",
+ "typeString": "uint80"
+ },
+ "typeName": {
+ "id": 6916,
+ "name": "uint80",
+ "nodeType": "ElementaryTypeName",
+ "src": "11431:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint80",
+ "typeString": "uint80"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11414:33:4"
+ },
+ "returnParameters": {
+ "id": 6923,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6920,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6969,
+ "src": "11471:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6919,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11471:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6922,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 6969,
+ "src": "11480:7:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6921,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11480:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "11470:18:4"
+ },
+ "scope": 7073,
+ "src": "11384:465:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7011,
+ "nodeType": "Block",
+ "src": "12224:289:4",
+ "statements": [
+ {
+ "assignments": [
+ 6980
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6980,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7011,
+ "src": "12234:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6979,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12234:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6984,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6981,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "12250:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6983,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6982,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6972,
+ "src": "12262:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "12250:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12234:35:4"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 6987,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 6985,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6980,
+ "src": "12284:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 6986,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12293:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "12284:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 7008,
+ "nodeType": "IfStatement",
+ "src": "12280:205:4",
+ "trueBody": {
+ "id": 7007,
+ "nodeType": "Block",
+ "src": "12296:189:4",
+ "statements": [
+ {
+ "assignments": [
+ 6989
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6989,
+ "mutability": "mutable",
+ "name": "pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7007,
+ "src": "12310:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6988,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12310:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6993,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6990,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "12327:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 6992,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6991,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6972,
+ "src": "12339:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "12327:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12310:36:4"
+ },
+ {
+ "assignments": [
+ 6995
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 6995,
+ "mutability": "mutable",
+ "name": "lockingPeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7007,
+ "src": "12360:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6994,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12360:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 6999,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 6996,
+ "name": "pricerLockingPeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6367,
+ "src": "12384:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 6998,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 6997,
+ "name": "pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6989,
+ "src": "12404:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "12384:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12360:51:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7005,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7000,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "12433:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7003,
+ "name": "lockingPeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6995,
+ "src": "12460:13:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7001,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6974,
+ "src": "12439:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7002,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "12439:20:4",
+ "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": 7004,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12439:35:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "12433:41:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 6978,
+ "id": 7006,
+ "nodeType": "Return",
+ "src": "12426:48:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 7009,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12502:4:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "functionReturnParameters": 6978,
+ "id": 7010,
+ "nodeType": "Return",
+ "src": "12495:11:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 6970,
+ "nodeType": "StructuredDocumentation",
+ "src": "11855:266:4",
+ "text": " @notice check if the locking period is over for setting the asset price at a particular expiry timestamp\n @param _asset asset address\n @param _expiryTimestamp expiry timestamp\n @return True if locking period is over, False if not"
+ },
+ "functionSelector": "d2f3b4e8",
+ "id": 7012,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isLockingPeriodOver",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 6975,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6972,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7012,
+ "src": "12155:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6971,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12155:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 6974,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7012,
+ "src": "12171:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 6973,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12171:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12154:42:4"
+ },
+ "returnParameters": {
+ "id": 6978,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 6977,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7012,
+ "src": "12218:4:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 6976,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "12218:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12217:6:4"
+ },
+ "scope": 7073,
+ "src": "12126:387:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 7071,
+ "nodeType": "Block",
+ "src": "12827:518:4",
+ "statements": [
+ {
+ "assignments": [
+ 7023
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7023,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7071,
+ "src": "12837:13:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7022,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12837:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7027,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7024,
+ "name": "stablePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6389,
+ "src": "12853:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 7026,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7025,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7015,
+ "src": "12865:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "12853:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12837:35:4"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7030,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7028,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7023,
+ "src": "12887:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7029,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12896:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "12887:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 7068,
+ "nodeType": "IfStatement",
+ "src": "12883:434:4",
+ "trueBody": {
+ "id": 7067,
+ "nodeType": "Block",
+ "src": "12899:418:4",
+ "statements": [
+ {
+ "assignments": [
+ 7032
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7032,
+ "mutability": "mutable",
+ "name": "price",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7067,
+ "src": "12986:18:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_memory_ptr",
+ "typeString": "struct Oracle.Price"
+ },
+ "typeName": {
+ "contractScope": null,
+ "id": 7031,
+ "name": "Price",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 6357,
+ "src": "12986:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage_ptr",
+ "typeString": "struct Oracle.Price"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7038,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7033,
+ "name": "storedPrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6384,
+ "src": "13007:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$_$",
+ "typeString": "mapping(address => mapping(uint256 => struct Oracle.Price storage ref))"
+ }
+ },
+ "id": 7035,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7034,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7015,
+ "src": "13019:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "13007:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Price_$6357_storage_$",
+ "typeString": "mapping(uint256 => struct Oracle.Price storage ref)"
+ }
+ },
+ "id": 7037,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7036,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7017,
+ "src": "13027:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "13007:37:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_storage",
+ "typeString": "struct Oracle.Price storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "12986:58:4"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7042,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 7039,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7032,
+ "src": "13062:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_memory_ptr",
+ "typeString": "struct Oracle.Price memory"
+ }
+ },
+ "id": 7040,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "timestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6356,
+ "src": "13062:15:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7041,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13081:1:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "13062:20:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 7046,
+ "nodeType": "IfStatement",
+ "src": "13058:71:4",
+ "trueBody": {
+ "id": 7045,
+ "nodeType": "Block",
+ "src": "13084:45:4",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "hexValue": "66616c7365",
+ "id": 7043,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13109:5:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ "functionReturnParameters": 7021,
+ "id": 7044,
+ "nodeType": "Return",
+ "src": "13102:12:4"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 7048
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7048,
+ "mutability": "mutable",
+ "name": "pricer",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7067,
+ "src": "13143:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7047,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13143:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7052,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7049,
+ "name": "assetPricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6377,
+ "src": "13160:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
+ "typeString": "mapping(address => address)"
+ }
+ },
+ "id": 7051,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7050,
+ "name": "_asset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7015,
+ "src": "13172:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "13160:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "13143:36:4"
+ },
+ {
+ "assignments": [
+ 7054
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7054,
+ "mutability": "mutable",
+ "name": "disputePeriod",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7067,
+ "src": "13193:21:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7053,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "13193:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7058,
+ "initialValue": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7055,
+ "name": "pricerDisputePeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 6372,
+ "src": "13217:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 7057,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7056,
+ "name": "pricer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7048,
+ "src": "13237:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "13217:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "13193:51:4"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7065,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7059,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "13266:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7063,
+ "name": "disputePeriod",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7054,
+ "src": "13292:13:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 7060,
+ "name": "price",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7032,
+ "src": "13272:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Price_$6357_memory_ptr",
+ "typeString": "struct Oracle.Price memory"
+ }
+ },
+ "id": 7061,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "timestamp",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 6356,
+ "src": "13272:15:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7062,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "add",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14118,
+ "src": "13272:19:4",
+ "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": 7064,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "13272:34:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "13266:40:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 7021,
+ "id": 7066,
+ "nodeType": "Return",
+ "src": "13259:47:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "hexValue": "74727565",
+ "id": 7069,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "13334:4:4",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "functionReturnParameters": 7021,
+ "id": 7070,
+ "nodeType": "Return",
+ "src": "13327:11:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7013,
+ "nodeType": "StructuredDocumentation",
+ "src": "12519:205:4",
+ "text": " @notice check if the dispute period is over\n @param _asset asset address\n @param _expiryTimestamp expiry timestamp\n @return True if dispute period is over, False if not"
+ },
+ "functionSelector": "5fdc7149",
+ "id": 7072,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isDisputePeriodOver",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7018,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7015,
+ "mutability": "mutable",
+ "name": "_asset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7072,
+ "src": "12758:14:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7014,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "12758:7:4",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7017,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7072,
+ "src": "12774:24:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7016,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "12774:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12757:42:4"
+ },
+ "returnParameters": {
+ "id": 7021,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7020,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7072,
+ "src": "12821:4:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7019,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "12821:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "12820:6:4"
+ },
+ "scope": 7073,
+ "src": "12729:616:4",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 7074,
+ "src": "492:12855:4"
+ }
+ ],
+ "src": "47:13301:4"
+ },
+ "id": 4
+ },
+ "contracts/core/Otoken.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/Otoken.sol",
+ "exportedSymbols": {
+ "Otoken": [
+ 7709
+ ]
+ },
+ "id": 7710,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 7075,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "42:24:5"
+ },
+ {
+ "absolutePath": "contracts/packages/oz/upgradeability/ERC20Upgradeable.sol",
+ "file": "../packages/oz/upgradeability/ERC20Upgradeable.sol",
+ "id": 7077,
+ "nodeType": "ImportDirective",
+ "scope": 7710,
+ "sourceUnit": 15083,
+ "src": "68:84:5",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7076,
+ "name": "ERC20Upgradeable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "76:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol",
+ "file": "../packages/oz/upgradeability/erc20-permit/ERC20PermitUpgradeable.sol",
+ "id": 7079,
+ "nodeType": "ImportDirective",
+ "scope": 7710,
+ "sourceUnit": 16150,
+ "src": "153:109:5",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7078,
+ "name": "ERC20PermitUpgradeable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "161:22:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Strings.sol",
+ "file": "../packages/oz/Strings.sol",
+ "id": 7081,
+ "nodeType": "ImportDirective",
+ "scope": 7710,
+ "sourceUnit": 14553,
+ "src": "263:51:5",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7080,
+ "name": "Strings",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "271:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/BokkyPooBahsDateTimeLibrary.sol",
+ "file": "../packages/BokkyPooBahsDateTimeLibrary.sol",
+ "id": 7083,
+ "nodeType": "ImportDirective",
+ "scope": 7710,
+ "sourceUnit": 13362,
+ "src": "315:88:5",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7082,
+ "name": "BokkyPooBahsDateTimeLibrary",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "323:27:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/AddressBookInterface.sol",
+ "file": "../interfaces/AddressBookInterface.sol",
+ "id": 7085,
+ "nodeType": "ImportDirective",
+ "scope": 7710,
+ "sourceUnit": 9226,
+ "src": "404:76:5",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7084,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "412:20:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 7087,
+ "name": "ERC20PermitUpgradeable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 16149,
+ "src": "698:22:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20PermitUpgradeable_$16149",
+ "typeString": "contract ERC20PermitUpgradeable"
+ }
+ },
+ "id": 7088,
+ "nodeType": "InheritanceSpecifier",
+ "src": "698:22:5"
+ }
+ ],
+ "contractDependencies": [
+ 15082,
+ 15127,
+ 15205,
+ 15280,
+ 15975,
+ 16149,
+ 16185
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 7086,
+ "nodeType": "StructuredDocumentation",
+ "src": "482:196:5",
+ "text": " @title Otoken\n @author Opyn Team\n @notice Otoken is the ERC20 token for an option\n @dev The Otoken inherits ERC20Upgradeable because we need to use the init instead of constructor"
+ },
+ "fullyImplemented": true,
+ "id": 7709,
+ "linearizedBaseContracts": [
+ 7709,
+ 16149,
+ 15975,
+ 16185,
+ 15082,
+ 15205,
+ 15127,
+ 15280
+ ],
+ "name": "Otoken",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7089,
+ "nodeType": "StructuredDocumentation",
+ "src": "727:44:5",
+ "text": "@notice address of the Controller module"
+ },
+ "functionSelector": "f77c4791",
+ "id": 7091,
+ "mutability": "mutable",
+ "name": "controller",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "776:25:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7090,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "776:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7092,
+ "nodeType": "StructuredDocumentation",
+ "src": "808:44:5",
+ "text": "@notice asset that the option references"
+ },
+ "functionSelector": "7158da7c",
+ "id": 7094,
+ "mutability": "mutable",
+ "name": "underlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "857:30:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7093,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "857:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7095,
+ "nodeType": "StructuredDocumentation",
+ "src": "894:57:5",
+ "text": "@notice asset that the strike price is denominated in"
+ },
+ "functionSelector": "17d69bc8",
+ "id": 7097,
+ "mutability": "mutable",
+ "name": "strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "956:26:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7096,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "956:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7098,
+ "nodeType": "StructuredDocumentation",
+ "src": "989:74:5",
+ "text": "@notice asset that is held as collateral against short/written options"
+ },
+ "functionSelector": "aabaecd6",
+ "id": 7100,
+ "mutability": "mutable",
+ "name": "collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "1068:30:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7099,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1068:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7101,
+ "nodeType": "StructuredDocumentation",
+ "src": "1105:42:5",
+ "text": "@notice strike price with decimals = 8"
+ },
+ "functionSelector": "c52987cf",
+ "id": 7103,
+ "mutability": "mutable",
+ "name": "strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "1152:26:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7102,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1152:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7104,
+ "nodeType": "StructuredDocumentation",
+ "src": "1185:79:5",
+ "text": "@notice expiration timestamp of the option, represented as a unix timestamp"
+ },
+ "functionSelector": "ade6e2aa",
+ "id": 7106,
+ "mutability": "mutable",
+ "name": "expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "1269:30:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7105,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1269:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7107,
+ "nodeType": "StructuredDocumentation",
+ "src": "1306:56:5",
+ "text": "@notice True if a put option, False if a call option"
+ },
+ "functionSelector": "f3c274a6",
+ "id": 7109,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "1367:17:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7108,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1367:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": true,
+ "id": 7112,
+ "mutability": "constant",
+ "name": "STRIKE_PRICE_SCALE",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "1391:49:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7110,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1391:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "316538",
+ "id": 7111,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1437:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_100000000_by_1",
+ "typeString": "int_const 100000000"
+ },
+ "value": "1e8"
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "id": 7115,
+ "mutability": "constant",
+ "name": "STRIKE_PRICE_DIGITS",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7709,
+ "src": "1446:48:5",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7113,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1446:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "38",
+ "id": 7114,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1493:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 7187,
+ "nodeType": "Block",
+ "src": "2308:514:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7141,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7135,
+ "name": "controller",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7091,
+ "src": "2318:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7137,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7118,
+ "src": "2352:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7136,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "2331:20:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 7138,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2331:34:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 7139,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getController",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9150,
+ "src": "2331:48:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 7140,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2331:50:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2318:63:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7142,
+ "nodeType": "ExpressionStatement",
+ "src": "2318:63:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7145,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7143,
+ "name": "underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7094,
+ "src": "2391:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7144,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7120,
+ "src": "2409:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2391:34:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7146,
+ "nodeType": "ExpressionStatement",
+ "src": "2391:34:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7149,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7147,
+ "name": "strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7097,
+ "src": "2435:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7148,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7122,
+ "src": "2449:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2435:26:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7150,
+ "nodeType": "ExpressionStatement",
+ "src": "2435:26:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7153,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7151,
+ "name": "collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7100,
+ "src": "2471:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7152,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7124,
+ "src": "2489:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2471:34:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7154,
+ "nodeType": "ExpressionStatement",
+ "src": "2471:34:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7157,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7155,
+ "name": "strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7103,
+ "src": "2515:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7156,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7126,
+ "src": "2529:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2515:26:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7158,
+ "nodeType": "ExpressionStatement",
+ "src": "2515:26:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7161,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7159,
+ "name": "expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7106,
+ "src": "2551:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7160,
+ "name": "_expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7128,
+ "src": "2569:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2551:34:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7162,
+ "nodeType": "ExpressionStatement",
+ "src": "2551:34:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7165,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7163,
+ "name": "isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7109,
+ "src": "2595:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7164,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7130,
+ "src": "2603:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "2595:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 7166,
+ "nodeType": "ExpressionStatement",
+ "src": "2595:14:5"
+ },
+ {
+ "assignments": [
+ 7168,
+ 7170
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7168,
+ "mutability": "mutable",
+ "name": "tokenName",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7187,
+ "src": "2620:23:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7167,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2620:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7170,
+ "mutability": "mutable",
+ "name": "tokenSymbol",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7187,
+ "src": "2645:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7169,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2645:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7173,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 7171,
+ "name": "_getNameAndSymbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7375,
+ "src": "2674:17:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$_t_string_memory_ptr_$",
+ "typeString": "function () view returns (string memory,string memory)"
+ }
+ },
+ "id": 7172,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2674:19:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_string_memory_ptr_$_t_string_memory_ptr_$",
+ "typeString": "tuple(string memory,string memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2619:74:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7175,
+ "name": "tokenName",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7168,
+ "src": "2726:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7176,
+ "name": "tokenSymbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7170,
+ "src": "2737:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 7174,
+ "name": "__ERC20_init_unchained",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14627,
+ "src": "2703:22:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (string memory,string memory)"
+ }
+ },
+ "id": 7177,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2703:46:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7178,
+ "nodeType": "ExpressionStatement",
+ "src": "2703:46:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7180,
+ "name": "tokenName",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7168,
+ "src": "2778:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 7179,
+ "name": "__ERC20Permit_init",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 16022,
+ "src": "2759:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (string memory)"
+ }
+ },
+ "id": 7181,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2759:29:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7182,
+ "nodeType": "ExpressionStatement",
+ "src": "2759:29:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "38",
+ "id": 7184,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2813:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ }
+ ],
+ "id": 7183,
+ "name": "_setupDecimals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15066,
+ "src": "2798:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_uint8_$returns$__$",
+ "typeString": "function (uint8)"
+ }
+ },
+ "id": 7185,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2798:17:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7186,
+ "nodeType": "ExpressionStatement",
+ "src": "2798:17:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7116,
+ "nodeType": "StructuredDocumentation",
+ "src": "1501:548:5",
+ "text": " @notice initialize the oToken\n @param _addressBook addressbook module\n @param _underlyingAsset asset that the option references\n @param _strikeAsset asset that the strike price is denominated in\n @param _collateralAsset asset that is held as collateral against short/written options\n @param _strikePrice strike price with decimals = 8\n @param _expiryTimestamp expiration timestamp of the option, represented as a unix timestamp\n @param _isPut True if a put option, False if a call option"
+ },
+ "functionSelector": "f630df34",
+ "id": 7188,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "arguments": null,
+ "id": 7133,
+ "modifierName": {
+ "argumentTypes": null,
+ "id": 7132,
+ "name": "initializer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15253,
+ "src": "2296:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_modifier$__$",
+ "typeString": "modifier ()"
+ }
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "2296:11:5"
+ }
+ ],
+ "name": "init",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7131,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7118,
+ "mutability": "mutable",
+ "name": "_addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2077:20:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7117,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2077:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7120,
+ "mutability": "mutable",
+ "name": "_underlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2107:24:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7119,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2107:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7122,
+ "mutability": "mutable",
+ "name": "_strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2141:20:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7121,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2141:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7124,
+ "mutability": "mutable",
+ "name": "_collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2171:24:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7123,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2171:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7126,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2205:20:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7125,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2205:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7128,
+ "mutability": "mutable",
+ "name": "_expiryTimestamp",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2235:24:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7127,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2235:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7130,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7188,
+ "src": "2269:11:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7129,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "2269:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2067:219:5"
+ },
+ "returnParameters": {
+ "id": 7134,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2308:0:5"
+ },
+ "scope": 7709,
+ "src": "2054:768:5",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7211,
+ "nodeType": "Block",
+ "src": "3040:108:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "id": 7203,
+ "name": "collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7100,
+ "src": "3058:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7204,
+ "name": "underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7094,
+ "src": "3075:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7205,
+ "name": "strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7097,
+ "src": "3092:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7206,
+ "name": "strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7103,
+ "src": "3105:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7207,
+ "name": "expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7106,
+ "src": "3118:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7208,
+ "name": "isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7109,
+ "src": "3135:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 7209,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "3057:84:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$",
+ "typeString": "tuple(address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "functionReturnParameters": 7202,
+ "id": 7210,
+ "nodeType": "Return",
+ "src": "3050:91:5"
+ }
+ ]
+ },
+ "documentation": null,
+ "functionSelector": "af0968fc",
+ "id": 7212,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOtokenDetails",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7189,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2853:2:5"
+ },
+ "returnParameters": {
+ "id": 7202,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7191,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7212,
+ "src": "2916:7:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7190,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2916:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7193,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7212,
+ "src": "2937:7:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7192,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2937:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7195,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7212,
+ "src": "2958:7:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7194,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2958:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7197,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7212,
+ "src": "2979:7:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7196,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2979:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7199,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7212,
+ "src": "3000:7:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7198,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3000:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7201,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7212,
+ "src": "3021:4:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7200,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3021:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2902:133:5"
+ },
+ "scope": 7709,
+ "src": "2828:320:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7233,
+ "nodeType": "Block",
+ "src": "3459:126:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 7224,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 7221,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "3477:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 7222,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3477:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7223,
+ "name": "controller",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7091,
+ "src": "3491:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3477:24:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e3a204f6e6c7920436f6e74726f6c6c65722063616e206d696e74204f746f6b656e73",
+ "id": 7225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3503:42:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_85c8cb147a9e26b4ab131aece43eaa9cb21d582072bdc5c6ca3701f609437a75",
+ "typeString": "literal_string \"Otoken: Only Controller can mint Otokens\""
+ },
+ "value": "Otoken: Only Controller can mint Otokens"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_85c8cb147a9e26b4ab131aece43eaa9cb21d582072bdc5c6ca3701f609437a75",
+ "typeString": "literal_string \"Otoken: Only Controller can mint Otokens\""
+ }
+ ],
+ "id": 7220,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3469:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7226,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3469:77:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7227,
+ "nodeType": "ExpressionStatement",
+ "src": "3469:77:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7229,
+ "name": "account",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7215,
+ "src": "3562:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7230,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7217,
+ "src": "3571:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7228,
+ "name": "_mint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14954,
+ "src": "3556:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 7231,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3556:22:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7232,
+ "nodeType": "ExpressionStatement",
+ "src": "3556:22:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7213,
+ "nodeType": "StructuredDocumentation",
+ "src": "3154:238:5",
+ "text": " @notice mint oToken for an account\n @dev Controller only method where access control is taken care of by _beforeTokenTransfer hook\n @param account account to mint token to\n @param amount amount to mint"
+ },
+ "functionSelector": "51b0a410",
+ "id": 7234,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "mintOtoken",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7218,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7215,
+ "mutability": "mutable",
+ "name": "account",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7234,
+ "src": "3417:15:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7214,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3417:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7217,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7234,
+ "src": "3434:14:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7216,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3434:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3416:33:5"
+ },
+ "returnParameters": {
+ "id": 7219,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3459:0:5"
+ },
+ "scope": 7709,
+ "src": "3397:188:5",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7255,
+ "nodeType": "Block",
+ "src": "3900:126:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 7246,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 7243,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "3918:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 7244,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3918:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7245,
+ "name": "controller",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7091,
+ "src": "3932:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3918:24:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e3a204f6e6c7920436f6e74726f6c6c65722063616e206275726e204f746f6b656e73",
+ "id": 7247,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3944:42:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5a0d68db5b9cbade69f022eb4f569df6ef52ebf332f265548a1adbd4935e1f37",
+ "typeString": "literal_string \"Otoken: Only Controller can burn Otokens\""
+ },
+ "value": "Otoken: Only Controller can burn Otokens"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5a0d68db5b9cbade69f022eb4f569df6ef52ebf332f265548a1adbd4935e1f37",
+ "typeString": "literal_string \"Otoken: Only Controller can burn Otokens\""
+ }
+ ],
+ "id": 7242,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3910:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7248,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3910:77:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7249,
+ "nodeType": "ExpressionStatement",
+ "src": "3910:77:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7251,
+ "name": "account",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7237,
+ "src": "4003:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7252,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7239,
+ "src": "4012:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7250,
+ "name": "_burn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15010,
+ "src": "3997:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 7253,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3997:22:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7254,
+ "nodeType": "ExpressionStatement",
+ "src": "3997:22:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7235,
+ "nodeType": "StructuredDocumentation",
+ "src": "3591:242:5",
+ "text": " @notice burn oToken from an account.\n @dev Controller only method where access control is taken care of by _beforeTokenTransfer hook\n @param account account to burn token from\n @param amount amount to burn"
+ },
+ "functionSelector": "56d878f7",
+ "id": 7256,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "burnOtoken",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7240,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7237,
+ "mutability": "mutable",
+ "name": "account",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7256,
+ "src": "3858:15:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7236,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3858:7:5",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7239,
+ "mutability": "mutable",
+ "name": "amount",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7256,
+ "src": "3875:14:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7238,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3875:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "3857:33:5"
+ },
+ "returnParameters": {
+ "id": 7241,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3900:0:5"
+ },
+ "scope": 7709,
+ "src": "3838:188:5",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7374,
+ "nodeType": "Block",
+ "src": "4436:1748:5",
+ "statements": [
+ {
+ "assignments": [
+ 7265
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7265,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4446:24:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7264,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4446:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7271,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7267,
+ "name": "underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7094,
+ "src": "4490:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7266,
+ "name": "ERC20Upgradeable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15082,
+ "src": "4473:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Upgradeable_$15082_$",
+ "typeString": "type(contract ERC20Upgradeable)"
+ }
+ },
+ "id": 7268,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4473:33:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Upgradeable_$15082",
+ "typeString": "contract ERC20Upgradeable"
+ }
+ },
+ "id": 7269,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "symbol",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14645,
+ "src": "4473:40:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view external returns (string memory)"
+ }
+ },
+ "id": 7270,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4473:42:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4446:69:5"
+ },
+ {
+ "assignments": [
+ 7273
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7273,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4525:20:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7272,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4525:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7279,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7275,
+ "name": "strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7097,
+ "src": "4565:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7274,
+ "name": "ERC20Upgradeable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15082,
+ "src": "4548:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Upgradeable_$15082_$",
+ "typeString": "type(contract ERC20Upgradeable)"
+ }
+ },
+ "id": 7276,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4548:29:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Upgradeable_$15082",
+ "typeString": "contract ERC20Upgradeable"
+ }
+ },
+ "id": 7277,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "symbol",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14645,
+ "src": "4548:36:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view external returns (string memory)"
+ }
+ },
+ "id": 7278,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4548:38:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4525:61:5"
+ },
+ {
+ "assignments": [
+ 7281
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7281,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4596:24:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7280,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4596:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7287,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7283,
+ "name": "collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7100,
+ "src": "4640:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7282,
+ "name": "ERC20Upgradeable",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 15082,
+ "src": "4623:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC20Upgradeable_$15082_$",
+ "typeString": "type(contract ERC20Upgradeable)"
+ }
+ },
+ "id": 7284,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4623:33:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC20Upgradeable_$15082",
+ "typeString": "contract ERC20Upgradeable"
+ }
+ },
+ "id": 7285,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "symbol",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14645,
+ "src": "4623:40:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view external returns (string memory)"
+ }
+ },
+ "id": 7286,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4623:42:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4596:69:5"
+ },
+ {
+ "assignments": [
+ 7289
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7289,
+ "mutability": "mutable",
+ "name": "displayStrikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4675:32:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7288,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4675:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7293,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7291,
+ "name": "strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7103,
+ "src": "4735:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7290,
+ "name": "_getDisplayedStrikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7474,
+ "src": "4710:24:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7292,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4710:37:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4675:72:5"
+ },
+ {
+ "assignments": [
+ 7295,
+ 7297,
+ 7299
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7295,
+ "mutability": "mutable",
+ "name": "year",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4806:12:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7294,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4806:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7297,
+ "mutability": "mutable",
+ "name": "month",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4820:13:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7296,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4820:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7299,
+ "mutability": "mutable",
+ "name": "day",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4835:11:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7298,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4835:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7304,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7302,
+ "name": "expiryTimestamp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7106,
+ "src": "4894:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7300,
+ "name": "BokkyPooBahsDateTimeLibrary",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13361,
+ "src": "4850:27:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$13361_$",
+ "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
+ }
+ },
+ "id": 7301,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "timestampToDate",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 13360,
+ "src": "4850:43:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
+ "typeString": "function (uint256) pure returns (uint256,uint256,uint256)"
+ }
+ },
+ "id": 7303,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4850:60:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
+ "typeString": "tuple(uint256,uint256,uint256)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4805:105:5"
+ },
+ {
+ "assignments": [
+ 7306,
+ 7308
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7306,
+ "mutability": "mutable",
+ "name": "typeSymbol",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4956:24:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7305,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4956:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7308,
+ "mutability": "mutable",
+ "name": "typeFull",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "4982:22:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7307,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4982:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7312,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7310,
+ "name": "isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7109,
+ "src": "5023:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 7309,
+ "name": "_getOptionType",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7539,
+ "src": "5008:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_string_memory_ptr_$_t_string_memory_ptr_$",
+ "typeString": "function (bool) pure returns (string memory,string memory)"
+ }
+ },
+ "id": 7311,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5008:21:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_string_memory_ptr_$_t_string_memory_ptr_$",
+ "typeString": "tuple(string memory,string memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4955:74:5"
+ },
+ {
+ "assignments": [
+ 7314,
+ 7316
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7314,
+ "mutability": "mutable",
+ "name": "monthSymbol",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "5075:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7313,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "5075:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7316,
+ "mutability": "mutable",
+ "name": "monthFull",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7374,
+ "src": "5102:23:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7315,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "5102:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7320,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7318,
+ "name": "month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7297,
+ "src": "5139:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7317,
+ "name": "_getMonth",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7708,
+ "src": "5129:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory,string memory)"
+ }
+ },
+ "id": 7319,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5129:16:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_string_memory_ptr_$_t_string_memory_ptr_$",
+ "typeString": "tuple(string memory,string memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5074:71:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7347,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7321,
+ "name": "tokenName",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7260,
+ "src": "5243:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7326,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7265,
+ "src": "5309:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7327,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7273,
+ "src": "5337:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "20",
+ "id": 7328,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5361:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_681afa780d17da29203322b473d3f210a7d621259a4e6ce9e403f5a266ff719a",
+ "typeString": "literal_string \" \""
+ },
+ "value": " "
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7330,
+ "name": "day",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7299,
+ "src": "5396:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7329,
+ "name": "_uintTo2Chars",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7516,
+ "src": "5382:13:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7331,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5382:18:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "2d",
+ "id": 7332,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5418:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ "value": "-"
+ },
+ {
+ "argumentTypes": null,
+ "id": 7333,
+ "name": "monthFull",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7316,
+ "src": "5439:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "2d",
+ "id": 7334,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5466:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ "value": "-"
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7337,
+ "name": "year",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7295,
+ "src": "5504:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7335,
+ "name": "Strings",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14552,
+ "src": "5487:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Strings_$14552_$",
+ "typeString": "type(library Strings)"
+ }
+ },
+ "id": 7336,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toString",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14551,
+ "src": "5487:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7338,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5487:22:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "20",
+ "id": 7339,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5527:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_681afa780d17da29203322b473d3f210a7d621259a4e6ce9e403f5a266ff719a",
+ "typeString": "literal_string \" \""
+ },
+ "value": " "
+ },
+ {
+ "argumentTypes": null,
+ "id": 7340,
+ "name": "displayStrikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7289,
+ "src": "5548:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7341,
+ "name": "typeFull",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7308,
+ "src": "5584:8:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "20",
+ "id": 7342,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5610:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_681afa780d17da29203322b473d3f210a7d621259a4e6ce9e403f5a266ff719a",
+ "typeString": "literal_string \" \""
+ },
+ "value": " "
+ },
+ {
+ "argumentTypes": null,
+ "id": 7343,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7281,
+ "src": "5631:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "20436f6c6c61746572616c",
+ "id": 7344,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5659:13:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5681b82d5a2d9658b14af8579eaeb7c32e5f37f425845db18f617ad523a08e9b",
+ "typeString": "literal_string \" Collateral\""
+ },
+ "value": " Collateral"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_681afa780d17da29203322b473d3f210a7d621259a4e6ce9e403f5a266ff719a",
+ "typeString": "literal_string \" \""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_681afa780d17da29203322b473d3f210a7d621259a4e6ce9e403f5a266ff719a",
+ "typeString": "literal_string \" \""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_681afa780d17da29203322b473d3f210a7d621259a4e6ce9e403f5a266ff719a",
+ "typeString": "literal_string \" \""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5681b82d5a2d9658b14af8579eaeb7c32e5f37f425845db18f617ad523a08e9b",
+ "typeString": "literal_string \" Collateral\""
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7324,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "5275:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 7325,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5275:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 7345,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5275:411:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 7323,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "5255:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 7322,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "5255:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7346,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5255:441:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "5243:453:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "id": 7348,
+ "nodeType": "ExpressionStatement",
+ "src": "5243:453:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7372,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7349,
+ "name": "tokenSymbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7262,
+ "src": "5773:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "6f",
+ "id": 7354,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5841:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_53a63b3ee437e1aa804722ac8f2f57053ac47e1bb887f095340cf5990e7faad3",
+ "typeString": "literal_string \"o\""
+ },
+ "value": "o"
+ },
+ {
+ "argumentTypes": null,
+ "id": 7355,
+ "name": "underlying",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7265,
+ "src": "5862:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7356,
+ "name": "strike",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7273,
+ "src": "5890:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "2f",
+ "id": 7357,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5914:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527",
+ "typeString": "literal_string \"/\""
+ },
+ "value": "/"
+ },
+ {
+ "argumentTypes": null,
+ "id": 7358,
+ "name": "collateral",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7281,
+ "src": "5935:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "2d",
+ "id": 7359,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5963:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ "value": "-"
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7361,
+ "name": "day",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7299,
+ "src": "5998:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7360,
+ "name": "_uintTo2Chars",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7516,
+ "src": "5984:13:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7362,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5984:18:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7363,
+ "name": "monthSymbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7314,
+ "src": "6020:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7365,
+ "name": "year",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7295,
+ "src": "6063:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7364,
+ "name": "_uintTo2Chars",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7516,
+ "src": "6049:13:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7366,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6049:19:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "2d",
+ "id": 7367,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6086:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ "value": "-"
+ },
+ {
+ "argumentTypes": null,
+ "id": 7368,
+ "name": "displayStrikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7289,
+ "src": "6107:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7369,
+ "name": "typeSymbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7306,
+ "src": "6143:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_53a63b3ee437e1aa804722ac8f2f57053ac47e1bb887f095340cf5990e7faad3",
+ "typeString": "literal_string \"o\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527",
+ "typeString": "literal_string \"/\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
+ "typeString": "literal_string \"-\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7352,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "5807:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 7353,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "5807:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 7370,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5807:360:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 7351,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "5787:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 7350,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "5787:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7371,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5787:390:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "5773:404:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "id": 7373,
+ "nodeType": "ExpressionStatement",
+ "src": "5773:404:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7257,
+ "nodeType": "StructuredDocumentation",
+ "src": "4032:295:5",
+ "text": " @notice generates the name and symbol for an option\n @dev this function uses a named return variable to avoid the stack-too-deep error\n @return tokenName (ex: ETHUSDC 05-September-2020 200 Put USDC Collateral)\n @return tokenSymbol (ex: oETHUSDC-05SEP20-200P)"
+ },
+ "id": 7375,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getNameAndSymbol",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7258,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4358:2:5"
+ },
+ "returnParameters": {
+ "id": 7263,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7260,
+ "mutability": "mutable",
+ "name": "tokenName",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7375,
+ "src": "4384:23:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7259,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4384:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7262,
+ "mutability": "mutable",
+ "name": "tokenSymbol",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7375,
+ "src": "4409:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7261,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4409:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4383:52:5"
+ },
+ "scope": 7709,
+ "src": "4332:1852:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 7473,
+ "nodeType": "Block",
+ "src": "6468:783:5",
+ "statements": [
+ {
+ "assignments": [
+ 7384
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7384,
+ "mutability": "mutable",
+ "name": "remainder",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7473,
+ "src": "6478:17:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7383,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6478:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7389,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7387,
+ "name": "STRIKE_PRICE_SCALE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7112,
+ "src": "6515:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7385,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7378,
+ "src": "6498:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7386,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mod",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 16356,
+ "src": "6498:16:5",
+ "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": 7388,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6498:36:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6478:56:5"
+ },
+ {
+ "assignments": [
+ 7391
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7391,
+ "mutability": "mutable",
+ "name": "quotient",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7473,
+ "src": "6544:16:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7390,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6544:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7396,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7394,
+ "name": "STRIKE_PRICE_SCALE",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7112,
+ "src": "6580:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7392,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7378,
+ "src": "6563:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7393,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "div",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 16311,
+ "src": "6563:16:5",
+ "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": 7395,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6563:36:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6544:55:5"
+ },
+ {
+ "assignments": [
+ 7398
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7398,
+ "mutability": "mutable",
+ "name": "quotientStr",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7473,
+ "src": "6609:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7397,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "6609:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7403,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7401,
+ "name": "quotient",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7391,
+ "src": "6654:8:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7399,
+ "name": "Strings",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14552,
+ "src": "6637:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Strings_$14552_$",
+ "typeString": "type(library Strings)"
+ }
+ },
+ "id": 7400,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toString",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14551,
+ "src": "6637:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7402,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6637:26:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6609:54:5"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7406,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7404,
+ "name": "remainder",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7384,
+ "src": "6678:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7405,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6691:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "6678:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 7409,
+ "nodeType": "IfStatement",
+ "src": "6674:38:5",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7407,
+ "name": "quotientStr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7398,
+ "src": "6701:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 7382,
+ "id": 7408,
+ "nodeType": "Return",
+ "src": "6694:18:5"
+ }
+ },
+ {
+ "assignments": [
+ 7411
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7411,
+ "mutability": "mutable",
+ "name": "trailingZeroes",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7473,
+ "src": "6723:22:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7410,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6723:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7412,
+ "initialValue": null,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6723:22:5"
+ },
+ {
+ "body": {
+ "id": 7429,
+ "nodeType": "Block",
+ "src": "6786:84:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7423,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7419,
+ "name": "remainder",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7384,
+ "src": "6800:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7422,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7420,
+ "name": "remainder",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7384,
+ "src": "6812:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "/",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "3130",
+ "id": 7421,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6824:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "6812:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6800:26:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7424,
+ "nodeType": "ExpressionStatement",
+ "src": "6800:26:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7427,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7425,
+ "name": "trailingZeroes",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7411,
+ "src": "6840:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 7426,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6858:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "6840:19:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7428,
+ "nodeType": "ExpressionStatement",
+ "src": "6840:19:5"
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7418,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "3130",
+ "id": 7415,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6776:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7413,
+ "name": "remainder",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7384,
+ "src": "6762:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7414,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mod",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 16356,
+ "src": "6762:13:5",
+ "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": 7416,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6762:17:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7417,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6783:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "6762:22:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 7430,
+ "nodeType": "WhileStatement",
+ "src": "6755:115:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7438,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7431,
+ "name": "remainder",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7384,
+ "src": "6933:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7437,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "hexValue": "3130",
+ "id": 7432,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6946:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "**",
+ "rightExpression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7435,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7433,
+ "name": "STRIKE_PRICE_DIGITS",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7115,
+ "src": "6951:19:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "-",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7434,
+ "name": "trailingZeroes",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7411,
+ "src": "6973:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6951:36:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "id": 7436,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "6950:38:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6946:42:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "6933:55:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7439,
+ "nodeType": "ExpressionStatement",
+ "src": "6933:55:5"
+ },
+ {
+ "assignments": [
+ 7441
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7441,
+ "mutability": "mutable",
+ "name": "tmpStr",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7473,
+ "src": "6999:20:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7440,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "6999:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7446,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7444,
+ "name": "remainder",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7384,
+ "src": "7039:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7442,
+ "name": "Strings",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14552,
+ "src": "7022:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Strings_$14552_$",
+ "typeString": "type(library Strings)"
+ }
+ },
+ "id": 7443,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toString",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14551,
+ "src": "7022:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7445,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7022:27:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6999:50:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7457,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7447,
+ "name": "tmpStr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7441,
+ "src": "7059:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7449,
+ "name": "tmpStr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7441,
+ "src": "7075:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 7450,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7083:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7455,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7453,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 7451,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7086:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7452,
+ "name": "STRIKE_PRICE_DIGITS",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7115,
+ "src": "7090:19:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "7086:23:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "-",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7454,
+ "name": "trailingZeroes",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7411,
+ "src": "7112:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "7086:40:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7448,
+ "name": "_slice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7593,
+ "src": "7068:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (string memory,uint256,uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7456,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7068:59:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "7059:68:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "id": 7458,
+ "nodeType": "ExpressionStatement",
+ "src": "7059:68:5"
+ },
+ {
+ "assignments": [
+ 7460
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7460,
+ "mutability": "mutable",
+ "name": "completeStr",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7473,
+ "src": "7138:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7459,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7138:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7470,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7465,
+ "name": "quotientStr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7398,
+ "src": "7190:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "2e",
+ "id": 7466,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7203:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
+ "typeString": "literal_string \".\""
+ },
+ "value": "."
+ },
+ {
+ "argumentTypes": null,
+ "id": 7467,
+ "name": "tmpStr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7441,
+ "src": "7208:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
+ "typeString": "literal_string \".\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7463,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "7173:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 7464,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "7173:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 7468,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7173:42:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 7462,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "7166:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 7461,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7166:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7469,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7166:50:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7138:78:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7471,
+ "name": "completeStr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7460,
+ "src": "7233:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 7382,
+ "id": 7472,
+ "nodeType": "Return",
+ "src": "7226:18:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7376,
+ "nodeType": "StructuredDocumentation",
+ "src": "6190:179:5",
+ "text": " @dev convert strike price scaled by 1e8 to human readable number string\n @param _strikePrice strike price scaled by 1e8\n @return strike price string"
+ },
+ "id": 7474,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getDisplayedStrikePrice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7379,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7378,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7474,
+ "src": "6408:20:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7377,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6408:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6407:22:5"
+ },
+ "returnParameters": {
+ "id": 7382,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7381,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7474,
+ "src": "6453:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7380,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "6453:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6452:15:5"
+ },
+ "scope": 7709,
+ "src": "6374:877:5",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 7515,
+ "nodeType": "Block",
+ "src": "7551:221:5",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7484,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7482,
+ "name": "number",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7477,
+ "src": "7565:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "3939",
+ "id": 7483,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7574:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_99_by_1",
+ "typeString": "int_const 99"
+ },
+ "value": "99"
+ },
+ "src": "7565:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 7491,
+ "nodeType": "IfStatement",
+ "src": "7561:38:5",
+ "trueBody": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7489,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7485,
+ "name": "number",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7477,
+ "src": "7578:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7488,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7486,
+ "name": "number",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7477,
+ "src": "7587:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "%",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "313030",
+ "id": 7487,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7596:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_100_by_1",
+ "typeString": "int_const 100"
+ },
+ "value": "100"
+ },
+ "src": "7587:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "7578:21:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7490,
+ "nodeType": "ExpressionStatement",
+ "src": "7578:21:5"
+ }
+ },
+ {
+ "assignments": [
+ 7493
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7493,
+ "mutability": "mutable",
+ "name": "str",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7515,
+ "src": "7609:17:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7492,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7609:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7498,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7496,
+ "name": "number",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7477,
+ "src": "7646:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7494,
+ "name": "Strings",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 14552,
+ "src": "7629:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Strings_$14552_$",
+ "typeString": "type(library Strings)"
+ }
+ },
+ "id": 7495,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toString",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14551,
+ "src": "7629:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 7497,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7629:24:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7609:44:5"
+ },
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7501,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7499,
+ "name": "number",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7477,
+ "src": "7667:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "3130",
+ "id": 7500,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7676:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "7667:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": null,
+ "id": 7512,
+ "nodeType": "IfStatement",
+ "src": "7663:83:5",
+ "trueBody": {
+ "id": 7511,
+ "nodeType": "Block",
+ "src": "7680:66:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7506,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7725:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
+ "typeString": "literal_string \"0\""
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "id": 7507,
+ "name": "str",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7493,
+ "src": "7730:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
+ "typeString": "literal_string \"0\""
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7504,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "7708:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 7505,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "7708:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 7508,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7708:26:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 7503,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "7701:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 7502,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7701:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7509,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7701:34:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 7481,
+ "id": 7510,
+ "nodeType": "Return",
+ "src": "7694:41:5"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7513,
+ "name": "str",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7493,
+ "src": "7762:3:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 7481,
+ "id": 7514,
+ "nodeType": "Return",
+ "src": "7755:10:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7475,
+ "nodeType": "StructuredDocumentation",
+ "src": "7257:212:5",
+ "text": " @dev return a representation of a number using 2 characters, adds a leading 0 if one digit, uses two trailing digits if a 3 digit number\n @return 2 characters that corresponds to a number"
+ },
+ "id": 7516,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_uintTo2Chars",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7478,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7477,
+ "mutability": "mutable",
+ "name": "number",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7516,
+ "src": "7497:14:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7476,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7497:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7496:16:5"
+ },
+ "returnParameters": {
+ "id": 7481,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7480,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7516,
+ "src": "7536:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7479,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7536:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7535:15:5"
+ },
+ "scope": 7709,
+ "src": "7474:298:5",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 7538,
+ "nodeType": "Block",
+ "src": "8119:123:5",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "id": 7526,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7519,
+ "src": "8133:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 7536,
+ "nodeType": "Block",
+ "src": "8191:45:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "43",
+ "id": 7532,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8213:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_017e667f4b8c174291d1543c466717566e206df1bfd6f30271055ddafdb18f72",
+ "typeString": "literal_string \"C\""
+ },
+ "value": "C"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "43616c6c",
+ "id": 7533,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8218:6:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_716d1e3bdf8fa8986b997c64470211b05f63cbb8bed60c0fc10a3b0bc04f9dc9",
+ "typeString": "literal_string \"Call\""
+ },
+ "value": "Call"
+ }
+ ],
+ "id": 7534,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "8212:13:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_017e667f4b8c174291d1543c466717566e206df1bfd6f30271055ddafdb18f72_$_t_stringliteral_716d1e3bdf8fa8986b997c64470211b05f63cbb8bed60c0fc10a3b0bc04f9dc9_$",
+ "typeString": "tuple(literal_string \"C\",literal_string \"Call\")"
+ }
+ },
+ "functionReturnParameters": 7525,
+ "id": 7535,
+ "nodeType": "Return",
+ "src": "8205:20:5"
+ }
+ ]
+ },
+ "id": 7537,
+ "nodeType": "IfStatement",
+ "src": "8129:107:5",
+ "trueBody": {
+ "id": 7531,
+ "nodeType": "Block",
+ "src": "8141:44:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "50",
+ "id": 7527,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8163:3:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7b2ab94bb7d45041581aa3757ae020084674ccad6f75dc3750eb2ea8a92c4e9a",
+ "typeString": "literal_string \"P\""
+ },
+ "value": "P"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "507574",
+ "id": 7528,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8168:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_314f1cc3ce6877884041cf89454fda219df34776d3d4d35bbf7322802e30064e",
+ "typeString": "literal_string \"Put\""
+ },
+ "value": "Put"
+ }
+ ],
+ "id": 7529,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "8162:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_7b2ab94bb7d45041581aa3757ae020084674ccad6f75dc3750eb2ea8a92c4e9a_$_t_stringliteral_314f1cc3ce6877884041cf89454fda219df34776d3d4d35bbf7322802e30064e_$",
+ "typeString": "tuple(literal_string \"P\",literal_string \"Put\")"
+ }
+ },
+ "functionReturnParameters": 7525,
+ "id": 7530,
+ "nodeType": "Return",
+ "src": "8155:19:5"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7517,
+ "nodeType": "StructuredDocumentation",
+ "src": "7778:223:5",
+ "text": " @dev return string representation of option type\n @return shortString a 1 character representation of option type (P or C)\n @return longString a full length string of option type (Put or Call)"
+ },
+ "id": 7539,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getOptionType",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7520,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7519,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7539,
+ "src": "8030:11:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7518,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "8030:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8029:13:5"
+ },
+ "returnParameters": {
+ "id": 7525,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7522,
+ "mutability": "mutable",
+ "name": "shortString",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7539,
+ "src": "8066:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7521,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "8066:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7524,
+ "mutability": "mutable",
+ "name": "longString",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7539,
+ "src": "8093:24:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7523,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "8093:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8065:53:5"
+ },
+ "scope": 7709,
+ "src": "8006:236:5",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 7592,
+ "nodeType": "Block",
+ "src": "8578:190:5",
+ "statements": [
+ {
+ "assignments": [
+ 7552
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7552,
+ "mutability": "mutable",
+ "name": "a",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7592,
+ "src": "8588:14:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 7551,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "8588:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7559,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7557,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7555,
+ "name": "_end",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7546,
+ "src": "8615:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "-",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7556,
+ "name": "_start",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7544,
+ "src": "8622:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8615:13:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 7554,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "8605:9:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (bytes memory)"
+ },
+ "typeName": {
+ "id": 7553,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "8609:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ }
+ },
+ "id": 7558,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8605:24:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "8588:41:5"
+ },
+ {
+ "body": {
+ "id": 7585,
+ "nodeType": "Block",
+ "src": "8683:53:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7583,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7572,
+ "name": "a",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7552,
+ "src": "8697:1:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 7574,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7573,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7561,
+ "src": "8699:1:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "8697:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7577,
+ "name": "_s",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7542,
+ "src": "8710:2:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 7576,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "8704:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 7575,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "8704:5:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7578,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8704:9:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 7582,
+ "indexExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7581,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7579,
+ "name": "_start",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7544,
+ "src": "8714:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7580,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7561,
+ "src": "8723:1:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8714:10:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "8704:21:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "src": "8697:28:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 7584,
+ "nodeType": "ExpressionStatement",
+ "src": "8697:28:5"
+ }
+ ]
+ },
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7568,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7564,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7561,
+ "src": "8659:1:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7567,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7565,
+ "name": "_end",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7546,
+ "src": "8663:4:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "-",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7566,
+ "name": "_start",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7544,
+ "src": "8670:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8663:13:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "8659:17:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 7586,
+ "initializationExpression": {
+ "assignments": [
+ 7561
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7561,
+ "mutability": "mutable",
+ "name": "i",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7586,
+ "src": "8644:9:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7560,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8644:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7563,
+ "initialValue": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7562,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8656:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "8644:13:5"
+ },
+ "loopExpression": {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7570,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "8678:3:5",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 7569,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7561,
+ "src": "8678:1:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7571,
+ "nodeType": "ExpressionStatement",
+ "src": "8678:3:5"
+ },
+ "nodeType": "ForStatement",
+ "src": "8639:97:5"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7589,
+ "name": "a",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7552,
+ "src": "8759:1:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 7588,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "8752:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 7587,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "8752:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7590,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8752:9:5",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 7550,
+ "id": 7591,
+ "nodeType": "Return",
+ "src": "8745:16:5"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7540,
+ "nodeType": "StructuredDocumentation",
+ "src": "8248:193:5",
+ "text": " @dev cut string s into s[start:end]\n @param _s the string to cut\n @param _start the starting index\n @param _end the ending index (excluded in the substring)"
+ },
+ "id": 7593,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_slice",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7547,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7542,
+ "mutability": "mutable",
+ "name": "_s",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7593,
+ "src": "8471:16:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7541,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "8471:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7544,
+ "mutability": "mutable",
+ "name": "_start",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7593,
+ "src": "8497:14:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7543,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8497:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7546,
+ "mutability": "mutable",
+ "name": "_end",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7593,
+ "src": "8521:12:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7545,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8521:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8461:78:5"
+ },
+ "returnParameters": {
+ "id": 7550,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7549,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7593,
+ "src": "8563:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7548,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "8563:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "8562:15:5"
+ },
+ "scope": 7709,
+ "src": "8446:322:5",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 7707,
+ "nodeType": "Block",
+ "src": "9129:861:5",
+ "statements": [
+ {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7605,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7603,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9143:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "31",
+ "id": 7604,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9153:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "9143:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7613,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7611,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9216:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "32",
+ "id": 7612,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9226:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "src": "9216:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7621,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7619,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9290:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "33",
+ "id": 7620,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9300:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_3_by_1",
+ "typeString": "int_const 3"
+ },
+ "value": "3"
+ },
+ "src": "9290:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7629,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7627,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9361:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "34",
+ "id": 7628,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9371:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_4_by_1",
+ "typeString": "int_const 4"
+ },
+ "value": "4"
+ },
+ "src": "9361:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7637,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7635,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9432:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "35",
+ "id": 7636,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9442:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_5_by_1",
+ "typeString": "int_const 5"
+ },
+ "value": "5"
+ },
+ "src": "9432:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7645,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7643,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9501:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "36",
+ "id": 7644,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9511:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_6_by_1",
+ "typeString": "int_const 6"
+ },
+ "value": "6"
+ },
+ "src": "9501:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7653,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7651,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9571:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "37",
+ "id": 7652,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9581:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_7_by_1",
+ "typeString": "int_const 7"
+ },
+ "value": "7"
+ },
+ "src": "9571:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7661,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7659,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9641:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "38",
+ "id": 7660,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9651:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ },
+ "src": "9641:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7669,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7667,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9713:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "39",
+ "id": 7668,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9723:1:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_9_by_1",
+ "typeString": "int_const 9"
+ },
+ "value": "9"
+ },
+ "src": "9713:11:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7677,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7675,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9788:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "3130",
+ "id": 7676,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9798:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "9788:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "condition": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7685,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7683,
+ "name": "_month",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7596,
+ "src": "9862:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "3131",
+ "id": 7684,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9872:2:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_11_by_1",
+ "typeString": "int_const 11"
+ },
+ "value": "11"
+ },
+ "src": "9862:12:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 7695,
+ "nodeType": "Block",
+ "src": "9933:51:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "444543",
+ "id": 7691,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9955:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c8117e3bb0a5365f1188f80e2df06c2b6996766cd83da2c646f5f9e14dcfbd17",
+ "typeString": "literal_string \"DEC\""
+ },
+ "value": "DEC"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "446563656d626572",
+ "id": 7692,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9962:10:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5da4b5688a20e15e430b79daeaf5887e3d99e95b7c06bd77590231177886bbf3",
+ "typeString": "literal_string \"December\""
+ },
+ "value": "December"
+ }
+ ],
+ "id": 7693,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9954:19:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_c8117e3bb0a5365f1188f80e2df06c2b6996766cd83da2c646f5f9e14dcfbd17_$_t_stringliteral_5da4b5688a20e15e430b79daeaf5887e3d99e95b7c06bd77590231177886bbf3_$",
+ "typeString": "tuple(literal_string \"DEC\",literal_string \"December\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7694,
+ "nodeType": "Return",
+ "src": "9947:26:5"
+ }
+ ]
+ },
+ "id": 7696,
+ "nodeType": "IfStatement",
+ "src": "9858:126:5",
+ "trueBody": {
+ "id": 7690,
+ "nodeType": "Block",
+ "src": "9876:51:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4e4f56",
+ "id": 7686,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9898:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_e7065a211a98ff5c4eddd2f91ce4e3468890943bb7e50d6d449f993227bfbd84",
+ "typeString": "literal_string \"NOV\""
+ },
+ "value": "NOV"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4e6f76656d626572",
+ "id": 7687,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9905:10:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_548815db853116a899f25369e97779dbd8197cc60e883d9c4f5d6dd349aea087",
+ "typeString": "literal_string \"November\""
+ },
+ "value": "November"
+ }
+ ],
+ "id": 7688,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9897:19:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_e7065a211a98ff5c4eddd2f91ce4e3468890943bb7e50d6d449f993227bfbd84_$_t_stringliteral_548815db853116a899f25369e97779dbd8197cc60e883d9c4f5d6dd349aea087_$",
+ "typeString": "tuple(literal_string \"NOV\",literal_string \"November\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7689,
+ "nodeType": "Return",
+ "src": "9890:26:5"
+ }
+ ]
+ }
+ },
+ "id": 7697,
+ "nodeType": "IfStatement",
+ "src": "9784:200:5",
+ "trueBody": {
+ "id": 7682,
+ "nodeType": "Block",
+ "src": "9802:50:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4f4354",
+ "id": 7678,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9824:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_252a6a8e1cdf73f8f8f76ed1355d823013b342bd4f1e9bc58a9c80bfc8322a3a",
+ "typeString": "literal_string \"OCT\""
+ },
+ "value": "OCT"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f63746f626572",
+ "id": 7679,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9831:9:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_259c9ac395cd2012575dbe33cecd0e1f75d83ee8481d4fb2fd12c2e36a807bd1",
+ "typeString": "literal_string \"October\""
+ },
+ "value": "October"
+ }
+ ],
+ "id": 7680,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9823:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_252a6a8e1cdf73f8f8f76ed1355d823013b342bd4f1e9bc58a9c80bfc8322a3a_$_t_stringliteral_259c9ac395cd2012575dbe33cecd0e1f75d83ee8481d4fb2fd12c2e36a807bd1_$",
+ "typeString": "tuple(literal_string \"OCT\",literal_string \"October\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7681,
+ "nodeType": "Return",
+ "src": "9816:25:5"
+ }
+ ]
+ }
+ },
+ "id": 7698,
+ "nodeType": "IfStatement",
+ "src": "9709:275:5",
+ "trueBody": {
+ "id": 7674,
+ "nodeType": "Block",
+ "src": "9726:52:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "534550",
+ "id": 7670,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9748:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c78ab360d9429be9e25e7eb847afcb977d1e5bbfc8c6d23f869fdfbe2f39a38f",
+ "typeString": "literal_string \"SEP\""
+ },
+ "value": "SEP"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "53657074656d626572",
+ "id": 7671,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9755:11:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_0750d5b9023cc682051a51927e5e40780f20c0d58282974c7f492eba3d25a2d6",
+ "typeString": "literal_string \"September\""
+ },
+ "value": "September"
+ }
+ ],
+ "id": 7672,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9747:20:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_c78ab360d9429be9e25e7eb847afcb977d1e5bbfc8c6d23f869fdfbe2f39a38f_$_t_stringliteral_0750d5b9023cc682051a51927e5e40780f20c0d58282974c7f492eba3d25a2d6_$",
+ "typeString": "tuple(literal_string \"SEP\",literal_string \"September\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7673,
+ "nodeType": "Return",
+ "src": "9740:27:5"
+ }
+ ]
+ }
+ },
+ "id": 7699,
+ "nodeType": "IfStatement",
+ "src": "9637:347:5",
+ "trueBody": {
+ "id": 7666,
+ "nodeType": "Block",
+ "src": "9654:49:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "415547",
+ "id": 7662,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9676:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_cb7d677c8b71dad920d754a55194a26de384ba8d7ff1eb82bbee81eb7c0fe6fb",
+ "typeString": "literal_string \"AUG\""
+ },
+ "value": "AUG"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "417567757374",
+ "id": 7663,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9683:8:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_21d2f300e3183b3d29ef07ded91865b10b81fbd5e85b8abb78de5e3b62726109",
+ "typeString": "literal_string \"August\""
+ },
+ "value": "August"
+ }
+ ],
+ "id": 7664,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9675:17:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_cb7d677c8b71dad920d754a55194a26de384ba8d7ff1eb82bbee81eb7c0fe6fb_$_t_stringliteral_21d2f300e3183b3d29ef07ded91865b10b81fbd5e85b8abb78de5e3b62726109_$",
+ "typeString": "tuple(literal_string \"AUG\",literal_string \"August\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7665,
+ "nodeType": "Return",
+ "src": "9668:24:5"
+ }
+ ]
+ }
+ },
+ "id": 7700,
+ "nodeType": "IfStatement",
+ "src": "9567:417:5",
+ "trueBody": {
+ "id": 7658,
+ "nodeType": "Block",
+ "src": "9584:47:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4a554c",
+ "id": 7654,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9606:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_06edfdc72c24cb5738eded8d5162ede2bba6d0e5773b85a4dea9c4a71182934f",
+ "typeString": "literal_string \"JUL\""
+ },
+ "value": "JUL"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4a756c79",
+ "id": 7655,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9613:6:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_3d90a466adc0aa426fde675fc249c132c3b8c2ba66f7d9163c3b33cbd8e79620",
+ "typeString": "literal_string \"July\""
+ },
+ "value": "July"
+ }
+ ],
+ "id": 7656,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9605:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_06edfdc72c24cb5738eded8d5162ede2bba6d0e5773b85a4dea9c4a71182934f_$_t_stringliteral_3d90a466adc0aa426fde675fc249c132c3b8c2ba66f7d9163c3b33cbd8e79620_$",
+ "typeString": "tuple(literal_string \"JUL\",literal_string \"July\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7657,
+ "nodeType": "Return",
+ "src": "9598:22:5"
+ }
+ ]
+ }
+ },
+ "id": 7701,
+ "nodeType": "IfStatement",
+ "src": "9497:487:5",
+ "trueBody": {
+ "id": 7650,
+ "nodeType": "Block",
+ "src": "9514:47:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4a554e",
+ "id": 7646,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9536:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a84838346eb1afa4703723d4820090ffc8eee981c33b12dcb1f12e18589a0c3c",
+ "typeString": "literal_string \"JUN\""
+ },
+ "value": "JUN"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4a756e65",
+ "id": 7647,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9543:6:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_e8df3ad87408a1ef76752f34c8427bd481f6a1d097837b45eb4aa173f15b98f3",
+ "typeString": "literal_string \"June\""
+ },
+ "value": "June"
+ }
+ ],
+ "id": 7648,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9535:15:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_a84838346eb1afa4703723d4820090ffc8eee981c33b12dcb1f12e18589a0c3c_$_t_stringliteral_e8df3ad87408a1ef76752f34c8427bd481f6a1d097837b45eb4aa173f15b98f3_$",
+ "typeString": "tuple(literal_string \"JUN\",literal_string \"June\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7649,
+ "nodeType": "Return",
+ "src": "9528:22:5"
+ }
+ ]
+ }
+ },
+ "id": 7702,
+ "nodeType": "IfStatement",
+ "src": "9428:556:5",
+ "trueBody": {
+ "id": 7642,
+ "nodeType": "Block",
+ "src": "9445:46:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4d4159",
+ "id": 7638,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9467:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a66baf86646e3fd7821b131d045f216ae88feb53bd5ba0f19f5026f1f9c44ed6",
+ "typeString": "literal_string \"MAY\""
+ },
+ "value": "MAY"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d6179",
+ "id": 7639,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9474:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_db5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d3",
+ "typeString": "literal_string \"May\""
+ },
+ "value": "May"
+ }
+ ],
+ "id": 7640,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9466:14:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_a66baf86646e3fd7821b131d045f216ae88feb53bd5ba0f19f5026f1f9c44ed6_$_t_stringliteral_db5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d3_$",
+ "typeString": "tuple(literal_string \"MAY\",literal_string \"May\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7641,
+ "nodeType": "Return",
+ "src": "9459:21:5"
+ }
+ ]
+ }
+ },
+ "id": 7703,
+ "nodeType": "IfStatement",
+ "src": "9357:627:5",
+ "trueBody": {
+ "id": 7634,
+ "nodeType": "Block",
+ "src": "9374:48:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "415052",
+ "id": 7630,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9396:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d292d410e05ab3e39f4919052b63a9718bbdff731e7d2f3dac9f8dd73f823bd7",
+ "typeString": "literal_string \"APR\""
+ },
+ "value": "APR"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "417072696c",
+ "id": 7631,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9403:7:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ee2323e79f7a9c6b34260aa0c24e60d8bf9c4b1d9c3ce1c794010bc0c1b39971",
+ "typeString": "literal_string \"April\""
+ },
+ "value": "April"
+ }
+ ],
+ "id": 7632,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9395:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_d292d410e05ab3e39f4919052b63a9718bbdff731e7d2f3dac9f8dd73f823bd7_$_t_stringliteral_ee2323e79f7a9c6b34260aa0c24e60d8bf9c4b1d9c3ce1c794010bc0c1b39971_$",
+ "typeString": "tuple(literal_string \"APR\",literal_string \"April\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7633,
+ "nodeType": "Return",
+ "src": "9388:23:5"
+ }
+ ]
+ }
+ },
+ "id": 7704,
+ "nodeType": "IfStatement",
+ "src": "9286:698:5",
+ "trueBody": {
+ "id": 7626,
+ "nodeType": "Block",
+ "src": "9303:48:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4d4152",
+ "id": 7622,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9325:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a2c76347cfa7e506941ac825438294d355797d7cf70ab0c127269d2286c541b1",
+ "typeString": "literal_string \"MAR\""
+ },
+ "value": "MAR"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4d61726368",
+ "id": 7623,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9332:7:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7e37a4ea406a10e3289cce7d07e572a7d25a7de67b84633b1726c9f90115cf25",
+ "typeString": "literal_string \"March\""
+ },
+ "value": "March"
+ }
+ ],
+ "id": 7624,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9324:16:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_a2c76347cfa7e506941ac825438294d355797d7cf70ab0c127269d2286c541b1_$_t_stringliteral_7e37a4ea406a10e3289cce7d07e572a7d25a7de67b84633b1726c9f90115cf25_$",
+ "typeString": "tuple(literal_string \"MAR\",literal_string \"March\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7625,
+ "nodeType": "Return",
+ "src": "9317:23:5"
+ }
+ ]
+ }
+ },
+ "id": 7705,
+ "nodeType": "IfStatement",
+ "src": "9212:772:5",
+ "trueBody": {
+ "id": 7618,
+ "nodeType": "Block",
+ "src": "9229:51:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "464542",
+ "id": 7614,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9251:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_08c44b84acfc3768dba01bee1da2a7e6731e2daf8a72c31282aae3b62d2b25dd",
+ "typeString": "literal_string \"FEB\""
+ },
+ "value": "FEB"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4665627275617279",
+ "id": 7615,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9258:10:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_58e30506943faa08c30ec3c36ca243dfdf886fd1a6e762180832a1c7ee624c53",
+ "typeString": "literal_string \"February\""
+ },
+ "value": "February"
+ }
+ ],
+ "id": 7616,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9250:19:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_08c44b84acfc3768dba01bee1da2a7e6731e2daf8a72c31282aae3b62d2b25dd_$_t_stringliteral_58e30506943faa08c30ec3c36ca243dfdf886fd1a6e762180832a1c7ee624c53_$",
+ "typeString": "tuple(literal_string \"FEB\",literal_string \"February\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7617,
+ "nodeType": "Return",
+ "src": "9243:26:5"
+ }
+ ]
+ }
+ },
+ "id": 7706,
+ "nodeType": "IfStatement",
+ "src": "9139:845:5",
+ "trueBody": {
+ "id": 7610,
+ "nodeType": "Block",
+ "src": "9156:50:5",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "components": [
+ {
+ "argumentTypes": null,
+ "hexValue": "4a414e",
+ "id": 7606,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9178:5:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f14d726569319aa8f9e3569d9156df02a4420df3db0bcf6966a0f871addaba36",
+ "typeString": "literal_string \"JAN\""
+ },
+ "value": "JAN"
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4a616e75617279",
+ "id": 7607,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9185:9:5",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_4e00a388b5d7c71e31248528c0020fd8a94c4cfd2ad42641678c08717f2ea9ba",
+ "typeString": "literal_string \"January\""
+ },
+ "value": "January"
+ }
+ ],
+ "id": 7608,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "9177:18:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_stringliteral_f14d726569319aa8f9e3569d9156df02a4420df3db0bcf6966a0f871addaba36_$_t_stringliteral_4e00a388b5d7c71e31248528c0020fd8a94c4cfd2ad42641678c08717f2ea9ba_$",
+ "typeString": "tuple(literal_string \"JAN\",literal_string \"January\")"
+ }
+ },
+ "functionReturnParameters": 7602,
+ "id": 7609,
+ "nodeType": "Return",
+ "src": "9170:25:5"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7594,
+ "nodeType": "StructuredDocumentation",
+ "src": "8774:239:5",
+ "text": " @dev return string representation of a month\n @return shortString a 3 character representation of a month (ex: SEP, DEC, etc)\n @return longString a full length string of a month (ex: September, December, etc)"
+ },
+ "id": 7708,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getMonth",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7597,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7596,
+ "mutability": "mutable",
+ "name": "_month",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7708,
+ "src": "9037:14:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7595,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9037:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9036:16:5"
+ },
+ "returnParameters": {
+ "id": 7602,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7599,
+ "mutability": "mutable",
+ "name": "shortString",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7708,
+ "src": "9076:25:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7598,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "9076:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7601,
+ "mutability": "mutable",
+ "name": "longString",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7708,
+ "src": "9103:24:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 7600,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "9103:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "9075:53:5"
+ },
+ "scope": 7709,
+ "src": "9018:972:5",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 7710,
+ "src": "679:9313:5"
+ }
+ ],
+ "src": "42:9951:5"
+ },
+ "id": 5
+ },
+ "contracts/core/OtokenFactory.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/OtokenFactory.sol",
+ "exportedSymbols": {
+ "OtokenFactory": [
+ 8064
+ ]
+ },
+ "id": 8065,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 7711,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "0:24:6"
+ },
+ {
+ "absolutePath": "contracts/core/OtokenSpawner.sol",
+ "file": "./OtokenSpawner.sol",
+ "id": 7713,
+ "nodeType": "ImportDirective",
+ "scope": 8065,
+ "sourceUnit": 8152,
+ "src": "26:50:6",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7712,
+ "name": "OtokenSpawner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "34:13:6",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/SafeMath.sol",
+ "file": "../packages/oz/SafeMath.sol",
+ "id": 7715,
+ "nodeType": "ImportDirective",
+ "scope": 8065,
+ "sourceUnit": 14286,
+ "src": "77:53:6",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7714,
+ "name": "SafeMath",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "85:8:6",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/AddressBookInterface.sol",
+ "file": "../interfaces/AddressBookInterface.sol",
+ "id": 7717,
+ "nodeType": "ImportDirective",
+ "scope": 8065,
+ "sourceUnit": 9226,
+ "src": "131:76:6",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7716,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "139:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/OtokenInterface.sol",
+ "file": "../interfaces/OtokenInterface.sol",
+ "id": 7719,
+ "nodeType": "ImportDirective",
+ "scope": 8065,
+ "sourceUnit": 9726,
+ "src": "208:66:6",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7718,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "216:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/interfaces/WhitelistInterface.sol",
+ "file": "../interfaces/WhitelistInterface.sol",
+ "id": 7721,
+ "nodeType": "ImportDirective",
+ "scope": 8065,
+ "sourceUnit": 9843,
+ "src": "275:72:6",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 7720,
+ "name": "WhitelistInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "283:18:6",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 7723,
+ "name": "OtokenSpawner",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 8151,
+ "src": "687:13:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenSpawner_$8151",
+ "typeString": "contract OtokenSpawner"
+ }
+ },
+ "id": 7724,
+ "nodeType": "InheritanceSpecifier",
+ "src": "687:13:6"
+ }
+ ],
+ "contractDependencies": [
+ 8151
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 7722,
+ "nodeType": "StructuredDocumentation",
+ "src": "349:311:6",
+ "text": " SPDX-License-Identifier: UNLICENSED\n @title A factory to create Opyn oTokens\n @author Opyn Team\n @notice Create new oTokens and keep track of all created tokens\n @dev Calculate contract address before each creation with CREATE2\n and deploy eip-1167 minimal proxies for oToken logic contract"
+ },
+ "fullyImplemented": true,
+ "id": 8064,
+ "linearizedBaseContracts": [
+ 8064,
+ 8151
+ ],
+ "name": "OtokenFactory",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 7727,
+ "libraryName": {
+ "contractScope": null,
+ "id": 7725,
+ "name": "SafeMath",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 14285,
+ "src": "713:8:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SafeMath_$14285",
+ "typeString": "library SafeMath"
+ }
+ },
+ "nodeType": "UsingForDirective",
+ "src": "707:27:6",
+ "typeName": {
+ "id": 7726,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "726:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7728,
+ "nodeType": "StructuredDocumentation",
+ "src": "739:118:6",
+ "text": "@notice Opyn AddressBook contract that records the address of the Whitelist module and the Otoken impl address. */"
+ },
+ "functionSelector": "f5887cdd",
+ "id": 7730,
+ "mutability": "mutable",
+ "name": "addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8064,
+ "src": "862:26:6",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7729,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "862:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7731,
+ "nodeType": "StructuredDocumentation",
+ "src": "895:43:6",
+ "text": "@notice array of all created otokens */"
+ },
+ "functionSelector": "de0120de",
+ "id": 7734,
+ "mutability": "mutable",
+ "name": "otokens",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8064,
+ "src": "943:24:6",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage",
+ "typeString": "address[]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 7732,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "943:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7733,
+ "length": null,
+ "nodeType": "ArrayTypeName",
+ "src": "943:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
+ "typeString": "address[]"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 7735,
+ "nodeType": "StructuredDocumentation",
+ "src": "974:61:6",
+ "text": "@dev mapping from parameters hash to its deployed address"
+ },
+ "id": 7739,
+ "mutability": "mutable",
+ "name": "idToAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8064,
+ "src": "1040:47:6",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ },
+ "typeName": {
+ "id": 7738,
+ "keyType": {
+ "id": 7736,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1048:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1040:27:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ },
+ "valueType": {
+ "id": 7737,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1059:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "private"
+ },
+ {
+ "constant": true,
+ "documentation": {
+ "id": 7740,
+ "nodeType": "StructuredDocumentation",
+ "src": "1094:77:6",
+ "text": "@dev max expiry that BokkyPooBahsDateTimeLibrary can handle. (2345/12/31)"
+ },
+ "id": 7743,
+ "mutability": "constant",
+ "name": "MAX_EXPIRY",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8064,
+ "src": "1176:49:6",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7741,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1176:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "hexValue": "3131383635333938343030",
+ "id": 7742,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1214:11:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_11865398400_by_1",
+ "typeString": "int_const 11865398400"
+ },
+ "value": "11865398400"
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 7752,
+ "nodeType": "Block",
+ "src": "1273:43:6",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7750,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 7748,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7730,
+ "src": "1283:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7749,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7745,
+ "src": "1297:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1283:26:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7751,
+ "nodeType": "ExpressionStatement",
+ "src": "1283:26:6"
+ }
+ ]
+ },
+ "documentation": null,
+ "id": 7753,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7746,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7745,
+ "mutability": "mutable",
+ "name": "_addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7753,
+ "src": "1244:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7744,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1244:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1243:22:6"
+ },
+ "returnParameters": {
+ "id": 7747,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1273:0:6"
+ },
+ "scope": 8064,
+ "src": "1232:84:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 7754,
+ "nodeType": "StructuredDocumentation",
+ "src": "1322:57:6",
+ "text": "@notice emitted when the factory creates a new Option"
+ },
+ "id": 7772,
+ "name": "OtokenCreated",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 7771,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7756,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "tokenAddress",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1413:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7755,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1413:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7758,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "creator",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1443:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7757,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1443:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7760,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1468:26:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7759,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1468:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7762,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1504:22:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7761,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1504:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7764,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1536:26:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7763,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1536:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7766,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1572:19:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7765,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1572:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7768,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1601:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7767,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1601:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7770,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7772,
+ "src": "1625:10:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7769,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1625:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1403:238:6"
+ },
+ "src": "1384:258:6"
+ },
+ {
+ "body": {
+ "id": 7937,
+ "nodeType": "Block",
+ "src": "2505:1868:6",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7793,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7791,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7783,
+ "src": "2523:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7792,
+ "name": "now",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -17,
+ "src": "2533:3:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2523:13:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e466163746f72793a2043616e2774206372656174652065787069726564206f7074696f6e",
+ "id": 7794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2538:44:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_4c8bfd369ac8d57aaccc2a97c00ca15e28a53e2484e3f238d1696d0822b78a92",
+ "typeString": "literal_string \"OtokenFactory: Can't create expired option\""
+ },
+ "value": "OtokenFactory: Can't create expired option"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_4c8bfd369ac8d57aaccc2a97c00ca15e28a53e2484e3f238d1696d0822b78a92",
+ "typeString": "literal_string \"OtokenFactory: Can't create expired option\""
+ }
+ ],
+ "id": 7790,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2515:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7795,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2515:68:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7796,
+ "nodeType": "ExpressionStatement",
+ "src": "2515:68:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7798,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7783,
+ "src": "2601:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "<",
+ "rightExpression": {
+ "argumentTypes": null,
+ "id": 7799,
+ "name": "MAX_EXPIRY",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7743,
+ "src": "2611:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2601:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e466163746f72793a2043616e277420637265617465206f7074696f6e207769746820657870697279203e20323334352f31322f3331",
+ "id": 7801,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2623:61:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8304e1e09d3f182d36315185a5c3d3cad8abb38a207f2641f536b063fec4fd58",
+ "typeString": "literal_string \"OtokenFactory: Can't create option with expiry > 2345/12/31\""
+ },
+ "value": "OtokenFactory: Can't create option with expiry > 2345/12/31"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8304e1e09d3f182d36315185a5c3d3cad8abb38a207f2641f536b063fec4fd58",
+ "typeString": "literal_string \"OtokenFactory: Can't create option with expiry > 2345/12/31\""
+ }
+ ],
+ "id": 7797,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2593:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7802,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2593:92:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7803,
+ "nodeType": "ExpressionStatement",
+ "src": "2593:92:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7813,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "3836343030",
+ "id": 7810,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2772:5:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_86400_by_1",
+ "typeString": "int_const 86400"
+ },
+ "value": "86400"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_86400_by_1",
+ "typeString": "int_const 86400"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "3238383030",
+ "id": 7807,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2761:5:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_28800_by_1",
+ "typeString": "int_const 28800"
+ },
+ "value": "28800"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_28800_by_1",
+ "typeString": "int_const 28800"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7805,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7783,
+ "src": "2749:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7806,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sub",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14135,
+ "src": "2749:11:6",
+ "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": 7808,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2749:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 7809,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "mod",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 14260,
+ "src": "2749:22:6",
+ "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": 7811,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2749:29:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7812,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2782:1:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "2749:34:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e466163746f72793a204f7074696f6e2068617320746f206578706972652030383a303020555443",
+ "id": 7814,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2785:47:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_e8a8801ece30f3bdb50bd2f5471bb9a2e2d4bd5b967d809bb5e85ffa990b3a51",
+ "typeString": "literal_string \"OtokenFactory: Option has to expire 08:00 UTC\""
+ },
+ "value": "OtokenFactory: Option has to expire 08:00 UTC"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_e8a8801ece30f3bdb50bd2f5471bb9a2e2d4bd5b967d809bb5e85ffa990b3a51",
+ "typeString": "literal_string \"OtokenFactory: Option has to expire 08:00 UTC\""
+ }
+ ],
+ "id": 7804,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2741:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7815,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2741:92:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7816,
+ "nodeType": "ExpressionStatement",
+ "src": "2741:92:6"
+ },
+ {
+ "assignments": [
+ 7818
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7818,
+ "mutability": "mutable",
+ "name": "id",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7937,
+ "src": "2843:10:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 7817,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2843:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7827,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7820,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7775,
+ "src": "2869:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7821,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7777,
+ "src": "2887:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7822,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7779,
+ "src": "2901:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7823,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7781,
+ "src": "2919:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7824,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7783,
+ "src": "2933:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7825,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7785,
+ "src": "2942:6:6",
+ "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_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 7819,
+ "name": "_getOptionId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8063,
+ "src": "2856:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,uint256,uint256,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 7826,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2856:93:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2843:106:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 7836,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7829,
+ "name": "idToAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7739,
+ "src": "2967:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ }
+ },
+ "id": 7831,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7830,
+ "name": "id",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7818,
+ "src": "2979:2:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2967:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7834,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2994:1:6",
+ "subdenomination": null,
+ "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": 7833,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2986:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 7832,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2986:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 7835,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2986:10:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "2967:29:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e466163746f72793a204f7074696f6e20616c72656164792063726561746564",
+ "id": 7837,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2998:39:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_098b05bfa809c76734e210bb96a0e0249e37f7c6b48adabb824bda1c41ed6559",
+ "typeString": "literal_string \"OtokenFactory: Option already created\""
+ },
+ "value": "OtokenFactory: Option already created"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_098b05bfa809c76734e210bb96a0e0249e37f7c6b48adabb824bda1c41ed6559",
+ "typeString": "literal_string \"OtokenFactory: Option already created\""
+ }
+ ],
+ "id": 7828,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2959:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7838,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2959:79:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7839,
+ "nodeType": "ExpressionStatement",
+ "src": "2959:79:6"
+ },
+ {
+ "assignments": [
+ 7841
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7841,
+ "mutability": "mutable",
+ "name": "whitelist",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7937,
+ "src": "3049:17:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7840,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3049:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7847,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7843,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7730,
+ "src": "3090:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7842,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "3069:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 7844,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3069:33:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 7845,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getWhitelist",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9145,
+ "src": "3069:46:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 7846,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3069:48:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3049:68:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7853,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7775,
+ "src": "3216:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7854,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7777,
+ "src": "3250:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7855,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7779,
+ "src": "3280:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7856,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7785,
+ "src": "3314:6:6",
+ "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_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7850,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7841,
+ "src": "3167:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7849,
+ "name": "WhitelistInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9842,
+ "src": "3148:18:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_WhitelistInterface_$9842_$",
+ "typeString": "type(contract WhitelistInterface)"
+ }
+ },
+ "id": 7851,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3148:29:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 7852,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isWhitelistedProduct",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9768,
+ "src": "3148:50:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_address_$_t_bool_$returns$_t_bool_$",
+ "typeString": "function (address,address,address,bool) view external returns (bool)"
+ }
+ },
+ "id": 7857,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3148:186:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e466163746f72793a20556e737570706f727465642050726f64756374",
+ "id": 7858,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3348:36:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6e60bbdd360937f6851cf19879d04a25117ebc5494fe5368af1bda921971d408",
+ "typeString": "literal_string \"OtokenFactory: Unsupported Product\""
+ },
+ "value": "OtokenFactory: Unsupported Product"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6e60bbdd360937f6851cf19879d04a25117ebc5494fe5368af1bda921971d408",
+ "typeString": "literal_string \"OtokenFactory: Unsupported Product\""
+ }
+ ],
+ "id": 7848,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3127:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7859,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3127:267:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7860,
+ "nodeType": "ExpressionStatement",
+ "src": "3127:267:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 7867,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7863,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "3413:7:6",
+ "subExpression": {
+ "argumentTypes": null,
+ "id": 7862,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7785,
+ "src": "3414:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 7866,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 7864,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7781,
+ "src": "3424:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 7865,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3439:1:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "3424:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "3413:27:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "4f746f6b656e466163746f72793a2043616e277420637265617465206120243020737472696b6520707574206f7074696f6e",
+ "id": 7868,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3442:52:6",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_75340bfd6dc6a30f0dadfa18cc47e50c6b9801642141549ef6eb9853298cb20a",
+ "typeString": "literal_string \"OtokenFactory: Can't create a $0 strike put option\""
+ },
+ "value": "OtokenFactory: Can't create a $0 strike put option"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_75340bfd6dc6a30f0dadfa18cc47e50c6b9801642141549ef6eb9853298cb20a",
+ "typeString": "literal_string \"OtokenFactory: Can't create a $0 strike put option\""
+ }
+ ],
+ "id": 7861,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "3405:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 7869,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3405:90:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7870,
+ "nodeType": "ExpressionStatement",
+ "src": "3405:90:6"
+ },
+ {
+ "assignments": [
+ 7872
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7872,
+ "mutability": "mutable",
+ "name": "otokenImpl",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7937,
+ "src": "3506:18:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7871,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3506:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7878,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7874,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7730,
+ "src": "3548:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7873,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "3527:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 7875,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3527:33:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 7876,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getOtokenImpl",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9135,
+ "src": "3527:47:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 7877,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3527:49:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3506:70:6"
+ },
+ {
+ "assignments": [
+ 7880
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7880,
+ "mutability": "mutable",
+ "name": "initializationCalldata",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7937,
+ "src": "3587:35:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 7879,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3587:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7896,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7884,
+ "name": "otokenImpl",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7872,
+ "src": "3677:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7883,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "3661:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 7885,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3661:27:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 7886,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "init",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9695,
+ "src": "3661:32:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
+ "typeString": "function (address,address,address,address,uint256,uint256,bool) external"
+ }
+ },
+ "id": 7887,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "selector",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3661:41:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7888,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7730,
+ "src": "3716:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7889,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7775,
+ "src": "3741:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7890,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7777,
+ "src": "3771:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7891,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7779,
+ "src": "3797:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7892,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7781,
+ "src": "3827:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7893,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7783,
+ "src": "3853:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7894,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7785,
+ "src": "3874:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7881,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "3625:3:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 7882,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodeWithSelector",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "3625:22:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes4) pure returns (bytes memory)"
+ }
+ },
+ "id": 7895,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3625:265:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3587:303:6"
+ },
+ {
+ "assignments": [
+ 7898
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7898,
+ "mutability": "mutable",
+ "name": "newOtoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7937,
+ "src": "3901:17:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7897,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3901:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7903,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7900,
+ "name": "otokenImpl",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7872,
+ "src": "3928:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7901,
+ "name": "initializationCalldata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7880,
+ "src": "3940:22:6",
+ "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": 7899,
+ "name": "_spawn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8110,
+ "src": "3921:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$",
+ "typeString": "function (address,bytes memory) returns (address)"
+ }
+ },
+ "id": 7902,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3921:42:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3901:62:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7908,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7904,
+ "name": "idToAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7739,
+ "src": "3974:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ }
+ },
+ "id": 7906,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7905,
+ "name": "id",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7818,
+ "src": "3986:2:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "3974:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 7907,
+ "name": "newOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7898,
+ "src": "3992:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3974:27:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 7909,
+ "nodeType": "ExpressionStatement",
+ "src": "3974:27:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7913,
+ "name": "newOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7898,
+ "src": "4024:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 7910,
+ "name": "otokens",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7734,
+ "src": "4011:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage",
+ "typeString": "address[] storage ref"
+ }
+ },
+ "id": 7912,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "push",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4011:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 7914,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4011:23:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7915,
+ "nodeType": "ExpressionStatement",
+ "src": "4011:23:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7920,
+ "name": "newOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7898,
+ "src": "4090:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7917,
+ "name": "whitelist",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7841,
+ "src": "4063:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 7916,
+ "name": "WhitelistInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9842,
+ "src": "4044:18:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_WhitelistInterface_$9842_$",
+ "typeString": "type(contract WhitelistInterface)"
+ }
+ },
+ "id": 7918,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4044:29:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_WhitelistInterface_$9842",
+ "typeString": "contract WhitelistInterface"
+ }
+ },
+ "id": 7919,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "whitelistOtoken",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9826,
+ "src": "4044:45:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address) external"
+ }
+ },
+ "id": 7921,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4044:56:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7922,
+ "nodeType": "ExpressionStatement",
+ "src": "4044:56:6"
+ },
+ {
+ "eventCall": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7924,
+ "name": "newOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7898,
+ "src": "4143:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 7925,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "4166:3:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 7926,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4166:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7927,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7775,
+ "src": "4190:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7928,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7777,
+ "src": "4220:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7929,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7779,
+ "src": "4246:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7930,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7781,
+ "src": "4276:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7931,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7783,
+ "src": "4302:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7932,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7785,
+ "src": "4323:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 7923,
+ "name": "OtokenCreated",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7772,
+ "src": "4116:13:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
+ "typeString": "function (address,address,address,address,address,uint256,uint256,bool)"
+ }
+ },
+ "id": 7933,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4116:223:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 7934,
+ "nodeType": "EmitStatement",
+ "src": "4111:228:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 7935,
+ "name": "newOtoken",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7898,
+ "src": "4357:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 7789,
+ "id": 7936,
+ "nodeType": "Return",
+ "src": "4350:16:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7773,
+ "nodeType": "StructuredDocumentation",
+ "src": "1648:623:6",
+ "text": " @notice create new oTokens\n @dev deploy an eip-1167 minimal proxy with CREATE2 and register it to the whitelist module\n @param _underlyingAsset asset that the option references\n @param _strikeAsset asset that the strike price is denominated in\n @param _collateralAsset asset that is held as collateral against short/written options\n @param _strikePrice strike price with decimals = 18\n @param _expiry expiration timestamp as a unix timestamp\n @param _isPut True if a put option, False if a call option\n @return newOtoken address of the newly created option"
+ },
+ "functionSelector": "c0974630",
+ "id": 7938,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "createOtoken",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7786,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7775,
+ "mutability": "mutable",
+ "name": "_underlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2307:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7774,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2307:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7777,
+ "mutability": "mutable",
+ "name": "_strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2341:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7776,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2341:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7779,
+ "mutability": "mutable",
+ "name": "_collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2371:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7778,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2371:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7781,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2405:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7780,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2405:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7783,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2435:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7782,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2435:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7785,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2460:11:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7784,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "2460:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2297:180:6"
+ },
+ "returnParameters": {
+ "id": 7789,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7788,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7938,
+ "src": "2496:7:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7787,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2496:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2495:9:6"
+ },
+ "scope": 8064,
+ "src": "2276:2097:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7947,
+ "nodeType": "Block",
+ "src": "4558:38:6",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 7944,
+ "name": "otokens",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7734,
+ "src": "4575:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_address_$dyn_storage",
+ "typeString": "address[] storage ref"
+ }
+ },
+ "id": 7945,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "4575:14:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 7943,
+ "id": 7946,
+ "nodeType": "Return",
+ "src": "4568:21:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7939,
+ "nodeType": "StructuredDocumentation",
+ "src": "4379:114:6",
+ "text": " @notice get the total oTokens created by the factory\n @return length of the oTokens array"
+ },
+ "functionSelector": "46e63dc4",
+ "id": 7948,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOtokensLength",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7940,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4523:2:6"
+ },
+ "returnParameters": {
+ "id": 7943,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7942,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7948,
+ "src": "4549:7:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7941,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4549:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "4548:9:6"
+ },
+ "scope": 8064,
+ "src": "4498:98:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 7981,
+ "nodeType": "Block",
+ "src": "5461:155:6",
+ "statements": [
+ {
+ "assignments": [
+ 7967
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 7967,
+ "mutability": "mutable",
+ "name": "id",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7981,
+ "src": "5471:10:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 7966,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "5471:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 7976,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 7969,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7951,
+ "src": "5497:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7970,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7953,
+ "src": "5515:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7971,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7955,
+ "src": "5529:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7972,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7957,
+ "src": "5547:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7973,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7959,
+ "src": "5561:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 7974,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7961,
+ "src": "5570:6:6",
+ "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_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 7968,
+ "name": "_getOptionId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8063,
+ "src": "5484:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_bytes32_$",
+ "typeString": "function (address,address,address,uint256,uint256,bool) pure returns (bytes32)"
+ }
+ },
+ "id": 7975,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5484:93:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5471:106:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "baseExpression": {
+ "argumentTypes": null,
+ "id": 7977,
+ "name": "idToAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7739,
+ "src": "5594:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
+ "typeString": "mapping(bytes32 => address)"
+ }
+ },
+ "id": 7979,
+ "indexExpression": {
+ "argumentTypes": null,
+ "id": 7978,
+ "name": "id",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7967,
+ "src": "5606:2:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "5594:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 7965,
+ "id": 7980,
+ "nodeType": "Return",
+ "src": "5587:22:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7949,
+ "nodeType": "StructuredDocumentation",
+ "src": "4602:623:6",
+ "text": " @notice get the oToken address for an already created oToken, if no oToken has been created with these parameters, it will return address(0)\n @param _underlyingAsset asset that the option references\n @param _strikeAsset asset that the strike price is denominated in\n @param _collateralAsset asset that is held as collateral against short/written options\n @param _strikePrice strike price with decimals = 18\n @param _expiry expiration timestamp as a unix timestamp\n @param _isPut True if a put option, False if a call option\n @return the address of target otoken."
+ },
+ "functionSelector": "11547054",
+ "id": 7982,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getOtoken",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7962,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7951,
+ "mutability": "mutable",
+ "name": "_underlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5258:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7950,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5258:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7953,
+ "mutability": "mutable",
+ "name": "_strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5292:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7952,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5292:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7955,
+ "mutability": "mutable",
+ "name": "_collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5322:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7954,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5322:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7957,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5356:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7956,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5356:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7959,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5386:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7958,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5386:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7961,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5411:11:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7960,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "5411:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5248:180:6"
+ },
+ "returnParameters": {
+ "id": 7965,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7964,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 7982,
+ "src": "5452:7:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7963,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5452:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "5451:9:6"
+ },
+ "scope": 8064,
+ "src": "5230:386:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 8031,
+ "nodeType": "Block",
+ "src": "6551:469:6",
+ "statements": [
+ {
+ "assignments": [
+ 8001
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 8001,
+ "mutability": "mutable",
+ "name": "otokenImpl",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8031,
+ "src": "6561:18:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8000,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6561:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 8007,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8003,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7730,
+ "src": "6603:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 8002,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "6582:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 8004,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6582:33:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 8005,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getOtokenImpl",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9135,
+ "src": "6582:47:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 8006,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6582:49:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6561:70:6"
+ },
+ {
+ "assignments": [
+ 8009
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 8009,
+ "mutability": "mutable",
+ "name": "initializationCalldata",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8031,
+ "src": "6642:35:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 8008,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6642:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 8025,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8013,
+ "name": "otokenImpl",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8001,
+ "src": "6732:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 8012,
+ "name": "OtokenInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9725,
+ "src": "6716:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_OtokenInterface_$9725_$",
+ "typeString": "type(contract OtokenInterface)"
+ }
+ },
+ "id": 8014,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6716:27:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_OtokenInterface_$9725",
+ "typeString": "contract OtokenInterface"
+ }
+ },
+ "id": 8015,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "init",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9695,
+ "src": "6716:32:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
+ "typeString": "function (address,address,address,address,uint256,uint256,bool) external"
+ }
+ },
+ "id": 8016,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "selector",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "6716:41:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8017,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7730,
+ "src": "6771:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8018,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7985,
+ "src": "6796:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8019,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7987,
+ "src": "6826:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8020,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7989,
+ "src": "6852:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8021,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7991,
+ "src": "6882:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8022,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7993,
+ "src": "6908:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8023,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7995,
+ "src": "6929:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 8010,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "6680:3:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 8011,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodeWithSelector",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "6680:22:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes4) pure returns (bytes memory)"
+ }
+ },
+ "id": 8024,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6680:265:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6642:303:6"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8027,
+ "name": "otokenImpl",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8001,
+ "src": "6978:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8028,
+ "name": "initializationCalldata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8009,
+ "src": "6990:22:6",
+ "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": 8026,
+ "name": "_computeAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8150,
+ "src": "6962:15:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$",
+ "typeString": "function (address,bytes memory) view returns (address)"
+ }
+ },
+ "id": 8029,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6962:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 7999,
+ "id": 8030,
+ "nodeType": "Return",
+ "src": "6955:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 7983,
+ "nodeType": "StructuredDocumentation",
+ "src": "5622:680:6",
+ "text": " @notice get the address at which a new oToken with these parameters would be deployed\n @dev return the exact address that will be deployed at with _computeAddress\n @param _underlyingAsset asset that the option references\n @param _strikeAsset asset that the strike price is denominated in\n @param _collateralAsset asset that is held as collateral against short/written options\n @param _strikePrice strike price with decimals = 18\n @param _expiry expiration timestamp as a unix timestamp\n @param _isPut True if a put option, False if a call option\n @return targetAddress the address this oToken would be deployed at"
+ },
+ "functionSelector": "b86b9a64",
+ "id": 8032,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getTargetOtokenAddress",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 7996,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7985,
+ "mutability": "mutable",
+ "name": "_underlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6348:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7984,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6348:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7987,
+ "mutability": "mutable",
+ "name": "_strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6382:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7986,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6382:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7989,
+ "mutability": "mutable",
+ "name": "_collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6412:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7988,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6412:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7991,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6446:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7990,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6446:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7993,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6476:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 7992,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6476:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 7995,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6501:11:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 7994,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "6501:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6338:180:6"
+ },
+ "returnParameters": {
+ "id": 7999,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 7998,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8032,
+ "src": "6542:7:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 7997,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6542:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "6541:9:6"
+ },
+ "scope": 8064,
+ "src": "6307:713:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "body": {
+ "id": 8062,
+ "nodeType": "Block",
+ "src": "7805:174:6",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8053,
+ "name": "_underlyingAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8035,
+ "src": "7878:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8054,
+ "name": "_strikeAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8037,
+ "src": "7896:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8055,
+ "name": "_collateralAsset",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8039,
+ "src": "7910:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8056,
+ "name": "_strikePrice",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8041,
+ "src": "7928:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8057,
+ "name": "_expiry",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8043,
+ "src": "7942:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8058,
+ "name": "_isPut",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8045,
+ "src": "7951:6:6",
+ "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_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 8051,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "7861:3:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 8052,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "7861:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 8059,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7861:97:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 8050,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "7834:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 8060,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7834:138:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "functionReturnParameters": 8049,
+ "id": 8061,
+ "nodeType": "Return",
+ "src": "7815:157:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 8033,
+ "nodeType": "StructuredDocumentation",
+ "src": "7026:540:6",
+ "text": " @dev hash oToken parameters and return a unique option id\n @param _underlyingAsset asset that the option references\n @param _strikeAsset asset that the strike price is denominated in\n @param _collateralAsset asset that is held as collateral against short/written options\n @param _strikePrice strike price with decimals = 18\n @param _expiry expiration timestamp as a unix timestamp\n @param _isPut True if a put option, False if a call option\n @return id the unique id of an oToken"
+ },
+ "id": 8063,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_getOptionId",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 8046,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8035,
+ "mutability": "mutable",
+ "name": "_underlyingAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7602:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8034,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7602:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8037,
+ "mutability": "mutable",
+ "name": "_strikeAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7636:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8036,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7636:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8039,
+ "mutability": "mutable",
+ "name": "_collateralAsset",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7666:24:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8038,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7666:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8041,
+ "mutability": "mutable",
+ "name": "_strikePrice",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7700:20:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 8040,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7700:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8043,
+ "mutability": "mutable",
+ "name": "_expiry",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7730:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 8042,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7730:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8045,
+ "mutability": "mutable",
+ "name": "_isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7755:11:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 8044,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7755:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7592:180:6"
+ },
+ "returnParameters": {
+ "id": 8049,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8048,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8063,
+ "src": "7796:7:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 8047,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "7796:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "7795:9:6"
+ },
+ "scope": 8064,
+ "src": "7571:408:6",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 8065,
+ "src": "661:7320:6"
+ }
+ ],
+ "src": "0:7982:6"
+ },
+ "id": 6
+ },
+ "contracts/core/OtokenSpawner.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/OtokenSpawner.sol",
+ "exportedSymbols": {
+ "OtokenSpawner": [
+ 8151
+ ]
+ },
+ "id": 8152,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 8066,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "43:24:7"
+ },
+ {
+ "absolutePath": "contracts/packages/Spawn.sol",
+ "file": "../packages/Spawn.sol",
+ "id": 8068,
+ "nodeType": "ImportDirective",
+ "scope": 8152,
+ "sourceUnit": 13402,
+ "src": "69:44:7",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 8067,
+ "name": "Spawn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "77:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Create2.sol",
+ "file": "../packages/oz/Create2.sol",
+ "id": 8070,
+ "nodeType": "ImportDirective",
+ "scope": 8152,
+ "sourceUnit": 13728,
+ "src": "114:51:7",
+ "symbolAliases": [
+ {
+ "foreign": {
+ "argumentTypes": null,
+ "id": 8069,
+ "name": "Create2",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": null,
+ "src": "122:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ },
+ "local": null
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [
+ 13401
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 8071,
+ "nodeType": "StructuredDocumentation",
+ "src": "167:318:7",
+ "text": " @title OtokenSpawner\n @author Opyn Team\n @notice This contract spawns and initializes eip-1167 minimal proxies that\n point to existing logic contracts.\n @notice This contract was modified from Spawner.sol\n https://github.com/0age/Spawner/blob/master/contracts/Spawner.sol to fit into OtokenFactory"
+ },
+ "fullyImplemented": true,
+ "id": 8151,
+ "linearizedBaseContracts": [
+ 8151
+ ],
+ "name": "OtokenSpawner",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": true,
+ "id": 8077,
+ "mutability": "constant",
+ "name": "SALT",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8151,
+ "src": "607:42:7",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 8072,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "607:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 8075,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "647:1:7",
+ "subdenomination": null,
+ "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": 8074,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "639:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes32_$",
+ "typeString": "type(bytes32)"
+ },
+ "typeName": {
+ "id": 8073,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "639:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 8076,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "639:10:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 8109,
+ "nodeType": "Block",
+ "src": "1164:356:7",
+ "statements": [
+ {
+ "assignments": [
+ 8088
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 8088,
+ "mutability": "mutable",
+ "name": "initCode",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8109,
+ "src": "1265:21:7",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 8087,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1265:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 8101,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8092,
+ "name": "Spawn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13401,
+ "src": "1324:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Spawn_$13401_$",
+ "typeString": "type(contract Spawn)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_Spawn_$13401_$",
+ "typeString": "type(contract Spawn)"
+ }
+ ],
+ "id": 8091,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -27,
+ "src": "1319:4:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 8093,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1319:11:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_Spawn_$13401",
+ "typeString": "type(contract Spawn)"
+ }
+ },
+ "id": 8094,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "creationCode",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "1319:24:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8097,
+ "name": "logicContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8080,
+ "src": "1368:13:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8098,
+ "name": "initializationCalldata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8082,
+ "src": "1383:22:7",
+ "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": {
+ "argumentTypes": null,
+ "id": 8095,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "1357:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 8096,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encode",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "1357:10:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 8099,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1357:49:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 8089,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "1289:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 8090,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "1289:16:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 8100,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1289:127:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1265:151:7"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 8104,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1495:1:7",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "argumentTypes": null,
+ "id": 8105,
+ "name": "SALT",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8077,
+ "src": "1498:4:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8106,
+ "name": "initCode",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8088,
+ "src": "1504:8:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 8102,
+ "name": "Create2",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13727,
+ "src": "1480:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Create2_$13727_$",
+ "typeString": "type(library Create2)"
+ }
+ },
+ "id": 8103,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "deploy",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 13670,
+ "src": "1480:14:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
+ "typeString": "function (uint256,bytes32,bytes memory) returns (address)"
+ }
+ },
+ "id": 8107,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1480:33:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 8086,
+ "id": 8108,
+ "nodeType": "Return",
+ "src": "1473:40:7"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 8078,
+ "nodeType": "StructuredDocumentation",
+ "src": "656:400:7",
+ "text": " @notice internal function for spawning an eip-1167 minimal proxy using `CREATE2`\n @param logicContract address of the logic contract\n @param initializationCalldata calldata that will be supplied to the `DELEGATECALL`\n from the spawned contract to the logic contract during contract creation\n @return spawnedContract the address of the newly-spawned contract"
+ },
+ "id": 8110,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_spawn",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 8083,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8080,
+ "mutability": "mutable",
+ "name": "logicContract",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8110,
+ "src": "1077:21:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8079,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1077:7:7",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8082,
+ "mutability": "mutable",
+ "name": "initializationCalldata",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8110,
+ "src": "1100:35:7",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 8081,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1100:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1076:60:7"
+ },
+ "returnParameters": {
+ "id": 8086,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8085,
+ "mutability": "mutable",
+ "name": "",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8110,
+ "src": "1155:7:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8084,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1155:7:7",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1154:9:7"
+ },
+ "scope": 8151,
+ "src": "1061:459:7",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 8149,
+ "nodeType": "Block",
+ "src": "2232:445:7",
+ "statements": [
+ {
+ "assignments": [
+ 8121
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 8121,
+ "mutability": "mutable",
+ "name": "initCode",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8149,
+ "src": "2333:21:7",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 8120,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "2333:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 8134,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8125,
+ "name": "Spawn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13401,
+ "src": "2392:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Spawn_$13401_$",
+ "typeString": "type(contract Spawn)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_Spawn_$13401_$",
+ "typeString": "type(contract Spawn)"
+ }
+ ],
+ "id": 8124,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -27,
+ "src": "2387:4:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 8126,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2387:11:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_Spawn_$13401",
+ "typeString": "type(contract Spawn)"
+ }
+ },
+ "id": 8127,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "creationCode",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "2387:24:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8130,
+ "name": "logicContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8113,
+ "src": "2436:13:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8131,
+ "name": "initializationCalldata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8115,
+ "src": "2451:22:7",
+ "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": {
+ "argumentTypes": null,
+ "id": 8128,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "2425:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 8129,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encode",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "2425:10:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 8132,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2425:49:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 8122,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "2357:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 8123,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "2357:16:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 8133,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2357:127:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2333:151:7"
+ },
+ {
+ "assignments": [
+ 8136
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 8136,
+ "mutability": "mutable",
+ "name": "initCodeHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8149,
+ "src": "2566:20:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 8135,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2566:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "id": 8140,
+ "initialValue": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8138,
+ "name": "initCode",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8121,
+ "src": "2599:8:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 8137,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "2589:9:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 8139,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2589:19:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2566:42:7"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 8147,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 8141,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8118,
+ "src": "2619:6:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8144,
+ "name": "SALT",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8077,
+ "src": "2651:4:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "id": 8145,
+ "name": "initCodeHash",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8136,
+ "src": "2657:12:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "expression": {
+ "argumentTypes": null,
+ "id": 8142,
+ "name": "Create2",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13727,
+ "src": "2628:7:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Create2_$13727_$",
+ "typeString": "type(library Create2)"
+ }
+ },
+ "id": 8143,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "computeAddress",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 13690,
+ "src": "2628:22:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32,bytes32) view returns (address)"
+ }
+ },
+ "id": 8146,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2628:42:7",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2619:51:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 8148,
+ "nodeType": "ExpressionStatement",
+ "src": "2619:51:7"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 8111,
+ "nodeType": "StructuredDocumentation",
+ "src": "1526:549:7",
+ "text": " @notice internal view function for finding the address of the standard\n eip-1167 minimal proxy created using `CREATE2` with a given logic contract\n and initialization calldata payload\n @param logicContract address of the logic contract\n @param initializationCalldata calldata that will be supplied to the `DELEGATECALL`\n from the spawned contract to the logic contract during contract creation\n @return target address of the next spawned minimal proxy contract with the\n given parameters."
+ },
+ "id": 8150,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_computeAddress",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 8116,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8113,
+ "mutability": "mutable",
+ "name": "logicContract",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8150,
+ "src": "2105:21:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8112,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2105:7:7",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8115,
+ "mutability": "mutable",
+ "name": "initializationCalldata",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8150,
+ "src": "2128:35:7",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 8114,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "2128:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2104:60:7"
+ },
+ "returnParameters": {
+ "id": 8119,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8118,
+ "mutability": "mutable",
+ "name": "target",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8150,
+ "src": "2212:14:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8117,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2212:7:7",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2211:16:7"
+ },
+ "scope": 8151,
+ "src": "2080:597:7",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 8152,
+ "src": "486:2193:7"
+ }
+ ],
+ "src": "43:2637:7"
+ },
+ "id": 7
+ },
+ "contracts/core/Whitelist.sol": {
+ "ast": {
+ "absolutePath": "contracts/core/Whitelist.sol",
+ "exportedSymbols": {
+ "Whitelist": [
+ 8569
+ ]
+ },
+ "id": 8570,
+ "license": "UNLICENSED",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 8153,
+ "literals": [
+ "solidity",
+ "=",
+ "0.6",
+ ".10"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "39:24:8"
+ },
+ {
+ "absolutePath": "contracts/interfaces/AddressBookInterface.sol",
+ "file": "../interfaces/AddressBookInterface.sol",
+ "id": 8154,
+ "nodeType": "ImportDirective",
+ "scope": 8570,
+ "sourceUnit": 9226,
+ "src": "65:48:8",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "contracts/packages/oz/Ownable.sol",
+ "file": "../packages/oz/Ownable.sol",
+ "id": 8155,
+ "nodeType": "ImportDirective",
+ "scope": 8570,
+ "sourceUnit": 13837,
+ "src": "114:36:8",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "arguments": null,
+ "baseName": {
+ "contractScope": null,
+ "id": 8157,
+ "name": "Ownable",
+ "nodeType": "UserDefinedTypeName",
+ "referencedDeclaration": 13836,
+ "src": "365:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Ownable_$13836",
+ "typeString": "contract Ownable"
+ }
+ },
+ "id": 8158,
+ "nodeType": "InheritanceSpecifier",
+ "src": "365:7:8"
+ }
+ ],
+ "contractDependencies": [
+ 13619,
+ 13836
+ ],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 8156,
+ "nodeType": "StructuredDocumentation",
+ "src": "152:190:8",
+ "text": " @author Opyn Team\n @title Whitelist Module\n @notice The whitelist module keeps track of all valid oToken addresses, product hashes, collateral addresses, and callee addresses."
+ },
+ "fullyImplemented": true,
+ "id": 8569,
+ "linearizedBaseContracts": [
+ 8569,
+ 13836,
+ 13619
+ ],
+ "name": "Whitelist",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "documentation": {
+ "id": 8159,
+ "nodeType": "StructuredDocumentation",
+ "src": "379:38:8",
+ "text": "@notice AddressBook module address"
+ },
+ "functionSelector": "f5887cdd",
+ "id": 8161,
+ "mutability": "mutable",
+ "name": "addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8569,
+ "src": "422:26:8",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8160,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "422:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 8162,
+ "nodeType": "StructuredDocumentation",
+ "src": "454:46:8",
+ "text": "@dev mapping to track whitelisted products"
+ },
+ "id": 8166,
+ "mutability": "mutable",
+ "name": "whitelistedProduct",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8569,
+ "src": "505:52:8",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
+ "typeString": "mapping(bytes32 => bool)"
+ },
+ "typeName": {
+ "id": 8165,
+ "keyType": {
+ "id": 8163,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "513:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "505:24:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
+ "typeString": "mapping(bytes32 => bool)"
+ },
+ "valueType": {
+ "id": 8164,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "524:4:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 8167,
+ "nodeType": "StructuredDocumentation",
+ "src": "563:48:8",
+ "text": "@dev mapping to track whitelisted collateral"
+ },
+ "id": 8171,
+ "mutability": "mutable",
+ "name": "whitelistedCollateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8569,
+ "src": "616:55:8",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "typeName": {
+ "id": 8170,
+ "keyType": {
+ "id": 8168,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "624:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "616:24:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "valueType": {
+ "id": 8169,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "635:4:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 8172,
+ "nodeType": "StructuredDocumentation",
+ "src": "677:45:8",
+ "text": "@dev mapping to track whitelisted oTokens"
+ },
+ "id": 8176,
+ "mutability": "mutable",
+ "name": "whitelistedOtoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8569,
+ "src": "727:51:8",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "typeName": {
+ "id": 8175,
+ "keyType": {
+ "id": 8173,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "735:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "727:24:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "valueType": {
+ "id": 8174,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "746:4:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "documentation": {
+ "id": 8177,
+ "nodeType": "StructuredDocumentation",
+ "src": "784:74:8",
+ "text": "@dev mapping to track whitelisted callee addresses for the call action"
+ },
+ "id": 8181,
+ "mutability": "mutable",
+ "name": "whitelistedCallee",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8569,
+ "src": "863:51:8",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "typeName": {
+ "id": 8180,
+ "keyType": {
+ "id": 8178,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "871:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "863:24:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "valueType": {
+ "id": 8179,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "882:4:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 8201,
+ "nodeType": "Block",
+ "src": "1056:113:8",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 8193,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "id": 8188,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8184,
+ "src": "1074:12:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "hexValue": "30",
+ "id": 8191,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1098:1:8",
+ "subdenomination": null,
+ "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": 8190,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1090:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 8189,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1090:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": null,
+ "typeString": null
+ }
+ }
+ },
+ "id": 8192,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1090:10:8",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "src": "1074:26:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "496e76616c6964206164647265737320626f6f6b",
+ "id": 8194,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1102:22:8",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_07c6f3a2c44494e34f0459954f2820110e85ac1fa08281f50bf018e7ae5d479a",
+ "typeString": "literal_string \"Invalid address book\""
+ },
+ "value": "Invalid address book"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_07c6f3a2c44494e34f0459954f2820110e85ac1fa08281f50bf018e7ae5d479a",
+ "typeString": "literal_string \"Invalid address book\""
+ }
+ ],
+ "id": 8187,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "1066:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 8195,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1066:59:8",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 8196,
+ "nodeType": "ExpressionStatement",
+ "src": "1066:59:8"
+ },
+ {
+ "expression": {
+ "argumentTypes": null,
+ "id": 8199,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "argumentTypes": null,
+ "id": 8197,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8161,
+ "src": "1136:11:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "argumentTypes": null,
+ "id": 8198,
+ "name": "_addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8184,
+ "src": "1150:12:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1136:26:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 8200,
+ "nodeType": "ExpressionStatement",
+ "src": "1136:26:8"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 8182,
+ "nodeType": "StructuredDocumentation",
+ "src": "921:89:8",
+ "text": " @dev constructor\n @param _addressBook AddressBook module address"
+ },
+ "id": 8202,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nodeType": "FunctionDefinition",
+ "overrides": null,
+ "parameters": {
+ "id": 8185,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8184,
+ "mutability": "mutable",
+ "name": "_addressBook",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8202,
+ "src": "1027:20:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8183,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1027:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1026:22:8"
+ },
+ "returnParameters": {
+ "id": 8186,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1056:0:8"
+ },
+ "scope": 8569,
+ "src": "1015:154:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8203,
+ "nodeType": "StructuredDocumentation",
+ "src": "1175:72:8",
+ "text": "@notice emits an event a product is whitelisted by the owner address"
+ },
+ "id": 8215,
+ "name": "ProductWhitelisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8214,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8205,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8215,
+ "src": "1286:19:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 8204,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1286:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8207,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8215,
+ "src": "1315:26:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8206,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1315:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8209,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8215,
+ "src": "1351:22:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8208,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1351:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8211,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8215,
+ "src": "1383:26:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8210,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1383:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8213,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8215,
+ "src": "1419:10:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 8212,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1419:4:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1276:159:8"
+ },
+ "src": "1252:184:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8216,
+ "nodeType": "StructuredDocumentation",
+ "src": "1441:72:8",
+ "text": "@notice emits an event a product is blacklisted by the owner address"
+ },
+ "id": 8228,
+ "name": "ProductBlacklisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8227,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8218,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "productHash",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8228,
+ "src": "1552:19:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 8217,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1552:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8220,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "underlying",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8228,
+ "src": "1581:26:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8219,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1581:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8222,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "strike",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8228,
+ "src": "1617:22:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8221,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1617:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8224,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8228,
+ "src": "1649:26:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8223,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1649:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 8226,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "isPut",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8228,
+ "src": "1685:10:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 8225,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1685:4:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1542:159:8"
+ },
+ "src": "1518:184:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8229,
+ "nodeType": "StructuredDocumentation",
+ "src": "1707:88:8",
+ "text": "@notice emits an event when a collateral address is whitelisted by the owner address"
+ },
+ "id": 8233,
+ "name": "CollateralWhitelisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8232,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8231,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8233,
+ "src": "1828:26:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8230,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1828:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1827:28:8"
+ },
+ "src": "1800:56:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8234,
+ "nodeType": "StructuredDocumentation",
+ "src": "1861:86:8",
+ "text": "@notice emits an event when a collateral address is blacklist by the owner address"
+ },
+ "id": 8238,
+ "name": "CollateralBlacklisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8237,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8236,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "collateral",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8238,
+ "src": "1980:26:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8235,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1980:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "1979:28:8"
+ },
+ "src": "1952:56:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8239,
+ "nodeType": "StructuredDocumentation",
+ "src": "2013:84:8",
+ "text": "@notice emits an event when an oToken is whitelisted by the OtokenFactory module"
+ },
+ "id": 8243,
+ "name": "OtokenWhitelisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8242,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8241,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8243,
+ "src": "2126:22:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8240,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2126:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2125:24:8"
+ },
+ "src": "2102:48:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8244,
+ "nodeType": "StructuredDocumentation",
+ "src": "2155:84:8",
+ "text": "@notice emits an event when an oToken is blacklisted by the OtokenFactory module"
+ },
+ "id": 8248,
+ "name": "OtokenBlacklisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8247,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8246,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "otoken",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8248,
+ "src": "2268:22:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8245,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2268:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2267:24:8"
+ },
+ "src": "2244:48:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8249,
+ "nodeType": "StructuredDocumentation",
+ "src": "2297:84:8",
+ "text": "@notice emits an event when a callee address is whitelisted by the owner address"
+ },
+ "id": 8253,
+ "name": "CalleeWhitelisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8252,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8251,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "_callee",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8253,
+ "src": "2410:23:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8250,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2410:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2409:25:8"
+ },
+ "src": "2386:49:8"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 8254,
+ "nodeType": "StructuredDocumentation",
+ "src": "2440:84:8",
+ "text": "@notice emits an event when a callee address is blacklisted by the owner address"
+ },
+ "id": 8258,
+ "name": "CalleeBlacklisted",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 8257,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 8256,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "_callee",
+ "nodeType": "VariableDeclaration",
+ "overrides": null,
+ "scope": 8258,
+ "src": "2553:23:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8255,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2553:7:8",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": null,
+ "visibility": "internal"
+ }
+ ],
+ "src": "2552:25:8"
+ },
+ "src": "2529:49:8"
+ },
+ {
+ "body": {
+ "id": 8274,
+ "nodeType": "Block",
+ "src": "2686:180:8",
+ "statements": [
+ {
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 8269,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "argumentTypes": null,
+ "expression": {
+ "argumentTypes": null,
+ "id": 8262,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "2717:3:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 8263,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": null,
+ "src": "2717:10:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "argumentTypes": null,
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "argumentTypes": null,
+ "arguments": [
+ {
+ "argumentTypes": null,
+ "id": 8265,
+ "name": "addressBook",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 8161,
+ "src": "2752:11:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 8264,
+ "name": "AddressBookInterface",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 9225,
+ "src": "2731:20:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_AddressBookInterface_$9225_$",
+ "typeString": "type(contract AddressBookInterface)"
+ }
+ },
+ "id": 8266,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2731:33:8",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_AddressBookInterface_$9225",
+ "typeString": "contract AddressBookInterface"
+ }
+ },
+ "id": 8267,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "getOtokenFactory",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 9140,
+ "src": "2731:50:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
+ "typeString": "function () view external returns (address)"
+ }
+ },
+ "id": 8268,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2731:52:8",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2717:66:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "argumentTypes": null,
+ "hexValue": "57686974656c6973743a2053656e646572206973206e6f74204f746f6b656e466163746f7279",
+ "id": 8270,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2797:40:8",
+ "subdenomination": null,
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d2cdd7d779a28dc0fd310b348e85c9203d35e133bbe859f6e12eb8979aa19827",
+ "typeString": "literal_string \"Whitelist: Sender is not OtokenFactory\""
+ },
+ "value": "Whitelist: Sender is not OtokenFactory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_d2cdd7d779a28dc0fd310b348e85c9203d35e133bbe859f6e12eb8979aa19827",
+ "typeString": "literal_string \"Whitelist: Sender is not OtokenFactory\""
+ }
+ ],
+ "id": 8261,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ -18,
+ -18
+ ],
+ "referencedDeclaration": -18,
+ "src": "2696:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t