{
  "contractName": "MMInstantiatorTestAux",
  "sourceName": "contracts/test/MMInstantiatorTestAux.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "FinishedProofs",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "FinishedReplay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        }
      ],
      "name": "MemoryCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_wasRead",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_position",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes8",
          "name": "_value",
          "type": "bytes8"
        }
      ],
      "name": "ValueProved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_position",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes8",
          "name": "_value",
          "type": "bytes8"
        }
      ],
      "name": "ValueRead",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_position",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes8",
          "name": "_value",
          "type": "bytes8"
        }
      ],
      "name": "ValueWritten",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "currentIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "finishProofPhase",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "finishReplayPhase",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getCurrentState",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_timeToStartMachine",
          "type": "uint256"
        }
      ],
      "name": "getCurrentStateDeadline",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_timeToStartMachine",
          "type": "uint256"
        }
      ],
      "name": "getMaxInstanceDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getRWArrays",
      "outputs": [
        {
          "internalType": "uint64[]",
          "name": "",
          "type": "uint64[]"
        },
        {
          "internalType": "bytes8[]",
          "name": "",
          "type": "bytes8[]"
        },
        {
          "internalType": "bool[]",
          "name": "",
          "type": "bool[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_numberSubmitted",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_currentState",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSubInstances",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "initialHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        }
      ],
      "name": "instantiate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isConcerned",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "newHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_position",
          "type": "uint64"
        },
        {
          "internalType": "bytes8",
          "name": "_value",
          "type": "bytes8"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        }
      ],
      "name": "proveRead",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_position",
          "type": "uint64"
        },
        {
          "internalType": "bytes8",
          "name": "_oldValue",
          "type": "bytes8"
        },
        {
          "internalType": "bytes8",
          "name": "_newValue",
          "type": "bytes8"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        }
      ],
      "name": "proveWrite",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "provider",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "newHash",
          "type": "bytes32"
        }
      ],
      "name": "setNewHashAtIndex",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "enum MMInterface.state",
          "name": "toState",
          "type": "uint8"
        }
      ],
      "name": "setState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsFinishedReplay",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsWaitingProofs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsWaitingReplay",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000805534801561001457600080fd5b50611de3806100246000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806384dfd44d116100c3578063ac448b161161007c578063ac448b161461049e578063ade5f41714610567578063c526656c14610584578063d53b22e914610649578063db1de4191461066c578063f154f91d146106955761014d565b806384dfd44d146103135780638a05e47814610336578063906458401461036c578063965ff5bc1461038957806396f429ba146103af578063a9c7a1e6146103cc5761014d565b806343d4b78b1161011557806343d4b78b1461020557806352cc70c6146102225780635748c1301461025b57806373df1612146102785780637d036b0d146102d957806382afd23b146102f65761014d565b806301ff62ab146101525780631c5d3c601461019257806326987b60146101af5780633d46b819146101c95780633ed5d456146101e6575b600080fd5b61017e6004803603604081101561016857600080fd5b50803590602001356001600160a01b0316610790565b604080519115158252519081900360200190f35b61017e600480360360208110156101a857600080fd5b50356107b4565b6101b7610828565b60408051918252519081900360200190f35b6101b7600480360360208110156101df57600080fd5b503561082e565b610203600480360360208110156101fc57600080fd5b50356108d4565b005b61017e6004803603602081101561021b57600080fd5b5035610a55565b61023f6004803603602081101561023857600080fd5b5035610aa3565b604080516001600160a01b039092168252519081900360200190f35b6101b76004803603602081101561027157600080fd5b5035610b0a565b6102a46004803603604081101561028e57600080fd5b50803590602001356001600160a01b0316610c52565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b610203600480360360208110156102ef57600080fd5b5035610dd5565b61017e6004803603602081101561030c57600080fd5b5035610f4e565b6101b76004803603604081101561032957600080fd5b5080359060200135610f63565b6101b76004803603606081101561034c57600080fd5b506001600160a01b03813581169160208101359091169060400135610f9f565b6101b76004803603602081101561038257600080fd5b503561105c565b6102036004803603604081101561039f57600080fd5b508035906020013560ff166110bb565b61017e600480360360208110156103c557600080fd5b50356110ec565b610203600480360360a08110156103e257600080fd5b8135916001600160401b03602082013516916001600160c01b0319604083013581169260608101359091169181019060a08101608082013564010000000081111561042c57600080fd5b82018360208201111561043e57600080fd5b8035906020019184602083028401116401000000008311171561046057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061113a945050505050565b610203600480360360808110156104b457600080fd5b8135916001600160401b03602082013516916001600160c01b031960408301351691908101906080810160608201356401000000008111156104f557600080fd5b82018360208201111561050757600080fd5b8035906020019184602083028401116401000000008311171561052957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061155d945050505050565b6101b76004803603602081101561057d57600080fd5b50356118b5565b6105b06004803603604081101561059a57600080fd5b50803590602001356001600160a01b0316611913565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156105f45781810151838201526020016105dc565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561063357818101518382015260200161061b565b5050505090500194505050505060405180910390f35b6102036004803603604081101561065f57600080fd5b508035906020013561192e565b6101b76004803603606081101561068257600080fd5b5080359060208101359060400135611945565b6106b2600480360360208110156106ab57600080fd5b50356119b5565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156106fa5781810151838201526020016106e2565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610739578181015183820152602001610721565b50505050905001848103825285818151815260200191508051906020019060200280838360005b83811015610778578181015183820152602001610760565b50505050905001965050505050505060405180910390f35b600091825260036020526040909120600101546001600160a01b0391821691161490565b60008180600054116107fb576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60005b60008481526003602052604090206005015460ff16600281111561081e57fe5b1491505b50919050565b60005481565b6000818060005411610875576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b61087e81610f4e565b6108c0576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b505060009081526002602052604090205490565b808060005411610919576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000828152600360205260409020546001600160a01b0316338114610980576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b6000838152600260205260409020805460010190558261099f81610a55565b6109da5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d6b6023913960400191505060405180910390fd5b60008481526003602052604081206109f791600490910190611c25565b6000848152600360205260409020600501805460ff19166002179055610a1c84611bab565b6040805185815290517feac25e5c6b8f91fcaaec2cbaed6317b8403630d1f793fc32c10fa4731a464e879181900360200190a150505050565b6000818060005411610a9c576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60016107fe565b6000818060005411610aea576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b50506000908152600360205260409020600101546001600160a01b031690565b6000818060005411610b51576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60008381526003602052604081206005015460ff166002811115610b7157fe5b1415610b8f576c57616974696e6750726f6f667360981b9150610822565b600160008481526003602052604090206005015460ff166002811115610bb157fe5b1415610bcf576c57616974696e675265706c617960981b9150610822565b600260008481526003602052604090206005015460ff166002811115610bf157fe5b1415610c10576d46696e69736865645265706c617960901b9150610822565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000806000806000868060005411610c9f576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b610ca7611c46565b6000898152600360208181526040808420815160c08101835281546001600160a01b039081168252600183015416818501526002820154818401529381015460608501526004810180548351818602810186019094528084529495919460808701949192909184015b82821015610d71576000848152602090819020604080516060810182529185015460ff81161515835261010081046001600160401b031683850152600160481b900460c01b6001600160c01b03191690820152825260019092019101610d10565b50505090825250600582015460209091019060ff166002811115610d9157fe5b6002811115610d9c57fe5b815250509050806020015181604001518260600151836080015151610dc08d610b0a565b939d929c50909a509850909650945050505050565b808060005411610e1a576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000828152600360205260409020600101546001600160a01b0316338114610e84576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260026020526040812080546001019055839060008581526003602052604090206005015460ff166002811115610ebb57fe5b14610ef75760405162461bcd60e51b815260040180806020018281038252603a815260200180611cfe603a913960400191505060405180910390fd5b600084815260036020908152604091829020600501805460ff19166001179055815186815291517f0b1229d47b7ccd1dde07b4148a6c9336fd9d5fb57cca980e709576e96ae600ed9281900390910190a150505050565b60009081526001602052604090205460ff1690565b600080610f7260008585611bce565b90506000610f8260018686611bce565b90506000610f9260008787611bce565b9190920101949350505050565b60008054815260036020818152604080842080546001600160a01b038981166001600160a01b0319928316178355600183018054918a16919092161790556002810186905592830185905560058301805460ff191690558354815190815291820185905280517f9d7a7145d65060279d0bc06f7f03a791000bbaa9b8a8e75c3c10e2d24348791b9281900390910190a150506000805481526001602081905260408220805460ff19168217905581549081019091555b9392505050565b60008180600054116110a3576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b50506000908152600360208190526040909120015490565b6000828152600360205260409020600501805482919060ff191660018360028111156110e357fe5b02179055505050565b6000818060005411611133576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60026107fe565b84806000541161117f576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000868152600360205260409020600101546001600160a01b03163381146111e9576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600087815260026020526040812080546001019055879060008981526003602052604090206005015460ff16600281111561122057fe5b1461125c5760405162461bcd60e51b8152600401808060200182810382526034815260200180611ca66034913960400191505060405180910390fd5b600360008981526020019081526020016000206003015473__$c7dbd794b8c7b5c2028db781007df1176e$__638492d93b8989886040518463ffffffff1660e01b815260040180846001600160401b03168152602001836001600160c01b031916815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156112fe5781810151838201526020016112e6565b5050505090500194505050505060206040518083038186803b15801561132357600080fd5b505af4158015611337573d6000803e3d6000fd5b505050506040513d602081101561134d57600080fd5b50511461138b5760405162461bcd60e51b8152600401808060200182810382526024815260200180611cda6024913960400191505060405180910390fd5b604051638492d93b60e01b81526001600160401b038816600482019081526001600160c01b03198716602483015260606044830190815286516064840152865173__$c7dbd794b8c7b5c2028db781007df1176e$__93638492d93b938c938b938b93608401906020808601910280838360005b838110156114165781810151838201526020016113fe565b5050505090500194505050505060206040518083038186803b15801561143b57600080fd5b505af415801561144f573d6000803e3d6000fd5b505050506040513d602081101561146557600080fd5b50516000898152600360208181526040808420928301949094558351606080820186528482526001600160401b03808e168385018181526001600160c01b03198e16858a0181815260049098018054600181018255908a52878a209651960180549251985160c01c600160481b0267ffffffffffffffff60481b19999095166101000268ffffffffffffffff001997151560ff19909416939093179690961691909117969096169190911790925585518e815292830194909452818501529182015290517f912a59309f29407977c171115122b2599e36be67312d6366767f7dbeb3d831ce9181900360800190a15050505050505050565b8380600054116115a2576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000858152600360205260409020600101546001600160a01b031633811461160c576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600086815260026020526040812080546001019055869060008881526003602052604090206005015460ff16600281111561164357fe5b1461167f5760405162461bcd60e51b8152600401808060200182810382526033815260200180611d386033913960400191505060405180910390fd5b600360008881526020019081526020016000206003015473__$c7dbd794b8c7b5c2028db781007df1176e$__638492d93b8888886040518463ffffffff1660e01b815260040180846001600160401b03168152602001836001600160c01b031916815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611721578181015183820152602001611709565b5050505090500194505050505060206040518083038186803b15801561174657600080fd5b505af415801561175a573d6000803e3d6000fd5b505050506040513d602081101561177057600080fd5b5051146117c4576040805162461bcd60e51b815260206004820152601b60248201527f4d65726b6c652070726f6f6620646f6573206e6f74206d617463680000000000604482015290519081900360640190fd5b600087815260036020908152604080832081516060808201845260018083526001600160401b03808e168488018181526001600160c01b03198f16868901818152600490980180548087018255908c529a8a9020965196909a0180549151975160c01c600160481b0267ffffffffffffffff60481b19989094166101000268ffffffffffffffff001997151560ff19909316929092179690961617959095161790925583518d8152948501919091528383019190915282019290925290517f912a59309f29407977c171115122b2599e36be67312d6366767f7dbeb3d831ce9181900360800190a150505050505050565b60008180600054116118fc576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b505060009081526003602052604090206002015490565b50506040805160008082526020820190815281830190925291565b600091825260036020819052604090922090910155565b600083806000541161198c576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000858152600360205260409020600501546119ac9060ff168585611bce565b95945050505050565b60008181526003602052604090206004018054606091829182919082816001600160401b03811180156119e757600080fd5b50604051908082528060200260200182016040528015611a11578160200160208202803683370190505b5090506060826001600160401b0381118015611a2c57600080fd5b50604051908082528060200260200182016040528015611a56578160200160208202803683370190505b5090506060836001600160401b0381118015611a7157600080fd5b50604051908082528060200260200182016040528015611a9b578160200160208202803683370190505b50905060005b84811015611b9b57858181548110611ab557fe5b9060005260206000200160000160019054906101000a90046001600160401b0316848281518110611ae257fe5b60200260200101906001600160401b031690816001600160401b031681525050858181548110611b0e57fe5b9060005260206000200160000160099054906101000a900460c01b838281518110611b3557fe5b60200260200101906001600160c01b03191690816001600160c01b03191681525050858181548110611b6357fe5b600091825260209091200154825160ff90911690839083908110611b8357fe5b91151560209283029190910190910152600101611aa1565b5091989097509095509350505050565b6000908152600160209081526040808320805460ff191690556002909152812055565b600080846002811115611bdd57fe5b1415611bef5750600282028101611055565b6001846002811115611bfd57fe5b1415611c0a575081611055565b6002846002811115611c1857fe5b1415610c10575081611055565b5080546000825590600052602060002090810190611c439190611c78565b50565b6040805160c081018252600080825260208201819052918101829052606080820183905260808201529060a082015290565b5b80821115611ca157805470ffffffffffffffffffffffffffffffffff19168155600101611c79565b509056fe43757272656e745374617465206973206e6f742057616974696e6750726f6f66732c2063616e6e6f742070726f766557726974654d65726b6c652070726f6f66206f6620777269746520646f6573206e6f74206d6174636843757272656e745374617465206973206e6f742057616974696e6750726f6f66732c2063616e6e6f742066696e69736850726f6f66506861736543757272656e745374617465206973206e6f742057616974696e6750726f6f66732c2063616e6e6f742070726f7665526561645374617465206f66204d4d2073686f756c642062652057616974696e675265706c6179496e646578206e6f7420696e7374616e74696174656400000000000000000000a26469706673582212200e152c5c9b29a883462b536d2a933e8c76afa224326da3e02ac522e51b3bc6bc64736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806384dfd44d116100c3578063ac448b161161007c578063ac448b161461049e578063ade5f41714610567578063c526656c14610584578063d53b22e914610649578063db1de4191461066c578063f154f91d146106955761014d565b806384dfd44d146103135780638a05e47814610336578063906458401461036c578063965ff5bc1461038957806396f429ba146103af578063a9c7a1e6146103cc5761014d565b806343d4b78b1161011557806343d4b78b1461020557806352cc70c6146102225780635748c1301461025b57806373df1612146102785780637d036b0d146102d957806382afd23b146102f65761014d565b806301ff62ab146101525780631c5d3c601461019257806326987b60146101af5780633d46b819146101c95780633ed5d456146101e6575b600080fd5b61017e6004803603604081101561016857600080fd5b50803590602001356001600160a01b0316610790565b604080519115158252519081900360200190f35b61017e600480360360208110156101a857600080fd5b50356107b4565b6101b7610828565b60408051918252519081900360200190f35b6101b7600480360360208110156101df57600080fd5b503561082e565b610203600480360360208110156101fc57600080fd5b50356108d4565b005b61017e6004803603602081101561021b57600080fd5b5035610a55565b61023f6004803603602081101561023857600080fd5b5035610aa3565b604080516001600160a01b039092168252519081900360200190f35b6101b76004803603602081101561027157600080fd5b5035610b0a565b6102a46004803603604081101561028e57600080fd5b50803590602001356001600160a01b0316610c52565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b610203600480360360208110156102ef57600080fd5b5035610dd5565b61017e6004803603602081101561030c57600080fd5b5035610f4e565b6101b76004803603604081101561032957600080fd5b5080359060200135610f63565b6101b76004803603606081101561034c57600080fd5b506001600160a01b03813581169160208101359091169060400135610f9f565b6101b76004803603602081101561038257600080fd5b503561105c565b6102036004803603604081101561039f57600080fd5b508035906020013560ff166110bb565b61017e600480360360208110156103c557600080fd5b50356110ec565b610203600480360360a08110156103e257600080fd5b8135916001600160401b03602082013516916001600160c01b0319604083013581169260608101359091169181019060a08101608082013564010000000081111561042c57600080fd5b82018360208201111561043e57600080fd5b8035906020019184602083028401116401000000008311171561046057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061113a945050505050565b610203600480360360808110156104b457600080fd5b8135916001600160401b03602082013516916001600160c01b031960408301351691908101906080810160608201356401000000008111156104f557600080fd5b82018360208201111561050757600080fd5b8035906020019184602083028401116401000000008311171561052957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061155d945050505050565b6101b76004803603602081101561057d57600080fd5b50356118b5565b6105b06004803603604081101561059a57600080fd5b50803590602001356001600160a01b0316611913565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156105f45781810151838201526020016105dc565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561063357818101518382015260200161061b565b5050505090500194505050505060405180910390f35b6102036004803603604081101561065f57600080fd5b508035906020013561192e565b6101b76004803603606081101561068257600080fd5b5080359060208101359060400135611945565b6106b2600480360360208110156106ab57600080fd5b50356119b5565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156106fa5781810151838201526020016106e2565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610739578181015183820152602001610721565b50505050905001848103825285818151815260200191508051906020019060200280838360005b83811015610778578181015183820152602001610760565b50505050905001965050505050505060405180910390f35b600091825260036020526040909120600101546001600160a01b0391821691161490565b60008180600054116107fb576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60005b60008481526003602052604090206005015460ff16600281111561081e57fe5b1491505b50919050565b60005481565b6000818060005411610875576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b61087e81610f4e565b6108c0576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b505060009081526002602052604090205490565b808060005411610919576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000828152600360205260409020546001600160a01b0316338114610980576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b6000838152600260205260409020805460010190558261099f81610a55565b6109da5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d6b6023913960400191505060405180910390fd5b60008481526003602052604081206109f791600490910190611c25565b6000848152600360205260409020600501805460ff19166002179055610a1c84611bab565b6040805185815290517feac25e5c6b8f91fcaaec2cbaed6317b8403630d1f793fc32c10fa4731a464e879181900360200190a150505050565b6000818060005411610a9c576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60016107fe565b6000818060005411610aea576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b50506000908152600360205260409020600101546001600160a01b031690565b6000818060005411610b51576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60008381526003602052604081206005015460ff166002811115610b7157fe5b1415610b8f576c57616974696e6750726f6f667360981b9150610822565b600160008481526003602052604090206005015460ff166002811115610bb157fe5b1415610bcf576c57616974696e675265706c617960981b9150610822565b600260008481526003602052604090206005015460ff166002811115610bf157fe5b1415610c10576d46696e69736865645265706c617960901b9150610822565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000806000806000868060005411610c9f576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b610ca7611c46565b6000898152600360208181526040808420815160c08101835281546001600160a01b039081168252600183015416818501526002820154818401529381015460608501526004810180548351818602810186019094528084529495919460808701949192909184015b82821015610d71576000848152602090819020604080516060810182529185015460ff81161515835261010081046001600160401b031683850152600160481b900460c01b6001600160c01b03191690820152825260019092019101610d10565b50505090825250600582015460209091019060ff166002811115610d9157fe5b6002811115610d9c57fe5b815250509050806020015181604001518260600151836080015151610dc08d610b0a565b939d929c50909a509850909650945050505050565b808060005411610e1a576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000828152600360205260409020600101546001600160a01b0316338114610e84576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260026020526040812080546001019055839060008581526003602052604090206005015460ff166002811115610ebb57fe5b14610ef75760405162461bcd60e51b815260040180806020018281038252603a815260200180611cfe603a913960400191505060405180910390fd5b600084815260036020908152604091829020600501805460ff19166001179055815186815291517f0b1229d47b7ccd1dde07b4148a6c9336fd9d5fb57cca980e709576e96ae600ed9281900390910190a150505050565b60009081526001602052604090205460ff1690565b600080610f7260008585611bce565b90506000610f8260018686611bce565b90506000610f9260008787611bce565b9190920101949350505050565b60008054815260036020818152604080842080546001600160a01b038981166001600160a01b0319928316178355600183018054918a16919092161790556002810186905592830185905560058301805460ff191690558354815190815291820185905280517f9d7a7145d65060279d0bc06f7f03a791000bbaa9b8a8e75c3c10e2d24348791b9281900390910190a150506000805481526001602081905260408220805460ff19168217905581549081019091555b9392505050565b60008180600054116110a3576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b50506000908152600360208190526040909120015490565b6000828152600360205260409020600501805482919060ff191660018360028111156110e357fe5b02179055505050565b6000818060005411611133576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b60026107fe565b84806000541161117f576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000868152600360205260409020600101546001600160a01b03163381146111e9576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600087815260026020526040812080546001019055879060008981526003602052604090206005015460ff16600281111561122057fe5b1461125c5760405162461bcd60e51b8152600401808060200182810382526034815260200180611ca66034913960400191505060405180910390fd5b600360008981526020019081526020016000206003015473__$c7dbd794b8c7b5c2028db781007df1176e$__638492d93b8989886040518463ffffffff1660e01b815260040180846001600160401b03168152602001836001600160c01b031916815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156112fe5781810151838201526020016112e6565b5050505090500194505050505060206040518083038186803b15801561132357600080fd5b505af4158015611337573d6000803e3d6000fd5b505050506040513d602081101561134d57600080fd5b50511461138b5760405162461bcd60e51b8152600401808060200182810382526024815260200180611cda6024913960400191505060405180910390fd5b604051638492d93b60e01b81526001600160401b038816600482019081526001600160c01b03198716602483015260606044830190815286516064840152865173__$c7dbd794b8c7b5c2028db781007df1176e$__93638492d93b938c938b938b93608401906020808601910280838360005b838110156114165781810151838201526020016113fe565b5050505090500194505050505060206040518083038186803b15801561143b57600080fd5b505af415801561144f573d6000803e3d6000fd5b505050506040513d602081101561146557600080fd5b50516000898152600360208181526040808420928301949094558351606080820186528482526001600160401b03808e168385018181526001600160c01b03198e16858a0181815260049098018054600181018255908a52878a209651960180549251985160c01c600160481b0267ffffffffffffffff60481b19999095166101000268ffffffffffffffff001997151560ff19909416939093179690961691909117969096169190911790925585518e815292830194909452818501529182015290517f912a59309f29407977c171115122b2599e36be67312d6366767f7dbeb3d831ce9181900360800190a15050505050505050565b8380600054116115a2576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000858152600360205260409020600101546001600160a01b031633811461160c576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600086815260026020526040812080546001019055869060008881526003602052604090206005015460ff16600281111561164357fe5b1461167f5760405162461bcd60e51b8152600401808060200182810382526033815260200180611d386033913960400191505060405180910390fd5b600360008881526020019081526020016000206003015473__$c7dbd794b8c7b5c2028db781007df1176e$__638492d93b8888886040518463ffffffff1660e01b815260040180846001600160401b03168152602001836001600160c01b031916815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611721578181015183820152602001611709565b5050505090500194505050505060206040518083038186803b15801561174657600080fd5b505af415801561175a573d6000803e3d6000fd5b505050506040513d602081101561177057600080fd5b5051146117c4576040805162461bcd60e51b815260206004820152601b60248201527f4d65726b6c652070726f6f6620646f6573206e6f74206d617463680000000000604482015290519081900360640190fd5b600087815260036020908152604080832081516060808201845260018083526001600160401b03808e168488018181526001600160c01b03198f16868901818152600490980180548087018255908c529a8a9020965196909a0180549151975160c01c600160481b0267ffffffffffffffff60481b19989094166101000268ffffffffffffffff001997151560ff19909316929092179690961617959095161790925583518d8152948501919091528383019190915282019290925290517f912a59309f29407977c171115122b2599e36be67312d6366767f7dbeb3d831ce9181900360800190a150505050505050565b60008180600054116118fc576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b505060009081526003602052604090206002015490565b50506040805160008082526020820190815281830190925291565b600091825260036020819052604090922090910155565b600083806000541161198c576040805162461bcd60e51b81526020600482015260166024820152600080516020611d8e833981519152604482015290519081900360640190fd5b6000858152600360205260409020600501546119ac9060ff168585611bce565b95945050505050565b60008181526003602052604090206004018054606091829182919082816001600160401b03811180156119e757600080fd5b50604051908082528060200260200182016040528015611a11578160200160208202803683370190505b5090506060826001600160401b0381118015611a2c57600080fd5b50604051908082528060200260200182016040528015611a56578160200160208202803683370190505b5090506060836001600160401b0381118015611a7157600080fd5b50604051908082528060200260200182016040528015611a9b578160200160208202803683370190505b50905060005b84811015611b9b57858181548110611ab557fe5b9060005260206000200160000160019054906101000a90046001600160401b0316848281518110611ae257fe5b60200260200101906001600160401b031690816001600160401b031681525050858181548110611b0e57fe5b9060005260206000200160000160099054906101000a900460c01b838281518110611b3557fe5b60200260200101906001600160c01b03191690816001600160c01b03191681525050858181548110611b6357fe5b600091825260209091200154825160ff90911690839083908110611b8357fe5b91151560209283029190910190910152600101611aa1565b5091989097509095509350505050565b6000908152600160209081526040808320805460ff191690556002909152812055565b600080846002811115611bdd57fe5b1415611bef5750600282028101611055565b6001846002811115611bfd57fe5b1415611c0a575081611055565b6002846002811115611c1857fe5b1415610c10575081611055565b5080546000825590600052602060002090810190611c439190611c78565b50565b6040805160c081018252600080825260208201819052918101829052606080820183905260808201529060a082015290565b5b80821115611ca157805470ffffffffffffffffffffffffffffffffff19168155600101611c79565b509056fe43757272656e745374617465206973206e6f742057616974696e6750726f6f66732c2063616e6e6f742070726f766557726974654d65726b6c652070726f6f66206f6620777269746520646f6573206e6f74206d6174636843757272656e745374617465206973206e6f742057616974696e6750726f6f66732c2063616e6e6f742066696e69736850726f6f66506861736543757272656e745374617465206973206e6f742057616974696e6750726f6f66732c2063616e6e6f742070726f7665526561645374617465206f66204d4d2073686f756c642062652057616974696e675265706c6179496e646578206e6f7420696e7374616e74696174656400000000000000000000a26469706673582212200e152c5c9b29a883462b536d2a933e8c76afa224326da3e02ac522e51b3bc6bc64736f6c63430007040033",
  "linkReferences": {
    "@cartesi/util/contracts/Merkle.sol": {
      "Merkle": [
        {
          "length": 20,
          "start": 4761
        },
        {
          "length": 20,
          "start": 5105
        },
        {
          "length": 20,
          "start": 5820
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "@cartesi/util/contracts/Merkle.sol": {
      "Merkle": [
        {
          "length": 20,
          "start": 4725
        },
        {
          "length": 20,
          "start": 5069
        },
        {
          "length": 20,
          "start": 5784
        }
      ]
    }
  },
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getMaxInstanceDuration(uint256,uint256)": {
        "params": {
          "_timeToStartMachine": "time to build the machine for the first time"
        }
      },
      "instantiate(address,address,bytes32)": {
        "params": {
          "_initialHash": "hash before divergence, in which both client and provider agree.",
          "_provider": "address that will provide memory values/proofs."
        },
        "returns": {
          "_0": "MemoryManager index."
        }
      },
      "proveWrite(uint256,uint64,bytes8,bytes8,bytes32[])": {
        "params": {
          "_newValue": "to be written",
          "_oldValue": "before write",
          "_position": "to be written",
          "proof": "The proof that the old value was correct"
        }
      }
    },
    "version": 1
  },
  "evm": {
    "bytecode": {
      "generatedSources": [],
      "linkReferences": {
        "@cartesi/util/contracts/Merkle.sol": {
          "Merkle": [
            {
              "length": 20,
              "start": 4761
            },
            {
              "length": 20,
              "start": 5105
            },
            {
              "length": 20,
              "start": 5820
            }
          ]
        }
      },
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DE3 DUP1 PUSH2 0x24 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 0x84DFD44D GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xAC448B16 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xAC448B16 EQ PUSH2 0x49E JUMPI DUP1 PUSH4 0xADE5F417 EQ PUSH2 0x567 JUMPI DUP1 PUSH4 0xC526656C EQ PUSH2 0x584 JUMPI DUP1 PUSH4 0xD53B22E9 EQ PUSH2 0x649 JUMPI DUP1 PUSH4 0xDB1DE419 EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0xF154F91D EQ PUSH2 0x695 JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x84DFD44D EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x8A05E478 EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x90645840 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x965FF5BC EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x96F429BA EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0xA9C7A1E6 EQ PUSH2 0x3CC JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x43D4B78B GT PUSH2 0x115 JUMPI DUP1 PUSH4 0x43D4B78B EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x52CC70C6 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x5748C130 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x73DF1612 EQ PUSH2 0x278 JUMPI DUP1 PUSH4 0x7D036B0D EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x82AFD23B EQ PUSH2 0x2F6 JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x1FF62AB EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0x1C5D3C60 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0x26987B60 EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x3D46B819 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x3ED5D456 EQ PUSH2 0x1E6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x168 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x790 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x1B7 PUSH2 0x828 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x82E JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x8D4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x23F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xAA3 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 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB0A JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP5 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF4E JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xF63 JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x34C 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 0xF9F JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x105C JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xFF AND PUSH2 0x10BB JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10EC JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x3E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43E 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 0x460 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 0x113A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x507 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 0x529 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 0x155D SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x18B5 JUMP JUMPDEST PUSH2 0x5B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x59A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1913 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5F4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5DC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x633 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x61B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x65F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x192E JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1945 JUMP JUMPDEST PUSH2 0x6B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x19B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6FA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6E2 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x739 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x721 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP3 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x778 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x760 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x7FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x81E JUMPI INVALID JUMPDEST EQ SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x875 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x87E DUP2 PUSH2 0xF4E JUMP JUMPDEST PUSH2 0x8C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x496E64657820696E616374697665 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x919 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x980 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP3 PUSH2 0x99F DUP2 PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x9DA JUMPI 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 0x1D6B PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x9F7 SWAP2 PUSH1 0x4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1C25 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH2 0xA1C DUP5 PUSH2 0x1BAB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xEAC25E5C6B8F91FCAAEC2CBAED6317B8403630D1F793FC32C10FA4731A464E87 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xA9C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 PUSH2 0x7FE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xAEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xB51 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xB71 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB8F JUMPI PUSH13 0x57616974696E6750726F6F6673 PUSH1 0x98 SHL SWAP2 POP PUSH2 0x822 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xBB1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBCF JUMPI PUSH13 0x57616974696E675265706C6179 PUSH1 0x98 SHL SWAP2 POP PUSH2 0x822 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xBF1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC10 JUMPI PUSH14 0x46696E69736865645265706C6179 PUSH1 0x90 SHL SWAP2 POP PUSH2 0x822 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x556E7265636F676E697A6564207374617465 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xC9F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xCA7 PUSH2 0x1C46 JUMP JUMPDEST PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP2 MLOAD PUSH1 0xC0 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD AND DUP2 DUP6 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP2 DUP5 ADD MSTORE SWAP4 DUP2 ADD SLOAD PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD DUP1 SLOAD DUP4 MLOAD DUP2 DUP7 MUL DUP2 ADD DUP7 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP5 SWAP6 SWAP2 SWAP5 PUSH1 0x80 DUP8 ADD SWAP5 SWAP2 SWAP3 SWAP1 SWAP2 DUP5 ADD JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0xD71 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE SWAP2 DUP6 ADD SLOAD PUSH1 0xFF DUP2 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP4 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x48 SHL SWAP1 DIV PUSH1 0xC0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND SWAP1 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0xD10 JUMP JUMPDEST POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xD91 JUMPI INVALID JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xD9C JUMPI INVALID JUMPDEST DUP2 MSTORE POP POP SWAP1 POP DUP1 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD DUP4 PUSH1 0x80 ADD MLOAD MLOAD PUSH2 0xDC0 DUP14 PUSH2 0xB0A JUMP JUMPDEST SWAP4 SWAP14 SWAP3 SWAP13 POP SWAP1 SWAP11 POP SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xE1A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0xE84 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP4 SWAP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xEBB JUMPI INVALID JUMPDEST EQ PUSH2 0xEF7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1CFE PUSH1 0x3A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xB1229D47B7CCD1DDE07B4148A6C9336FD9D5FB57CCA980E709576E96AE600ED SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF72 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1BCE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF82 PUSH1 0x1 DUP7 DUP7 PUSH2 0x1BCE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF92 PUSH1 0x0 DUP8 DUP8 PUSH2 0x1BCE JUMP JUMPDEST SWAP2 SWAP1 SWAP3 ADD ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP4 SSTORE PUSH1 0x1 DUP4 ADD DUP1 SLOAD SWAP2 DUP11 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP7 SWAP1 SSTORE SWAP3 DUP4 ADD DUP6 SWAP1 SSTORE PUSH1 0x5 DUP4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP4 SLOAD DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP2 DUP3 ADD DUP6 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x9D7A7145D65060279D0BC06F7F03A791000BBAA9B8A8E75C3C10E2D24348791B SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP3 OR SWAP1 SSTORE DUP2 SLOAD SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x10A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD DUP1 SLOAD DUP3 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10E3 JUMPI INVALID JUMPDEST MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1133 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH2 0x7FE JUMP JUMPDEST DUP5 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x117F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP7 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x11E9 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP8 SWAP1 PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1220 JUMPI INVALID JUMPDEST EQ PUSH2 0x125C JUMPI 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 0x1CA6 PUSH1 0x34 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH20 0x0 PUSH4 0x8492D93B DUP10 DUP10 DUP9 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12FE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x12E6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1337 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 0x134D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD EQ PUSH2 0x138B JUMPI 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 0x1CDA PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8492D93B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP9 AND PUSH1 0x4 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x44 DUP4 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0x64 DUP5 ADD MSTORE DUP7 MLOAD PUSH20 0x0 SWAP4 PUSH4 0x8492D93B SWAP4 DUP13 SWAP4 DUP12 SWAP4 DUP12 SWAP4 PUSH1 0x84 ADD SWAP1 PUSH1 0x20 DUP1 DUP7 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1416 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x13FE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x143B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x144F 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 0x1465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP4 ADD SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP7 MSTORE DUP5 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP15 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP15 AND DUP6 DUP11 ADD DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP9 ADD DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 DUP11 MSTORE DUP8 DUP11 KECCAK256 SWAP7 MLOAD SWAP7 ADD DUP1 SLOAD SWAP3 MLOAD SWAP9 MLOAD PUSH1 0xC0 SHR PUSH1 0x1 PUSH1 0x48 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x48 SHL NOT SWAP10 SWAP1 SWAP6 AND PUSH2 0x100 MUL PUSH9 0xFFFFFFFFFFFFFFFF00 NOT SWAP8 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP7 SWAP1 SWAP7 AND SWAP2 SWAP1 SWAP2 OR SWAP7 SWAP1 SWAP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP6 MLOAD DUP15 DUP2 MSTORE SWAP3 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 DUP6 ADD MSTORE SWAP2 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x912A59309F29407977C171115122B2599E36BE67312D6366767F7DBEB3D831CE SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP4 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x15A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP6 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x160C 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP7 SWAP1 PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1643 JUMPI INVALID JUMPDEST EQ PUSH2 0x167F JUMPI 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 0x1D38 PUSH1 0x33 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH20 0x0 PUSH4 0x8492D93B DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1721 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1709 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x175A 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 0x1770 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD EQ PUSH2 0x17C4 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 0x4D65726B6C652070726F6F6620646F6573206E6F74206D617463680000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP5 MSTORE PUSH1 0x1 DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP15 AND DUP5 DUP9 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP16 AND DUP7 DUP10 ADD DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP9 ADD DUP1 SLOAD DUP1 DUP8 ADD DUP3 SSTORE SWAP1 DUP13 MSTORE SWAP11 DUP11 SWAP1 KECCAK256 SWAP7 MLOAD SWAP7 SWAP1 SWAP11 ADD DUP1 SLOAD SWAP2 MLOAD SWAP8 MLOAD PUSH1 0xC0 SHR PUSH1 0x1 PUSH1 0x48 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x48 SHL NOT SWAP9 SWAP1 SWAP5 AND PUSH2 0x100 MUL PUSH9 0xFFFFFFFFFFFFFFFF00 NOT SWAP8 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP7 SWAP1 SWAP7 AND OR SWAP6 SWAP1 SWAP6 AND OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP14 DUP2 MSTORE SWAP5 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH32 0x912A59309F29407977C171115122B2599E36BE67312D6366767F7DBEB3D831CE SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x18FC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x198C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP6 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH2 0x19AC SWAP1 PUSH1 0xFF AND DUP6 DUP6 PUSH2 0x1BCE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x60 SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 DUP3 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A11 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x1A2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A56 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x1A71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A9B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1B9B JUMPI DUP6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AB5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1AE2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE POP POP DUP6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1B0E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x9 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xC0 SHL DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1B35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND DUP2 MSTORE POP POP DUP6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1B63 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP3 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP4 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1B83 JUMPI INVALID JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1AA1 JUMP JUMPDEST POP SWAP2 SWAP9 SWAP1 SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1BDD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1BEF JUMPI POP PUSH1 0x2 DUP3 MUL DUP2 ADD PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1BFD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1C0A JUMPI POP DUP2 PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C18 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC10 JUMPI POP DUP2 PUSH2 0x1055 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1C43 SWAP2 SWAP1 PUSH2 0x1C78 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD MSTORE SWAP1 PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA1 JUMPI DUP1 SLOAD PUSH17 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1C79 JUMP JUMPDEST POP SWAP1 JUMP INVALID NUMBER PUSH22 0x7272656E745374617465206973206E6F742057616974 PUSH10 0x6E6750726F6F66732C20 PUSH4 0x616E6E6F PUSH21 0x2070726F766557726974654D65726B6C652070726F PUSH16 0x66206F6620777269746520646F657320 PUSH15 0x6F74206D6174636843757272656E74 MSTORE8 PUSH21 0x617465206973206E6F742057616974696E6750726F PUSH16 0x66732C2063616E6E6F742066696E6973 PUSH9 0x50726F6F6650686173 PUSH6 0x43757272656E PUSH21 0x5374617465206973206E6F742057616974696E6750 PUSH19 0x6F6F66732C2063616E6E6F742070726F766552 PUSH6 0x616453746174 PUSH6 0x206F66204D4D KECCAK256 PUSH20 0x686F756C642062652057616974696E675265706C PUSH2 0x7949 PUSH15 0x646578206E6F7420696E7374616E74 PUSH10 0x61746564000000000000 STOP STOP STOP STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE ISZERO 0x2C 0x5C SWAP12 0x29 0xA8 DUP4 CHAINID 0x2B MSTORE8 PUSH14 0x2A933E8C76AFA224326DA3E02AC5 0x22 0xE5 SHL EXTCODESIZE 0xC6 0xBC PUSH5 0x736F6C6343 STOP SMOD DIV STOP CALLER ",
      "sourceMap": "1271:289:13:-:0;;;759:1:2;729:31;;1271:289:13;;;;;;;;;;;;;;;;"
    },
    "deployedBytecode": {
      "generatedSources": [],
      "immutableReferences": {},
      "linkReferences": {
        "@cartesi/util/contracts/Merkle.sol": {
          "Merkle": [
            {
              "length": 20,
              "start": 4725
            },
            {
              "length": 20,
              "start": 5069
            },
            {
              "length": 20,
              "start": 5784
            }
          ]
        }
      },
      "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 0x84DFD44D GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xAC448B16 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xAC448B16 EQ PUSH2 0x49E JUMPI DUP1 PUSH4 0xADE5F417 EQ PUSH2 0x567 JUMPI DUP1 PUSH4 0xC526656C EQ PUSH2 0x584 JUMPI DUP1 PUSH4 0xD53B22E9 EQ PUSH2 0x649 JUMPI DUP1 PUSH4 0xDB1DE419 EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0xF154F91D EQ PUSH2 0x695 JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x84DFD44D EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x8A05E478 EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x90645840 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x965FF5BC EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x96F429BA EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0xA9C7A1E6 EQ PUSH2 0x3CC JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x43D4B78B GT PUSH2 0x115 JUMPI DUP1 PUSH4 0x43D4B78B EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x52CC70C6 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x5748C130 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x73DF1612 EQ PUSH2 0x278 JUMPI DUP1 PUSH4 0x7D036B0D EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x82AFD23B EQ PUSH2 0x2F6 JUMPI PUSH2 0x14D JUMP JUMPDEST DUP1 PUSH4 0x1FF62AB EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0x1C5D3C60 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0x26987B60 EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x3D46B819 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x3ED5D456 EQ PUSH2 0x1E6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x168 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x790 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x1B7 PUSH2 0x828 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x82E JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x8D4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x23F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xAA3 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 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB0A JUMP JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP5 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF4E JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xF63 JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x34C 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 0xF9F JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x105C JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xFF AND PUSH2 0x10BB JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10EC JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x3E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43E 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 0x460 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 0x113A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x507 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 0x529 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 0x155D SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x18B5 JUMP JUMPDEST PUSH2 0x5B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x59A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1913 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5F4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5DC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x633 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x61B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x203 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x65F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x192E JUMP JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1945 JUMP JUMPDEST PUSH2 0x6B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x19B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6FA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6E2 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x739 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x721 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP3 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x778 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x760 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x7FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x81E JUMPI INVALID JUMPDEST EQ SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x875 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x87E DUP2 PUSH2 0xF4E JUMP JUMPDEST PUSH2 0x8C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x496E64657820696E616374697665 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x919 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x980 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP3 PUSH2 0x99F DUP2 PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x9DA JUMPI 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 0x1D6B PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x9F7 SWAP2 PUSH1 0x4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1C25 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH2 0xA1C DUP5 PUSH2 0x1BAB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xEAC25E5C6B8F91FCAAEC2CBAED6317B8403630D1F793FC32C10FA4731A464E87 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xA9C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 PUSH2 0x7FE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xAEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xB51 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xB71 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB8F JUMPI PUSH13 0x57616974696E6750726F6F6673 PUSH1 0x98 SHL SWAP2 POP PUSH2 0x822 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xBB1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBCF JUMPI PUSH13 0x57616974696E675265706C6179 PUSH1 0x98 SHL SWAP2 POP PUSH2 0x822 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xBF1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC10 JUMPI PUSH14 0x46696E69736865645265706C6179 PUSH1 0x90 SHL SWAP2 POP PUSH2 0x822 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x556E7265636F676E697A6564207374617465 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xC9F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xCA7 PUSH2 0x1C46 JUMP JUMPDEST PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP2 MLOAD PUSH1 0xC0 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD AND DUP2 DUP6 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP2 DUP5 ADD MSTORE SWAP4 DUP2 ADD SLOAD PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD DUP1 SLOAD DUP4 MLOAD DUP2 DUP7 MUL DUP2 ADD DUP7 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP5 SWAP6 SWAP2 SWAP5 PUSH1 0x80 DUP8 ADD SWAP5 SWAP2 SWAP3 SWAP1 SWAP2 DUP5 ADD JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0xD71 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE SWAP2 DUP6 ADD SLOAD PUSH1 0xFF DUP2 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP4 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x48 SHL SWAP1 DIV PUSH1 0xC0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND SWAP1 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0xD10 JUMP JUMPDEST POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xD91 JUMPI INVALID JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xD9C JUMPI INVALID JUMPDEST DUP2 MSTORE POP POP SWAP1 POP DUP1 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD DUP4 PUSH1 0x80 ADD MLOAD MLOAD PUSH2 0xDC0 DUP14 PUSH2 0xB0A JUMP JUMPDEST SWAP4 SWAP14 SWAP3 SWAP13 POP SWAP1 SWAP11 POP SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xE1A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0xE84 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP4 SWAP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xEBB JUMPI INVALID JUMPDEST EQ PUSH2 0xEF7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x3A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1CFE PUSH1 0x3A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xB1229D47B7CCD1DDE07B4148A6C9336FD9D5FB57CCA980E709576E96AE600ED SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF72 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1BCE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF82 PUSH1 0x1 DUP7 DUP7 PUSH2 0x1BCE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF92 PUSH1 0x0 DUP8 DUP8 PUSH2 0x1BCE JUMP JUMPDEST SWAP2 SWAP1 SWAP3 ADD ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP4 SSTORE PUSH1 0x1 DUP4 ADD DUP1 SLOAD SWAP2 DUP11 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP7 SWAP1 SSTORE SWAP3 DUP4 ADD DUP6 SWAP1 SSTORE PUSH1 0x5 DUP4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP4 SLOAD DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP2 DUP3 ADD DUP6 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x9D7A7145D65060279D0BC06F7F03A791000BBAA9B8A8E75C3C10E2D24348791B SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP3 OR SWAP1 SSTORE DUP2 SLOAD SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x10A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD DUP1 SLOAD DUP3 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10E3 JUMPI INVALID JUMPDEST MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1133 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH2 0x7FE JUMP JUMPDEST DUP5 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x117F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP7 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x11E9 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP8 SWAP1 PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1220 JUMPI INVALID JUMPDEST EQ PUSH2 0x125C JUMPI 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 0x1CA6 PUSH1 0x34 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH20 0x0 PUSH4 0x8492D93B DUP10 DUP10 DUP9 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12FE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x12E6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1337 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 0x134D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD EQ PUSH2 0x138B JUMPI 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 0x1CDA PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8492D93B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP9 AND PUSH1 0x4 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x44 DUP4 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0x64 DUP5 ADD MSTORE DUP7 MLOAD PUSH20 0x0 SWAP4 PUSH4 0x8492D93B SWAP4 DUP13 SWAP4 DUP12 SWAP4 DUP12 SWAP4 PUSH1 0x84 ADD SWAP1 PUSH1 0x20 DUP1 DUP7 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1416 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x13FE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x143B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x144F 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 0x1465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP4 ADD SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP7 MSTORE DUP5 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP15 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP15 AND DUP6 DUP11 ADD DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP9 ADD DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 DUP11 MSTORE DUP8 DUP11 KECCAK256 SWAP7 MLOAD SWAP7 ADD DUP1 SLOAD SWAP3 MLOAD SWAP9 MLOAD PUSH1 0xC0 SHR PUSH1 0x1 PUSH1 0x48 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x48 SHL NOT SWAP10 SWAP1 SWAP6 AND PUSH2 0x100 MUL PUSH9 0xFFFFFFFFFFFFFFFF00 NOT SWAP8 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP7 SWAP1 SWAP7 AND SWAP2 SWAP1 SWAP2 OR SWAP7 SWAP1 SWAP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP6 MLOAD DUP15 DUP2 MSTORE SWAP3 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 DUP6 ADD MSTORE SWAP2 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x912A59309F29407977C171115122B2599E36BE67312D6366767F7DBEB3D831CE SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP4 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x15A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP6 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x160C 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 PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP7 SWAP1 PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1643 JUMPI INVALID JUMPDEST EQ PUSH2 0x167F JUMPI 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 0x1D38 PUSH1 0x33 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH20 0x0 PUSH4 0x8492D93B DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1721 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1709 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x175A 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 0x1770 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD EQ PUSH2 0x17C4 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 0x4D65726B6C652070726F6F6620646F6573206E6F74206D617463680000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP5 MSTORE PUSH1 0x1 DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP15 AND DUP5 DUP9 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP16 AND DUP7 DUP10 ADD DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP9 ADD DUP1 SLOAD DUP1 DUP8 ADD DUP3 SSTORE SWAP1 DUP13 MSTORE SWAP11 DUP11 SWAP1 KECCAK256 SWAP7 MLOAD SWAP7 SWAP1 SWAP11 ADD DUP1 SLOAD SWAP2 MLOAD SWAP8 MLOAD PUSH1 0xC0 SHR PUSH1 0x1 PUSH1 0x48 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x48 SHL NOT SWAP9 SWAP1 SWAP5 AND PUSH2 0x100 MUL PUSH9 0xFFFFFFFFFFFFFFFF00 NOT SWAP8 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP7 SWAP1 SWAP7 AND OR SWAP6 SWAP1 SWAP6 AND OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP14 DUP2 MSTORE SWAP5 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH32 0x912A59309F29407977C171115122B2599E36BE67312D6366767F7DBEB3D831CE SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x18FC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x198C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1D8E 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 DUP6 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH2 0x19AC SWAP1 PUSH1 0xFF AND DUP6 DUP6 PUSH2 0x1BCE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x60 SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 DUP3 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A11 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x1A2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A56 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x1A71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A9B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1B9B JUMPI DUP6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AB5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1AE2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE POP POP DUP6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1B0E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x9 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xC0 SHL DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1B35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND DUP2 MSTORE POP POP DUP6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1B63 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP3 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP4 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1B83 JUMPI INVALID JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1AA1 JUMP JUMPDEST POP SWAP2 SWAP9 SWAP1 SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1BDD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1BEF JUMPI POP PUSH1 0x2 DUP3 MUL DUP2 ADD PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1BFD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1C0A JUMPI POP DUP2 PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C18 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC10 JUMPI POP DUP2 PUSH2 0x1055 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1C43 SWAP2 SWAP1 PUSH2 0x1C78 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD MSTORE SWAP1 PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA1 JUMPI DUP1 SLOAD PUSH17 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1C79 JUMP JUMPDEST POP SWAP1 JUMP INVALID NUMBER PUSH22 0x7272656E745374617465206973206E6F742057616974 PUSH10 0x6E6750726F6F66732C20 PUSH4 0x616E6E6F PUSH21 0x2070726F766557726974654D65726B6C652070726F PUSH16 0x66206F6620777269746520646F657320 PUSH15 0x6F74206D6174636843757272656E74 MSTORE8 PUSH21 0x617465206973206E6F742057616974696E6750726F PUSH16 0x66732C2063616E6E6F742066696E6973 PUSH9 0x50726F6F6650686173 PUSH6 0x43757272656E PUSH21 0x5374617465206973206E6F742057616974696E6750 PUSH19 0x6F6F66732C2063616E6E6F742070726F766552 PUSH6 0x616453746174 PUSH6 0x206F66204D4D KECCAK256 PUSH20 0x686F756C642062652057616974696E675265706C PUSH2 0x7949 PUSH15 0x646578206E6F7420696E7374616E74 PUSH10 0x61746564000000000000 STOP STOP STOP STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE ISZERO 0x2C 0x5C SWAP12 0x29 0xA8 DUP4 CHAINID 0x2B MSTORE8 PUSH14 0x2A933E8C76AFA224326DA3E02AC5 0x22 0xE5 SHL EXTCODESIZE 0xC6 0xBC PUSH5 0x736F6C6343 STOP SMOD DIV STOP CALLER ",
      "sourceMap": "1271:289:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7960:182:6;;;;;;;;;;;;;;;;-1:-1:-1;7960:182:6;;;;;;-1:-1:-1;;;;;7960:182:6;;:::i;:::-;;;;;;;;;;;;;;;;;;12784:227;;;;;;;;;;;;;;;;-1:-1:-1;12784:227:6;;:::i;729:31:2:-;;;:::i;:::-;;;;;;;;;;;;;;;;1405:186;;;;;;;;;;;;;;;;-1:-1:-1;1405:186:2;;:::i;6821:446:6:-;;;;;;;;;;;;;;;;-1:-1:-1;6821:446:6;;:::i;:::-;;13017:227;;;;;;;;;;;;;;;;-1:-1:-1;13017:227:6;;:::i;8951:174::-;;;;;;;;;;;;;;;;-1:-1:-1;8951:174:6;;:::i;:::-;;;;-1:-1:-1;;;;;8951:174:6;;;;;;;;;;;;;;9534:546;;;;;;;;;;;;;;;;-1:-1:-1;9534:546:6;;:::i;8148:522::-;;;;;;;;;;;;;;;;-1:-1:-1;8148:522:6;;;;;;-1:-1:-1;;;;;8148:522:6;;:::i;:::-;;;;-1:-1:-1;;;;;8148:522:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6316:456;;;;;;;;;;;;;;;;-1:-1:-1;6316:456:6;;:::i;1289:110:2:-;;;;;;;;;;;;;;;;-1:-1:-1;1289:110:2;;:::i;11948:771:6:-;;;;;;;;;;;;;;;;-1:-1:-1;11948:771:6;;;;;;;:::i;3509:584::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3509:584:6;;;;;;;;;;;;;;;;;:::i;9317:189::-;;;;;;;;;;;;;;;;-1:-1:-1;9317:189:6;;:::i;1326:110:13:-;;;;;;;;;;;;;;;;-1:-1:-1;1326:110:13;;;;;;;;;:::i;13250:229:6:-;;;;;;;;;;;;;;;;-1:-1:-1;13250:229:6;;:::i;5327:914::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5327:914:6;;;;;;-1:-1:-1;;;;;;5327:914:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5327:914:6;;-1:-1:-1;5327:914:6;;-1:-1:-1;;;;;5327:914:6:i;4357:724::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4357:724:6;;;;;;-1:-1:-1;;;;;;4357:724:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4357:724:6;;-1:-1:-1;4357:724:6;;-1:-1:-1;;;;;4357:724:6:i;9131:180::-;;;;;;;;;;;;;;;;-1:-1:-1;9131:180:6;;:::i;8676:269::-;;;;;;;;;;;;;;;;-1:-1:-1;8676:269:6;;;;;;-1:-1:-1;;;;;8676:269:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1442:116:13;;;;;;;;;;;;;;;;-1:-1:-1;1442:116:13;;;;;;;:::i;11250:391:6:-;;;;;;;;;;;;;;;;-1:-1:-1;11250:391:6;;;;;;;;;;;;:::i;7295:659::-;;;;;;;;;;;;;;;;-1:-1:-1;7295:659:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7960:182;8074:4;8101:16;;;:8;:16;;;;;;:25;;;-1:-1:-1;;;;;8101:34:6;;;:25;;:34;;7960:182::o;12784:227::-;12925:4;12900:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;12985:19:6::1;12952:52;:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:52;::::0;::::1;;;;;;;12945:59;;989:1:2;12784:227:6::0;;;;:::o;729:31:2:-;;;;:::o;1405:186::-;1528:20;1503:6;1081;1066:12;;:21;1058:56;;;;;-1:-1:-1;;;1058:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1058:56:2;;;;;;;;;;;;;;;1132:16;1141:6;1132:8;:16::i;:::-;1124:43;;;;;-1:-1:-1;;;1124:43:2;;;;;;;;;;;;-1:-1:-1;;;1124:43:2;;;;;;;;;;;;;;;-1:-1:-1;;1571:13:2::1;::::0;;;:5:::1;:13;::::0;;;;;;1405:186::o;6821:446:6:-;6921:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;6944:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:22;-1:-1:-1;;;;;6944:22:6::1;834:10:0;:18:::0;::::1;826:55;;;::::0;;-1:-1:-1;;;826:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;826:55:0;;;;;;;;;;;;;::::1;;1250:13:2::2;::::0;;;:5:::2;:13;::::0;;;;:15;;::::2;;::::0;;6991:6:6;7021:28:::3;6991:6:::0;7021:20:::3;:28::i;:::-;7013:76;;;;-1:-1:-1::0;;;7013:76:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7107:16;::::0;;;:8:::3;:16;::::0;;;;7099:33:::3;::::0;7107:24:::3;::::0;;::::3;::::0;7099:33:::3;:::i;:::-;7142:16;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;:52:::0;;-1:-1:-1;;7142:52:6::3;7174:20;7142:52;::::0;;7205:18:::3;7142:16:::0;7205:10:::3;:18::i;:::-;7238:22;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;891:1:0::2;989::2::1;6821:446:6::0;;:::o;13017:227::-;13158:4;13133:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;13218:19:6::1;13185:52;::::0;8951:174;9063:7;9038:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;-1:-1:-1;;9093:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:25:::1;;::::0;-1:-1:-1;;;;;9093:25:6::1;::::0;8951:174::o;9534:546::-;9670:7;9645:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;9730:19:6::1;9697:16:::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:52;::::0;::::1;;;;;;;9693:105;;;-1:-1:-1::0;;;9765:22:6::1;;;;9693:105;9844:19;9811:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:52;::::0;::::1;;;;;;;9807:105;;;-1:-1:-1::0;;;9879:22:6::1;;;;9807:105;9958:20;9925:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:53;::::0;::::1;;;;;;;9921:107;;;-1:-1:-1::0;;;9994:23:6::1;;;;9921:107;10037:36;::::0;;-1:-1:-1;;;10037:36:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10037:36:6;;;;;;;;;;;;;::::1;8148:522:::0;8282:17;8313:20;8347:16;8377:24;8415:21;8244:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;8461:14:6::1;;:::i;:::-;8478:16;::::0;;;:8:::1;:16;::::0;;;;;;;8461:33;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;8461:33:6;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;8478:16;;8461:33;;;;;;;;;::::1;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;;;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;8461:33:6::1;::::0;;::::1;::::0;-1:-1:-1;;;8461:33:6;::::1;;;-1:-1:-1::0;;;;;;8461:33:6::1;::::0;;;;;;;;;::::1;::::0;::::1;;;;-1:-1:-1::0;;;8461:33:6;;;-1:-1:-1;8461:33:6::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;8526:1;:10;;;8550:1;:13;;;8577:1;:9;;;8600:1;:9;;;:16;8630:23;8646:6;8630:15;:23::i;:::-;8505:158:::0;;;;-1:-1:-1;8505:158:6;;-1:-1:-1;8505:158:6;-1:-1:-1;8505:158:6;;-1:-1:-1;8148:522:6;-1:-1:-1;;;;;8148:522:6:o;6316:456::-;6415:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;6438:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:25:::1;;::::0;-1:-1:-1;;;;;6438:25:6::1;834:10:0;:18:::0;::::1;826:55;;;::::0;;-1:-1:-1;;;826:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;826:55:0;;;;;;;;;;;;;::::1;;1250:13:2::2;::::0;;;:5:::2;:13;::::0;;;;:15;;::::2;;::::0;;6488:6:6;;6531:16:::3;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;::::0;::::3;;:52;::::0;::::3;;;;;;;6510:157;;;;-1:-1:-1::0;;;6510:157:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6677:16;::::0;;;:8:::3;:16;::::0;;;;;;;;:29:::3;;:51:::0;;-1:-1:-1;;6677:51:6::3;6709:19;6677:51;::::0;;6743:22;;;;;;;::::3;::::0;;;;;;;;::::3;891:1:0::2;989::2::1;6316:456:6::0;;:::o;1289:110:2:-;1353:4;1377:14;;;:6;:14;;;;;;;;;1289:110::o;11948:771:6:-;12085:7;12104:29;12136:123;12169:19;12202:14;12230:19;12136;:123::i;:::-;12104:155;;12270:29;12302:123;12335:19;12368:14;12396:19;12302;:123::i;:::-;12270:155;;12436:28;12467:123;12500:19;12533:14;12561:19;12467;:123::i;:::-;12620:57;;;;:92;;11948:771;-1:-1:-1;;;;11948:771:6:o;3509:584::-;3642:7;3702:12;;3693:22;;:8;:22;;;;;;;;3725:30;;-1:-1:-1;;;;;3725:30:6;;;-1:-1:-1;;;;;;3725:30:6;;;;;;-1:-1:-1;3765:24:6;;:36;;;;;;;;;;;;3811:27;;;:42;;;3863:23;;;:38;;;3911:28;;;:50;;-1:-1:-1;;3911:50:6;;;3990:12;;3976:41;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4028:20:6;4035:12;;4028:20;;4051:4;4028:20;;;;;;;:27;;-1:-1:-1;;4028:27:6;;;;;4072:14;;;;;;;;3509:584;;;;;;:::o;9317:189::-;9445:7;9420:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;-1:-1:-1;;9475:16:6::1;::::0;;;:8:::1;:16;::::0;;;;;;;:24:::1;::::0;;9317:189::o;1326:110:13:-;1391:15;;;;:8;:15;;;;;:28;;:38;;1422:7;;1391:28;-1:-1:-1;;1391:38:13;;1422:7;1391:38;;;;;;;;;;;;;1326:110;;:::o;13250:229:6:-;13392:4;13367:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;13452:20:6::1;13419:53;::::0;5327:914;5527:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;5550:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:25:::1;;::::0;-1:-1:-1;;;;;5550:25:6::1;834:10:0;:18:::0;::::1;826:55;;;::::0;;-1:-1:-1;;;826:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;826:55:0;;;;;;;;;;;;;::::1;;1250:13:2::2;::::0;;;:5:::2;:13;::::0;;;;:15;;::::2;;::::0;;5600:6:6;;5643:16:::3;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;::::0;::::3;;:52;::::0;::::3;;;;;;;5622:151;;;;-1:-1:-1::0;;;5622:151:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5903:8;:16;5912:6;5903:16;;;;;;;;;;;:24;;;5840:6;:14;5855:9;5866;5877:5;5840:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;5840:43:6::3;;;;;;-1:-1:-1::0;;;;;5840:43:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;5840:43:6;:87:::3;5819:170;;;;-1:-1:-1::0;;;5819:170:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6049:43;::::0;-1:-1:-1;;;6049:43:6;;-1:-1:-1;;;;;6049:43:6;::::3;;::::0;::::3;::::0;;;-1:-1:-1;;;;;;6049:43:6;::::3;::::0;;;;;;;;;;;;;;;;;;;:6:::3;::::0;:14:::3;::::0;6064:9;;6075;;6086:5;;6049:43;;;::::3;::::0;;::::3;::::0;::::3;::::0;;;-1:-1:-1;6049:43:6::3;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;6049:43:6;6022:16:::3;::::0;;;:8:::3;6049:43;6022:16:::0;;;;;;;:24;;::::3;:70:::0;;;;6132:38;;::::3;::::0;;::::3;::::0;;;;;-1:-1:-1;;;;;6132:38:6;;::::3;::::0;;::::3;::::0;;;-1:-1:-1;;;;;;6132:38:6;::::3;::::0;;;;;;6102:24:::3;::::0;;::::3;:69:::0;;6132:38;6102:69;::::3;::::0;;;;;;;;;;;::::3;::::0;;;;;;::::3;;-1:-1:-1::0;;;6102:69:6::3;-1:-1:-1::0;;;;6102:69:6;;;::::3;;;-1:-1:-1::0;;6102:69:6;::::3;;-1:-1:-1::0;;6102:69:6;;::::3;::::0;;;::::3;::::0;;;::::3;::::0;;;::::3;::::0;;;::::3;::::0;;;::::3;::::0;;;6186:48;;;;;;;::::3;::::0;;;;;;;;;;;;;;::::3;::::0;;;;;;;::::3;891:1:0::2;989::2::1;5327:914:6::0;;;;;;:::o;4357:724::-;4527:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;4550:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:25:::1;;::::0;-1:-1:-1;;;;;4550:25:6::1;834:10:0;:18:::0;::::1;826:55;;;::::0;;-1:-1:-1;;;826:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;826:55:0;;;;;;;;;;;;;::::1;;1250:13:2::2;::::0;;;:5:::2;:13;::::0;;;;:15;;::::2;;::::0;;4600:6:6;;4643:16:::3;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;::::0;::::3;;:52;::::0;::::3;;;;;;;4622:150;;;;-1:-1:-1::0;;;4622:150:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4863:8;:16;4872:6;4863:16;;;;;;;;;;;:24;;;4803:6;:14;4818:9;4829:6;4837:5;4803:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;4803:40:6::3;;;;;;-1:-1:-1::0;;;;;4803:40:6::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;4803:40:6;:84:::3;4782:158;;;::::0;;-1:-1:-1;;;4782:158:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;4950:16;::::0;;;:8:::3;:16;::::0;;;;;;;4980:34;;::::3;::::0;;::::3;::::0;;4990:4:::3;4980:34:::0;;;-1:-1:-1;;;;;4980:34:6;;::::3;::::0;;::::3;::::0;;;-1:-1:-1;;;;;;4980:34:6;::::3;::::0;;;;;;4950:24:::3;::::0;;::::3;:65:::0;;;;::::3;::::0;;;;;;;;;;;;;;::::3;::::0;;;;;;::::3;;-1:-1:-1::0;;;4950:65:6::3;-1:-1:-1::0;;;;4950:65:6;;;::::3;;;-1:-1:-1::0;;4950:65:6;::::3;;-1:-1:-1::0;;4950:65:6;;::::3;::::0;;;::::3;::::0;;;::::3;;::::0;;;::::3;;::::0;;;5030:44;;;;;;;::::3;::::0;;;;;;;;;;;;;;;;;;;::::3;::::0;;;;;;;::::3;891:1:0::2;989::2::1;4357:724:6::0;;;;;:::o;9131:180::-;9246:7;9221:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;-1:-1:-1;;9276:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:28:::1;;::::0;;9131:180::o;8676:269::-;-1:-1:-1;;8852:16:6;;;8866:1;8852:16;;;;;;8899;;;;;;;;;8852;8676:269::o;1442:116:13:-;1518:15;;;;:8;:15;;;;;;;;:23;;;:33;1442:116::o;11250:391:6:-;11471:7;11446:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;11534:16:6::1;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;11501:133:::1;::::0;11534:29:::1;;11577:14:::0;11605:19;11501::::1;:133::i;:::-;11494:140:::0;11250:391;-1:-1:-1;;;;;11250:391:6:o;7295:659::-;7471:23;7497:16;;;:8;:16;;;;;:24;;7548:10;;7387:15;;;;;;7497:24;7387:15;7548:10;-1:-1:-1;;;;;7596:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7596:20:6;;7568:48;;7626:22;7664:6;-1:-1:-1;;;;;7651:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7651:20:6;;7626:45;;7681:20;7715:6;-1:-1:-1;;;;;7704:18:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7704:18:6;;7681:41;;7738:9;7733:170;7757:6;7753:1;:10;7733:170;;;7799:3;7803:1;7799:6;;;;;;;;;;;;;;;:15;;;;;;;;;;-1:-1:-1;;;;;7799:15:6;7784:9;7794:1;7784:12;;;;;;;;;;;;;:30;-1:-1:-1;;;;;7784:30:6;;;-1:-1:-1;;;;;7784:30:6;;;;;7840:3;7844:1;7840:6;;;;;;;;;;;;;;;:12;;;;;;;;;;;;7828:6;7835:1;7828:9;;;;;;;;;;;;;:24;-1:-1:-1;;;;;7828:24:6;;;;-1:-1:-1;;;;;7828:24:6;;;;;;7878:3;7882:1;7878:6;;;;;;;;;;;;;;;;;:14;7866:9;;7878:14;;;;;7866:6;;7873:1;;7866:9;;;;;;:26;;;:9;;;;;;;;;;;:26;7765:3;;7733:170;;;-1:-1:-1;7921:9:6;;7932:6;;-1:-1:-1;7921:9:6;;-1:-1:-1;7295:659:6;-1:-1:-1;;;;7295:659:6:o;1597:111:2:-;1669:5;1652:14;;;:6;:14;;;;;;;;:22;;-1:-1:-1;;1652:22:2;;;1684:5;:13;;;;;:17;1597:111::o;10375:869:6:-;10523:7;;10546:6;:29;;;;;;;;;10542:339;;;-1:-1:-1;10851:1:6;10843:27;;10821:49;;10814:56;;10542:339;10904:19;10894:6;:29;;;;;;;;;10890:150;;;-1:-1:-1;11015:14:6;11008:21;;10890:150;11063:20;11053:6;:30;;;;;;;;;11049:142;;;-1:-1:-1;11166:14:6;11159:21;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o"
    },
    "gasEstimates": {
      "creation": {
        "codeDepositCost": "1530200",
        "executionCost": "6609",
        "totalCost": "1536809"
      },
      "external": {
        "currentIndex()": "1066",
        "finishProofPhase(uint256)": "infinite",
        "finishReplayPhase(uint256)": "infinite",
        "getCurrentState(uint256)": "infinite",
        "getCurrentStateDeadline(uint256,uint256,uint256)": "infinite",
        "getMaxInstanceDuration(uint256,uint256)": "infinite",
        "getNonce(uint256)": "infinite",
        "getRWArrays(uint256)": "infinite",
        "getState(uint256,address)": "infinite",
        "getSubInstances(uint256,address)": "678",
        "initialHash(uint256)": "infinite",
        "instantiate(address,address,bytes32)": "148435",
        "isActive(uint256)": "1251",
        "isConcerned(uint256,address)": "1211",
        "newHash(uint256)": "infinite",
        "proveRead(uint256,uint64,bytes8,bytes32[])": "infinite",
        "proveWrite(uint256,uint64,bytes8,bytes8,bytes32[])": "infinite",
        "provider(uint256)": "infinite",
        "setNewHashAtIndex(uint256,bytes32)": "20376",
        "setState(uint256,uint8)": "21241",
        "stateIsFinishedReplay(uint256)": "infinite",
        "stateIsWaitingProofs(uint256)": "infinite",
        "stateIsWaitingReplay(uint256)": "infinite"
      }
    },
    "methodIdentifiers": {
      "currentIndex()": "26987b60",
      "finishProofPhase(uint256)": "7d036b0d",
      "finishReplayPhase(uint256)": "3ed5d456",
      "getCurrentState(uint256)": "5748c130",
      "getCurrentStateDeadline(uint256,uint256,uint256)": "db1de419",
      "getMaxInstanceDuration(uint256,uint256)": "84dfd44d",
      "getNonce(uint256)": "3d46b819",
      "getRWArrays(uint256)": "f154f91d",
      "getState(uint256,address)": "73df1612",
      "getSubInstances(uint256,address)": "c526656c",
      "initialHash(uint256)": "ade5f417",
      "instantiate(address,address,bytes32)": "8a05e478",
      "isActive(uint256)": "82afd23b",
      "isConcerned(uint256,address)": "01ff62ab",
      "newHash(uint256)": "90645840",
      "proveRead(uint256,uint64,bytes8,bytes32[])": "ac448b16",
      "proveWrite(uint256,uint64,bytes8,bytes8,bytes32[])": "a9c7a1e6",
      "provider(uint256)": "52cc70c6",
      "setNewHashAtIndex(uint256,bytes32)": "d53b22e9",
      "setState(uint256,uint8)": "965ff5bc",
      "stateIsFinishedReplay(uint256)": "96f429ba",
      "stateIsWaitingProofs(uint256)": "1c5d3c60",
      "stateIsWaitingReplay(uint256)": "43d4b78b"
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"FinishedProofs\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"FinishedReplay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"}],\"name\":\"MemoryCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_wasRead\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes8\",\"name\":\"_value\",\"type\":\"bytes8\"}],\"name\":\"ValueProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes8\",\"name\":\"_value\",\"type\":\"bytes8\"}],\"name\":\"ValueRead\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes8\",\"name\":\"_value\",\"type\":\"bytes8\"}],\"name\":\"ValueWritten\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"currentIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"finishProofPhase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"finishReplayPhase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getCurrentState\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeToStartMachine\",\"type\":\"uint256\"}],\"name\":\"getCurrentStateDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeToStartMachine\",\"type\":\"uint256\"}],\"name\":\"getMaxInstanceDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getRWArrays\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes8[]\",\"name\":\"\",\"type\":\"bytes8[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_newHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_numberSubmitted\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_currentState\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getSubInstances\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"initialHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"}],\"name\":\"instantiate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"isConcerned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"newHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"internalType\":\"bytes8\",\"name\":\"_value\",\"type\":\"bytes8\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveRead\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"internalType\":\"bytes8\",\"name\":\"_oldValue\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"_newValue\",\"type\":\"bytes8\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveWrite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"provider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"newHash\",\"type\":\"bytes32\"}],\"name\":\"setNewHashAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"enum MMInterface.state\",\"name\":\"toState\",\"type\":\"uint8\"}],\"name\":\"setState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsFinishedReplay\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsWaitingProofs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsWaitingReplay\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getMaxInstanceDuration(uint256,uint256)\":{\"params\":{\"_timeToStartMachine\":\"time to build the machine for the first time\"}},\"instantiate(address,address,bytes32)\":{\"params\":{\"_initialHash\":\"hash before divergence, in which both client and provider agree.\",\"_provider\":\"address that will provide memory values/proofs.\"},\"returns\":{\"_0\":\"MemoryManager index.\"}},\"proveWrite(uint256,uint64,bytes8,bytes8,bytes32[])\":{\"params\":{\"_newValue\":\"to be written\",\"_oldValue\":\"before write\",\"_position\":\"to be written\",\"proof\":\"The proof that the old value was correct\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"finishProofPhase(uint256)\":{\"notice\":\"Stop memory insertion and start read and write phase\"},\"finishReplayPhase(uint256)\":{\"notice\":\"Stop write (or read) phase\"},\"instantiate(address,address,bytes32)\":{\"notice\":\"Instantiate a memory manager instance.\"},\"proveRead(uint256,uint64,bytes8,bytes32[])\":{\"notice\":\"Proves that a certain value in current memory is correct\"},\"proveWrite(uint256,uint64,bytes8,bytes8,bytes32[])\":{\"notice\":\"Register a write operation and update newHash\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MMInstantiatorTestAux.sol\":\"MMInstantiatorTestAux\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@cartesi/util/contracts/Decorated.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\npragma solidity ^0.7.0;\\n\\n\\ncontract Decorated {\\n    // This contract defines several modifiers but does not use\\n    // them - they will be used in derived contracts.\\n    modifier onlyBy(address user) {\\n        require(msg.sender == user, \\\"Cannot be called by user\\\");\\n        _;\\n    }\\n\\n    modifier onlyAfter(uint256 time) {\\n        require(block.timestamp > time, \\\"Cannot be called now\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xdbba019b8f7f93b212a5bbae402ee988321c4fa82ed2b4c9e55b4d7ddf35dcc3\",\"license\":\"Apache-2.0\"},\"@cartesi/util/contracts/Instantiator.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\n\\npragma solidity ^0.7.0;\\n\\n\\ninterface Instantiator {\\n\\n    modifier onlyInstantiated(uint256 _index) virtual;\\n\\n    modifier onlyActive(uint256 _index) virtual;\\n\\n    modifier increasesNonce(uint256 _index) virtual;\\n\\n    function isActive(uint256 _index) external view returns (bool);\\n\\n    function getNonce(uint256 _index) external view returns (uint256);\\n\\n    function isConcerned(uint256 _index, address _user) external view returns (bool);\\n\\n    function getSubInstances(uint256 _index, address) external view returns (address[] memory _addresses, uint256[] memory _indices);\\n}\\n\",\"keccak256\":\"0x416e612dc09b10765de32ec06cf0a7ee4e050e16db8bf3b8ad832a6082b7dfd6\",\"license\":\"Apache-2.0\"},\"@cartesi/util/contracts/InstantiatorImpl.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"./Instantiator.sol\\\";\\n\\nabstract contract InstantiatorImpl is Instantiator {\\n    uint256 public currentIndex = 0;\\n\\n    mapping(uint256 => bool) internal active;\\n    mapping(uint256 => uint256) internal nonce;\\n\\n    modifier onlyInstantiated(uint256 _index) override {\\n        require(currentIndex > _index, \\\"Index not instantiated\\\");\\n        _;\\n    }\\n\\n    modifier onlyActive(uint256 _index) override {\\n        require(currentIndex > _index, \\\"Index not instantiated\\\");\\n        require(isActive(_index), \\\"Index inactive\\\");\\n        _;\\n    }\\n\\n    modifier increasesNonce(uint256 _index) override {\\n        nonce[_index]++;\\n        _;\\n    }\\n\\n    function isActive(uint256 _index) public override view returns (bool) {\\n        return (active[_index]);\\n    }\\n\\n    function getNonce(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyActive(_index)\\n        returns (uint256 currentNonce)\\n    {\\n        return nonce[_index];\\n    }\\n\\n    function deactivate(uint256 _index) internal {\\n        active[_index] = false;\\n        nonce[_index] = 0;\\n    }\\n}\\n\",\"keccak256\":\"0x8f8e29b807e5c55198206a370b4d8751cbd98a663e3f89faff274e2f9d7cae75\",\"license\":\"Apache-2.0\"},\"@cartesi/util/contracts/Merkle.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\n\\n/// @title Library for Merkle proofs\\npragma solidity ^0.7.0;\\n\\n\\nlibrary Merkle {\\n    function getPristineHash(uint8 _log2Size) public pure returns (bytes32) {\\n        require(_log2Size >= 3, \\\"Has to be at least one word\\\");\\n        require(_log2Size <= 64, \\\"Cannot be bigger than the machine itself\\\");\\n\\n        bytes8 value = 0;\\n        bytes32 runningHash = keccak256(abi.encodePacked(value));\\n\\n        for (uint256 i = 3; i < _log2Size; i++) {\\n            runningHash = keccak256(abi.encodePacked(runningHash, runningHash));\\n        }\\n\\n        return runningHash;\\n    }\\n\\n    function getRoot(uint64 _position, bytes8 _value, bytes32[] memory proof) public pure returns (bytes32) {\\n        bytes32 runningHash = keccak256(abi.encodePacked(_value));\\n\\n        return getRootWithDrive(\\n            _position,\\n            3,\\n            runningHash,\\n            proof\\n        );\\n    }\\n\\n    function getRootWithDrive(\\n        uint64 _position,\\n        uint8 _logOfSize,\\n        bytes32 _drive,\\n        bytes32[] memory siblings\\n    ) public pure returns (bytes32)\\n    {\\n        require(_logOfSize >= 3, \\\"Must be at least a word\\\");\\n        require(_logOfSize <= 64, \\\"Cannot be bigger than the machine itself\\\");\\n\\n        uint64 size = uint64(2) ** _logOfSize;\\n\\n        require(((size - 1) & _position) == 0, \\\"Position is not aligned\\\");\\n        require(siblings.length == 64 - _logOfSize, \\\"Proof length does not match\\\");\\n\\n        bytes32 drive = _drive;\\n\\n        for (uint64 i = 0; i < siblings.length; i++) {\\n            if ((_position & (size << i)) == 0) {\\n                drive = keccak256(abi.encodePacked(drive, siblings[i]));\\n            } else {\\n                drive = keccak256(abi.encodePacked(siblings[i], drive));\\n            }\\n        }\\n\\n        return drive;\\n    }\\n\\n    function getLog2Floor(uint256 number) public pure returns (uint8) {\\n\\n        uint8 result = 0;\\n\\n        uint256 checkNumber = number;\\n        checkNumber = checkNumber >> 1;\\n        while (checkNumber > 0) {\\n            ++result;\\n            checkNumber = checkNumber >> 1;\\n        }\\n\\n        return result;\\n    }\\n\\n    function isPowerOf2(uint256 number) public pure returns (bool) {\\n\\n        uint256 checkNumber = number;\\n        if (checkNumber == 0) {\\n            return false;\\n        }\\n\\n        while ((checkNumber & 1) == 0) {\\n            checkNumber = checkNumber >> 1;\\n        }\\n\\n        checkNumber = checkNumber >> 1;\\n\\n        if (checkNumber == 0) {\\n            return true;\\n        }\\n\\n        return false;\\n    }\\n\\n    /// @notice Calculate the root of Merkle tree from an array of power of 2 elements\\n    /// @param hashes The array containing power of 2 elements\\n    /// @return byte32 the root hash being calculated\\n    function calculateRootFromPowerOfTwo(bytes32[] memory hashes) public pure returns (bytes32) {\\n        // revert when the input is not of power of 2\\n        require(isPowerOf2(hashes.length), \\\"The input array must contain power of 2 elements\\\");\\n\\n        if (hashes.length == 1) {\\n            return hashes[0];\\n        }else {\\n            bytes32[] memory newHashes = new bytes32[](hashes.length >> 1);\\n\\n            for (uint256 i = 0; i < hashes.length; i += 2) {\\n                newHashes[i >> 1] = keccak256(abi.encodePacked(hashes[i], hashes[i + 1]));\\n            }\\n\\n            return calculateRootFromPowerOfTwo(newHashes);\\n        }\\n    }\\n\\n}\\n\",\"keccak256\":\"0xfab427885024176038f230531f5fbc87e80c38b22d7b5307a57a7a0b7cdfc6fe\",\"license\":\"Apache-2.0\"},\"contracts/MMInstantiator.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the 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 <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n/// @title An instantiator of memory managers\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/InstantiatorImpl.sol\\\";\\nimport \\\"@cartesi/util/contracts/Decorated.sol\\\";\\nimport \\\"./MMInterface.sol\\\";\\nimport \\\"@cartesi/util/contracts/Merkle.sol\\\";\\n\\ncontract MMInstantiator is InstantiatorImpl, MMInterface, Decorated {\\n    // the provider will fill the memory for the client to read and write\\n    // memory starts with hash and all values that are inserted are first verified\\n    // then client can read inserted values and write some more\\n    // finally the provider has to update the hash to account for writes\\n\\n    struct ReadWrite {\\n        bool wasRead;\\n        uint64 position;\\n        bytes8 value;\\n    }\\n\\n    // IMPLEMENT GARBAGE COLLECTOR AFTER AN INSTACE IS FINISHED!\\n    struct MMCtx {\\n        address owner;\\n        address provider;\\n        bytes32 initialHash;\\n        bytes32 newHash; // hash after some write operations have been proved\\n        ReadWrite[] history;\\n        state currentState;\\n    }\\n\\n    mapping(uint256 => MMCtx) internal instance;\\n\\n    // These are the possible states and transitions of the contract.\\n    //\\n    // +---+\\n    // |   |\\n    // +---+\\n    //   |\\n    //   | instantiate\\n    //   v\\n    // +---------------+    | proveRead\\n    // | WaitingProofs |----| proveWrite\\n    // +---------------+\\n    //   |\\n    //   | finishProofPhase\\n    //   v\\n    // +----------------+    |read\\n    // | WaitingReplay  |----|write\\n    // +----------------+\\n    //   |\\n    //   | finishReplayPhase\\n    //   v\\n    // +----------------+\\n    // | FinishedReplay |\\n    // +----------------+\\n    //\\n\\n    event MemoryCreated(uint256 _index, bytes32 _initialHash);\\n    event ValueProved(\\n        uint256 _index,\\n        bool _wasRead,\\n        uint64 _position,\\n        bytes8 _value\\n    );\\n    event ValueRead(uint256 _index, uint64 _position, bytes8 _value);\\n    event ValueWritten(uint256 _index, uint64 _position, bytes8 _value);\\n    event FinishedProofs(uint256 _index);\\n    event FinishedReplay(uint256 _index);\\n\\n    /// @notice Instantiate a memory manager instance.\\n    /// @param _provider address that will provide memory values/proofs.\\n    /// @param _initialHash hash before divergence, in which both client and provider agree.\\n    /// @return MemoryManager index.\\n    function instantiate(\\n        address _owner,\\n        address _provider,\\n        bytes32 _initialHash\\n    ) public override returns (uint256) {\\n        MMCtx storage currentInstance = instance[currentIndex];\\n        currentInstance.owner = _owner;\\n        currentInstance.provider = _provider;\\n        currentInstance.initialHash = _initialHash;\\n        currentInstance.newHash = _initialHash;\\n        currentInstance.currentState = state.WaitingProofs;\\n        emit MemoryCreated(currentIndex, _initialHash);\\n\\n        active[currentIndex] = true;\\n        return currentIndex++;\\n    }\\n\\n    /// @notice Proves that a certain value in current memory is correct\\n    // @param _position The address of the value to be confirmed\\n    // @param _value The value in that address to be confirmed\\n    // @param proof The proof that this value is correct\\n    function proveRead(\\n        uint256 _index,\\n        uint64 _position,\\n        bytes8 _value,\\n        bytes32[] memory proof\\n    )\\n        public\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].provider)\\n        increasesNonce(_index)\\n    {\\n        require(\\n            instance[_index].currentState == state.WaitingProofs,\\n            \\\"CurrentState is not WaitingProofs, cannot proveRead\\\"\\n        );\\n        require(\\n            Merkle.getRoot(_position, _value, proof) ==\\n                instance[_index].newHash,\\n            \\\"Merkle proof does not match\\\"\\n        );\\n        instance[_index].history.push(ReadWrite(true, _position, _value));\\n        emit ValueProved(_index, true, _position, _value);\\n    }\\n\\n    /// @notice Register a write operation and update newHash\\n    /// @param _position to be written\\n    /// @param _oldValue before write\\n    /// @param _newValue to be written\\n    /// @param proof The proof that the old value was correct\\n    function proveWrite(\\n        uint256 _index,\\n        uint64 _position,\\n        bytes8 _oldValue,\\n        bytes8 _newValue,\\n        bytes32[] memory proof\\n    )\\n        public\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].provider)\\n        increasesNonce(_index)\\n    {\\n        require(\\n            instance[_index].currentState == state.WaitingProofs,\\n            \\\"CurrentState is not WaitingProofs, cannot proveWrite\\\"\\n        );\\n        // check proof of old value\\n        require(\\n            Merkle.getRoot(_position, _oldValue, proof) ==\\n                instance[_index].newHash,\\n            \\\"Merkle proof of write does not match\\\"\\n        );\\n        // update root\\n        instance[_index].newHash = Merkle.getRoot(_position, _newValue, proof);\\n        instance[_index].history.push(ReadWrite(false, _position, _newValue));\\n        emit ValueProved(_index, false, _position, _newValue);\\n    }\\n\\n    /// @notice Stop memory insertion and start read and write phase\\n    function finishProofPhase(uint256 _index)\\n        public\\n        override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].provider)\\n        increasesNonce(_index)\\n    {\\n        require(\\n            instance[_index].currentState == state.WaitingProofs,\\n            \\\"CurrentState is not WaitingProofs, cannot finishProofPhase\\\"\\n        );\\n        instance[_index].currentState = state.WaitingReplay;\\n        emit FinishedProofs(_index);\\n    }\\n\\n    /// @notice Stop write (or read) phase\\n    function finishReplayPhase(uint256 _index)\\n        public\\n        override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].owner)\\n        increasesNonce(_index)\\n    {\\n        require(stateIsWaitingReplay(_index), \\\"State of MM should be WaitingReplay\\\");\\n        delete (instance[_index].history);\\n        instance[_index].currentState = state.FinishedReplay;\\n\\n        deactivate(_index);\\n        emit FinishedReplay(_index);\\n    }\\n\\n    // getter methods\\n    function getRWArrays(uint256 _index)\\n    public\\n    override\\n    view\\n    returns (\\n        uint64[] memory,\\n        bytes8[] memory,\\n        bool[] memory\\n    )\\n    {\\n        ReadWrite[] storage his = instance[_index].history;\\n        uint256 length = his.length;\\n        uint64[] memory positions = new uint64[](length);\\n        bytes8[] memory values = new bytes8[](length);\\n        bool[] memory isRead = new bool[](length);\\n\\n        for (uint256 i = 0; i < length; i++) {\\n            positions[i] = his[i].position;\\n            values[i] = his[i].value;\\n            isRead[i] = his[i].wasRead;\\n        }\\n\\n        return (positions, values, isRead);\\n    }\\n\\n    function isConcerned(uint256 _index, address _user)\\n        public\\n        override\\n        view\\n        returns (bool)\\n    {\\n        return instance[_index].provider == _user;\\n    }\\n\\n    function getState(uint256 _index, address)\\n        public\\n        view\\n        onlyInstantiated(_index)\\n        returns (\\n            address _provider,\\n            bytes32 _initialHash,\\n            bytes32 _newHash,\\n            uint256 _numberSubmitted,\\n            bytes32 _currentState\\n        )\\n    {\\n        MMCtx memory i = instance[_index];\\n\\n        return (\\n            i.provider,\\n            i.initialHash,\\n            i.newHash,\\n            i.history.length,\\n            getCurrentState(_index)\\n        );\\n    }\\n\\n    function getSubInstances(uint256, address)\\n        public\\n        override\\n        pure\\n        returns (address[] memory, uint256[] memory)\\n    {\\n        address[] memory a = new address[](0);\\n        uint256[] memory i = new uint256[](0);\\n        return (a, i);\\n    }\\n\\n    function provider(uint256 _index)\\n        public\\n        view\\n        onlyInstantiated(_index)\\n        returns (address)\\n    {\\n        return instance[_index].provider;\\n    }\\n\\n    function initialHash(uint256 _index)\\n        public\\n        view\\n        onlyInstantiated(_index)\\n        returns (bytes32)\\n    {\\n        return instance[_index].initialHash;\\n    }\\n\\n    function newHash(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyInstantiated(_index)\\n        returns (bytes32)\\n    {\\n        return instance[_index].newHash;\\n    }\\n\\n    // state getters\\n\\n    function getCurrentState(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyInstantiated(_index)\\n        returns (bytes32)\\n    {\\n        if (instance[_index].currentState == state.WaitingProofs) {\\n            return \\\"WaitingProofs\\\";\\n        }\\n        if (instance[_index].currentState == state.WaitingReplay) {\\n            return \\\"WaitingReplay\\\";\\n        }\\n        if (instance[_index].currentState == state.FinishedReplay) {\\n            return \\\"FinishedReplay\\\";\\n        }\\n        require(false, \\\"Unrecognized state\\\");\\n    }\\n\\n    /// @notice Get the worst case scenario duration for a specific state\\n    /// @param _roundDuration security parameter, the max time an agent\\n    //          has to react and submit one simple transaction\\n    /// @param _timeToStartMachine time to build the machine for the first time\\n    function getMaxStateDuration(\\n        state _state,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    ) private pure returns (uint256) {\\n        if (_state == state.WaitingProofs) {\\n            // proving siblings is assumed to be free\\n            // so its time to start the machine\\n            // + one round duration to send the proofs\\n            // + one transaction for finishProofPhase transaction\\n            return _timeToStartMachine + uint256(2) * _roundDuration;\\n        }\\n        if (_state == state.WaitingReplay) {\\n            // one transaction for the step function to be completed\\n            return _roundDuration;\\n        }\\n        if (_state == state.FinishedReplay) {\\n            // one transaction for finishReplay transaction\\n            return _roundDuration;\\n        }\\n\\n        require(false, \\\"Unrecognized state\\\");\\n    }\\n\\n    function getCurrentStateDeadline(\\n        uint256 _index,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    )   public\\n        override\\n        view\\n        onlyInstantiated(_index)\\n        returns (uint256)\\n    {\\n        return getMaxStateDuration(\\n            instance[_index].currentState,\\n            _roundDuration,\\n            _timeToStartMachine\\n        );\\n    }\\n\\n    /// @notice Get the worst case scenario duration for an instance of this contract\\n    /// @param _roundDuration security parameter, the max time an agent\\n    //          has to react and submit one simple transaction\\n    /// @param _timeToStartMachine time to build the machine for the first time\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    ) public override pure returns (uint256) {\\n        uint256 waitingProofsDuration = getMaxStateDuration(\\n            state.WaitingProofs,\\n            _roundDuration,\\n            _timeToStartMachine\\n        );\\n\\n        uint256 waitingReplayDuration = getMaxStateDuration(\\n            state.WaitingReplay,\\n            _roundDuration,\\n            _timeToStartMachine\\n        );\\n\\n        uint256 finishProofsDuration = getMaxStateDuration(\\n            state.WaitingProofs,\\n            _roundDuration,\\n            _timeToStartMachine\\n        );\\n\\n        return\\n            waitingProofsDuration +\\n            waitingReplayDuration +\\n            finishProofsDuration;\\n    }\\n\\n    // remove these functions and change tests accordingly\\n    function stateIsWaitingProofs(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    {\\n        return instance[_index].currentState == state.WaitingProofs;\\n    }\\n\\n    function stateIsWaitingReplay(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    {\\n        return instance[_index].currentState == state.WaitingReplay;\\n    }\\n\\n    function stateIsFinishedReplay(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    {\\n        return instance[_index].currentState == state.FinishedReplay;\\n    }\\n}\\n\",\"keccak256\":\"0x65547e53eae687057b4aff51233b3244e4608abdcc201e691947084ba07c240c\",\"license\":\"GPL-3.0-only\"},\"contracts/MMInterface.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the 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 <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n/// @title Interface for memory manager instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\n\\ninterface MMInterface is Instantiator {\\n    enum state {WaitingProofs, WaitingReplay, FinishedReplay}\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function instantiate(\\n        address _owner,\\n        address _provider,\\n        bytes32 _initialHash\\n    ) external returns (uint256);\\n\\n    function newHash(uint256 _index) external view returns (bytes32);\\n\\n    function finishProofPhase(uint256 _index) external;\\n\\n    function finishReplayPhase(uint256 _index) external;\\n\\n    function getRWArrays(\\n        uint256 _index\\n    )\\n    external\\n    view\\n    returns (\\n        uint64[] memory,\\n        bytes8[] memory,\\n        bool[] memory\\n    );\\n\\n    function stateIsWaitingProofs(uint256 _index) external view returns (bool);\\n\\n    function stateIsWaitingReplay(uint256 _index) external view returns (bool);\\n\\n    function stateIsFinishedReplay(uint256 _index) external view returns (bool);\\n\\n    function getCurrentStateDeadline(\\n        uint256 _index,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    ) external view returns (uint256);\\n\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc35a3addeda42b399d8995c1d3e8ea16746d1d95bb5214cd9709201bc9d702c0\",\"license\":\"GPL-3.0-only\"},\"contracts/test/MMInstantiatorTestAux.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the 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 <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\npragma solidity ^0.7.0;\\nimport \\\"../MMInstantiator.sol\\\";\\n\\ncontract MMInstantiatorTestAux is MMInstantiator {\\n    function setState(uint256 index, state toState) public {\\n        instance[index].currentState = toState;\\n    }\\n\\n    function setNewHashAtIndex(uint256 index, bytes32 newHash) public {\\n        instance[index].newHash = newHash;\\n    }\\n}\\n\",\"keccak256\":\"0xd787f666b253a8b7fef0bbb540d2a81df4cf9f2b4116607bcfc35d6a89001ff7\",\"license\":\"GPL-3.0-only\"}},\"version\":1}",
  "storageLayout": {
    "storage": [
      {
        "astId": 89,
        "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
        "label": "currentIndex",
        "offset": 0,
        "slot": "0",
        "type": "t_uint256"
      },
      {
        "astId": 93,
        "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
        "label": "active",
        "offset": 0,
        "slot": "1",
        "type": "t_mapping(t_uint256,t_bool)"
      },
      {
        "astId": 97,
        "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
        "label": "nonce",
        "offset": 0,
        "slot": "2",
        "type": "t_mapping(t_uint256,t_uint256)"
      },
      {
        "astId": 2024,
        "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
        "label": "instance",
        "offset": 0,
        "slot": "3",
        "type": "t_mapping(t_uint256,t_struct(MMCtx)2020_storage)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_struct(ReadWrite)2006_storage)dyn_storage": {
        "base": "t_struct(ReadWrite)2006_storage",
        "encoding": "dynamic_array",
        "label": "struct MMInstantiator.ReadWrite[]",
        "numberOfBytes": "32"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_bytes8": {
        "encoding": "inplace",
        "label": "bytes8",
        "numberOfBytes": "8"
      },
      "t_enum(state)2873": {
        "encoding": "inplace",
        "label": "enum MMInterface.state",
        "numberOfBytes": "1"
      },
      "t_mapping(t_uint256,t_bool)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => bool)",
        "numberOfBytes": "32",
        "value": "t_bool"
      },
      "t_mapping(t_uint256,t_struct(MMCtx)2020_storage)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => struct MMInstantiator.MMCtx)",
        "numberOfBytes": "32",
        "value": "t_struct(MMCtx)2020_storage"
      },
      "t_mapping(t_uint256,t_uint256)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => uint256)",
        "numberOfBytes": "32",
        "value": "t_uint256"
      },
      "t_struct(MMCtx)2020_storage": {
        "encoding": "inplace",
        "label": "struct MMInstantiator.MMCtx",
        "members": [
          {
            "astId": 2008,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "owner",
            "offset": 0,
            "slot": "0",
            "type": "t_address"
          },
          {
            "astId": 2010,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "provider",
            "offset": 0,
            "slot": "1",
            "type": "t_address"
          },
          {
            "astId": 2012,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "initialHash",
            "offset": 0,
            "slot": "2",
            "type": "t_bytes32"
          },
          {
            "astId": 2014,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "newHash",
            "offset": 0,
            "slot": "3",
            "type": "t_bytes32"
          },
          {
            "astId": 2017,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "history",
            "offset": 0,
            "slot": "4",
            "type": "t_array(t_struct(ReadWrite)2006_storage)dyn_storage"
          },
          {
            "astId": 2019,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "currentState",
            "offset": 0,
            "slot": "5",
            "type": "t_enum(state)2873"
          }
        ],
        "numberOfBytes": "192"
      },
      "t_struct(ReadWrite)2006_storage": {
        "encoding": "inplace",
        "label": "struct MMInstantiator.ReadWrite",
        "members": [
          {
            "astId": 2001,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "wasRead",
            "offset": 0,
            "slot": "0",
            "type": "t_bool"
          },
          {
            "astId": 2003,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "position",
            "offset": 1,
            "slot": "0",
            "type": "t_uint64"
          },
          {
            "astId": 2005,
            "contract": "contracts/test/MMInstantiatorTestAux.sol:MMInstantiatorTestAux",
            "label": "value",
            "offset": 9,
            "slot": "0",
            "type": "t_bytes8"
          }
        ],
        "numberOfBytes": "32"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint64": {
        "encoding": "inplace",
        "label": "uint64",
        "numberOfBytes": "8"
      }
    }
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "finishProofPhase(uint256)": {
        "notice": "Stop memory insertion and start read and write phase"
      },
      "finishReplayPhase(uint256)": {
        "notice": "Stop write (or read) phase"
      },
      "instantiate(address,address,bytes32)": {
        "notice": "Instantiate a memory manager instance."
      },
      "proveRead(uint256,uint64,bytes8,bytes32[])": {
        "notice": "Proves that a certain value in current memory is correct"
      },
      "proveWrite(uint256,uint64,bytes8,bytes8,bytes32[])": {
        "notice": "Register a write operation and update newHash"
      }
    },
    "version": 1
  }
}