{
  "contractName": "ComputeInstantiator",
  "sourceName": "contracts/ComputeInstantiator.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vgInstantiatorAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "ChallengeStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_claimedFinalHash",
          "type": "bytes32"
        }
      ],
      "name": "ClaimSubmitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_machineAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_finalTime",
          "type": "uint256"
        }
      ],
      "name": "ComputeCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "_state",
          "type": "uint8"
        }
      ],
      "name": "ComputeFinished",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "ResultConfirmed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "challenge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "claimVictoryByTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "confirm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "_roundDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_timeToStartMachine",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_partitionSize",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxCycle",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_picoSecondsToRunInsn",
          "type": "uint256"
        }
      ],
      "name": "getMaxInstanceDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_claimer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_machine",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_finalTime",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_claimedFinalHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_currentState",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSubInstances",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_addresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_indices",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_claimer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_machineAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_finalTime",
          "type": "uint256"
        }
      ],
      "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": "stateIsChallengerWon",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsClaimerMissedDeadline",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsClaimerWon",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsConsensusResult",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsWaitingChallange",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsWaitingClaim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsWaitingConfirmation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_claimedFinalHash",
          "type": "bytes32"
        }
      ],
      "name": "submitClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "winByVG",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000805534801561001457600080fd5b50604051611fe0380380611fe08339818101604052602081101561003757600080fd5b5051600380546001600160a01b0319166001600160a01b03909216919091179055611f79806100676000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a0c222b4116100b8578063c19e71c31161007c578063c19e71c3146103a0578063c526656c146103ea578063ce73b628146104af578063d0a068cf146104cc578063ded4df63146104e9578063e174b3bf1461050657610137565b8063a0c222b414610307578063a20d952b1461032c578063a2dc797314610349578063ab82d9a014610366578063ba0179b51461038357610137565b80635748c130116100ff5780635748c130146102055780636547429e146102225780636c092edd1461023f57806373df16121461025c57806382afd23b146102ea57610137565b806301ff62ab1461013c57806326987b601461017c578063370f31aa14610196578063388e43be146101cb5780633d46b819146101e8575b600080fd5b6101686004803603604081101561015257600080fd5b50803590602001356001600160a01b0316610523565b604080519115158252519081900360200190f35b61018461056e565b60408051918252519081900360200190f35b610184600480360360a08110156101ac57600080fd5b5080359060208101359060408101359060608101359060800135610574565b610168600480360360208110156101e157600080fd5b50356105bc565b610184600480360360208110156101fe57600080fd5b5035610630565b6101846004803603602081101561021b57600080fd5b50356106d6565b6101686004803603602081101561023857600080fd5b503561092c565b6101686004803603602081101561025557600080fd5b503561097a565b6102886004803603604081101561027257600080fd5b50803590602001356001600160a01b03166109c8565b60405180896001600160a01b03168152602001886001600160a01b03168152602001878152602001866001600160a01b031681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b6101686004803603602081101561030057600080fd5b5035610d30565b61032a6004803603604081101561031d57600080fd5b5080359060200135610d45565b005b6101686004803603602081101561034257600080fd5b5035610ee3565b61032a6004803603602081101561035f57600080fd5b5035610f31565b61032a6004803603602081101561037c57600080fd5b5035611199565b61032a6004803603602081101561039957600080fd5b50356113f0565b610184600480360360c08110156103b657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359091169060808101359060a00135611570565b6104166004803603604081101561040057600080fd5b50803590602001356001600160a01b03166116d8565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561045a578181015183820152602001610442565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610499578181015183820152602001610481565b5050505090500194505050505060405180910390f35b610168600480360360208110156104c557600080fd5b50356117cd565b610168600480360360208110156104e257600080fd5b503561181b565b61032a600480360360208110156104ff57600080fd5b5035611869565b6101686004803603602081101561051c57600080fd5b5035611a90565b6000828152600460205260408120546001600160a01b038381169116148061056757506000838152600460205260409020600101546001600160a01b038381169116145b9392505050565b60005481565b60008061058660008888888888611ade565b9050600061059960018989898989611ade565b905060006105ac60038a8a8a8a8a611ade565b9190920101979650505050505050565b6000818060005411610603576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60015b60008481526004602052604090206009015460ff16600681111561062657fe5b1491505b50919050565b6000818060005411610677576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b61068081610d30565b6106c2576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b505060009081526002602052604090205490565b600081806000541161071d576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60008381526004602052604081206009015460ff16600681111561073d57fe5b141561075a576b57616974696e67436c61696d60a01b915061062a565b600160008481526004602052604090206009015460ff16600681111561077c57fe5b14156107a057722bb0b4ba34b733a1b7b73334b936b0ba34b7b760691b915061062a565b600260008481526004602052604090206009015460ff1660068111156107c257fe5b14156107e85774436c61696d65724d6973736564446561646c696e6560581b915061062a565b600360008481526004602052604090206009015460ff16600681111561080a57fe5b141561082b576f57616974696e674368616c6c656e676560801b915061062a565b600460008481526004602052604090206009015460ff16600681111561084d57fe5b141561086b576c21b430b63632b733b2b92bb7b760991b915061062a565b600560008481526004602052604090206009015460ff16600681111561088d57fe5b14156108a8576921b630b4b6b2b92bb7b760b11b915061062a565b600660008481526004602052604090206009015460ff1660068111156108ca57fe5b14156108ea576e10dbdb9cd95b9cdd5cd4995cdd5b1d608a1b915061062a565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000818060005411610973576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6004610606565b60008180600054116109c1576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6002610606565b6000806000806000806000806109dc611e01565b60008b81526004602081815260409283902083516101408101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003810154606085015291820154166080830152600581015460a083015260068082015460c0840152600782015460e08401526008820154610100840152600982015461012084019160ff90911690811115610a7857fe5b6006811115610a8357fe5b90525090506001806000808461012001516006811115610a9f57fe5b1415610ab757506b57616974696e67436c61696d60a01b5b60018461012001516006811115610aca57fe5b1415610ae95750722bb0b4ba34b733a1b7b73334b936b0ba34b7b760691b5b60028461012001516006811115610afc57fe5b1415610b1d575074436c61696d65724d6973736564446561646c696e6560581b5b60038461012001516006811115610b3057fe5b1415610c49575060035461010084015160408051630c91927b60e01b81526004810192909252516f57616974696e674368616c6c656e676560801b926001600160a01b031691630c91927b916024808301926020929190829003018186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d6020811015610bc557600080fd5b505160035461010086015160408051622231c360e11b81526004810192909252519295506001600160a01b03909116916244638691602480820192602092909190829003018186803b158015610c1a57600080fd5b505afa158015610c2e573d6000803e3d6000fd5b505050506040513d6020811015610c4457600080fd5b505191505b60048461012001516006811115610c5c57fe5b1415610c7557506c21b430b63632b733b2b92bb7b760991b5b60058461012001516006811115610c8857fe5b1415610c9e57506921b630b4b6b2b92bb7b760b11b5b60068461012001516006811115610cb157fe5b1415610ccc57506e10dbdb9cd95b9cdd5cd4995cdd5b1d608a1b5b83600001518460200151610cf486610120015187604001516028888a60c001516101f4611ade565b86606001510186608001518760a001518860c001518960e00151879b509b509b509b509b509b509b509b50505050509295985092959890939650565b60009081526001602052604090205460ff1690565b818060005411610d8a576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000838152600460205260409020600101546001600160a01b0316338114610df4576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600084815260026020526040812080546001019055849060008681526004602052604090206009015460ff166006811115610e2b57fe5b14610e7d576040805162461bcd60e51b815260206004820152601c60248201527f53746174652073686f756c642062652057616974696e67436c61696d00000000604482015290519081900360640190fd5b60008581526004602090815260409182902060078101879055600901805460ff19166001179055815187815290810186905281517f1e9358f673ff367487ce56f136412ae5b69bf2c06e223aad2756d748c2a9b52a929181900390910190a15050505050565b6000818060005411610f2a576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000610606565b808060005411610f76576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60008281526002602081815260408084208054600190810190915560049092528320600981015492810154600690910154869493610fc19360ff9091169291602891906101f4611ade565b6000858152600460205260409020600301540142119050806110145760405162461bcd60e51b815260040180806020018281038252602c815260200180611e77602c913960400191505060405180910390fd5b6000848152600460205260409020546001600160a01b031633148015611057575060008481526004602052604081206009015460ff16600681111561105557fe5b145b156110ed57600084815260046020526040902060090180546002919060ff19166001835b021790555061108984611c39565b6000848152600460205260409020600901547fce5d57dc06bffee515dc9f8ca3a267203dbbe503f6bfad687a7120d00756913e90859060ff1660068111156110cd57fe5b6040805192835260ff90911660208301528051918290030190a150611194565b6000848152600460205260409020600101546001600160a01b0316331480156111355750600160008581526004602052604090206009015460ff16600681111561113357fe5b145b1561115d57600084815260046020526040902060090180546006919060ff191660018361107b565b60405162461bcd60e51b815260040180806020018281038252602f815260200180611ef5602f913960400191505060405180910390fd5b505050565b8080600054116111de576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b0316338114611245576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260026020526040902080546001908101909155839060008581526004602052604090206009015460ff16600681111561127f57fe5b146112bb5760405162461bcd60e51b8152600401808060200182810382526023815260200180611e546023913960400191505060405180910390fd5b60035460008581526004602081815260408084208054600182015460028301548387015460058501546007860154600690960154875163020b738760e41b81526001600160a01b039687169a81019a909a5293851660248a0152604489019290925283166064880152608487015260a486019290925260c485019190915290519416936320b738709360e4808501948390030190829087803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b50516000858152600460205260409020600881019190915560090180546003919060ff191660018302179055506040805185815290517fa895da4b794aeba8d8082db237265459db7b7ffdb5aa7c2332a7c5eafbfae7359181900360200190a150505050565b808060005411611435576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b031633811461149c576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260026020526040902080546001908101909155839060008581526004602052604090206009015460ff1660068111156114d657fe5b146115125760405162461bcd60e51b8152600401808060200182810382526023815260200180611e546023913960400191505060405180910390fd5b6000848152600460205260409020600901805460ff1916600617905561153784611c5c565b6040805185815290517fa832892b4543448b594422a93bf38c889d54ae5938a065c6ec5f4636161f522a9181900360200190a150505050565b6000856001600160a01b0316876001600160a01b031614156115c35760405162461bcd60e51b8152600401808060200182810382526025815260200180611ed06025913960400191505060405180910390fd5b600080548152600460208190526040822080546001600160a01b03808c166001600160a01b0319928316178355600180840180548d8416908516179055600284018b90559383018054918a16919092161790556005810186905560068101859055600981018054919392909160ff191690830217905550426003820155600054604080519182526001600160a01b03808b166020840152808a1683830152606083018990528716608083015260a0820186905260c08201859052517f9f53c9493351536908d5efd56da31dfb5a53a510ac3e216afe64af077b558d509181900360e00190a150506000805481526001602081905260408220805460ff19168217905581549081019091555b9695505050505050565b6060808080600360008781526004602052604090206009015460ff1660068111156116ff57fe5b14156117a95760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060035484519293506001600160a01b03169184915060009061175f57fe5b6001600160a01b0390921660209283029190910182015260008781526004909152604081206008015482519091839161179457fe5b602090810291909101015290925090506117c6565b505060408051600080825260208201908152818301909252925090505b9250929050565b6000818060005411611814576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6003610606565b6000818060005411611862576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6005610606565b8080600054116118ae576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60008281526002602052604090208054600101905581600360008481526004602052604090206009015460ff1660068111156118e657fe5b146119225760405162461bcd60e51b815260040180806020018281038252602d815260200180611ea3602d913960400191505060405180910390fd5b60008381526004602081815260409283902060080154600354845163b6b5c31960e01b8152938401829052935190936001600160a01b03169263b6b5c319926024808301939192829003018186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d60208110156119a757600080fd5b5051156119bd576119b784611cbd565b50611194565b60035460408051633664f8bf60e11b81526004810184905290516001600160a01b0390921691636cc9f17e91602480820192602092909190829003018186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b505115611a43576119b784611d90565b6040805162461bcd60e51b815260206004820152601860248201527f5374617465206f66205647206973206e6f742066696e616c0000000000000000604482015290519081900360640190fd5b6000818060005411611ad7576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6006610606565b600080876006811115611aed57fe5b1415611b09578564e8d4a510008484025b0486010190506116ce565b6001876006811115611b1757fe5b1415611b2c578564e8d4a51000848402611afe565b6003876006811115611b3a57fe5b1415611bdb5760035460408051631b8798d560e11b81526004810189905260248101889052604481018790526064810186905260848101859052905188926001600160a01b03169163370f31aa9160a4808301926020929190829003018186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b50510190506116ce565b6005876006811115611be957fe5b1480611c0057506004876006811115611bfe57fe5b145b80611c1657506002876006811115611c1457fe5b145b80611c2c57506006876006811115611c2a57fe5b145b156116ce575060006116ce565b6000908152600160209081526040808320805460ff191690556002909152812055565b6000818152600460208190526040822080546001600160a01b031990811682556001820180548216905560028201849055600382018490559181018054909216909155600581018290556006810182905560080155611cba81611c39565b50565b808060005411611d02576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b611d0b82611c5c565b6000828152600460208190526040909120600901805460ff19166001835b02179055506000828152600460205260409020600901547fce5d57dc06bffee515dc9f8ca3a267203dbbe503f6bfad687a7120d00756913e90839060ff166006811115611d7257fe5b6040805192835260ff90911660208301528051918290030190a15050565b808060005411611dd5576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b611dde82611c5c565b600082815260046020526040902060090180546005919060ff1916600183611d29565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906101208201529056fe53746174652073686f756c642062652057616974696e67436f6e6669726d6174696f6e446561646c696e65206973206e6f74206f76657220666f7220746869732073706563696669632073746174655374617465206973206e6f742057616974696e674368616c6c656e67652c2063616e6e6f742077696e427956474368616c6c656e67657220616e6420436c61696d6572206e65656420746f206469666665724661696c20746f20436c61696d566963746f7279427954696d6520696e2063757272656e7420636f6e646974696f6e496e646578206e6f7420696e7374616e74696174656400000000000000000000a26469706673582212203fcba7868bcd1ad10e523b5fb225fd029d795d1e2d7ef79023a277abc5b5406664736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063a0c222b4116100b8578063c19e71c31161007c578063c19e71c3146103a0578063c526656c146103ea578063ce73b628146104af578063d0a068cf146104cc578063ded4df63146104e9578063e174b3bf1461050657610137565b8063a0c222b414610307578063a20d952b1461032c578063a2dc797314610349578063ab82d9a014610366578063ba0179b51461038357610137565b80635748c130116100ff5780635748c130146102055780636547429e146102225780636c092edd1461023f57806373df16121461025c57806382afd23b146102ea57610137565b806301ff62ab1461013c57806326987b601461017c578063370f31aa14610196578063388e43be146101cb5780633d46b819146101e8575b600080fd5b6101686004803603604081101561015257600080fd5b50803590602001356001600160a01b0316610523565b604080519115158252519081900360200190f35b61018461056e565b60408051918252519081900360200190f35b610184600480360360a08110156101ac57600080fd5b5080359060208101359060408101359060608101359060800135610574565b610168600480360360208110156101e157600080fd5b50356105bc565b610184600480360360208110156101fe57600080fd5b5035610630565b6101846004803603602081101561021b57600080fd5b50356106d6565b6101686004803603602081101561023857600080fd5b503561092c565b6101686004803603602081101561025557600080fd5b503561097a565b6102886004803603604081101561027257600080fd5b50803590602001356001600160a01b03166109c8565b60405180896001600160a01b03168152602001886001600160a01b03168152602001878152602001866001600160a01b031681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b6101686004803603602081101561030057600080fd5b5035610d30565b61032a6004803603604081101561031d57600080fd5b5080359060200135610d45565b005b6101686004803603602081101561034257600080fd5b5035610ee3565b61032a6004803603602081101561035f57600080fd5b5035610f31565b61032a6004803603602081101561037c57600080fd5b5035611199565b61032a6004803603602081101561039957600080fd5b50356113f0565b610184600480360360c08110156103b657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359091169060808101359060a00135611570565b6104166004803603604081101561040057600080fd5b50803590602001356001600160a01b03166116d8565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561045a578181015183820152602001610442565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610499578181015183820152602001610481565b5050505090500194505050505060405180910390f35b610168600480360360208110156104c557600080fd5b50356117cd565b610168600480360360208110156104e257600080fd5b503561181b565b61032a600480360360208110156104ff57600080fd5b5035611869565b6101686004803603602081101561051c57600080fd5b5035611a90565b6000828152600460205260408120546001600160a01b038381169116148061056757506000838152600460205260409020600101546001600160a01b038381169116145b9392505050565b60005481565b60008061058660008888888888611ade565b9050600061059960018989898989611ade565b905060006105ac60038a8a8a8a8a611ade565b9190920101979650505050505050565b6000818060005411610603576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60015b60008481526004602052604090206009015460ff16600681111561062657fe5b1491505b50919050565b6000818060005411610677576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b61068081610d30565b6106c2576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b505060009081526002602052604090205490565b600081806000541161071d576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60008381526004602052604081206009015460ff16600681111561073d57fe5b141561075a576b57616974696e67436c61696d60a01b915061062a565b600160008481526004602052604090206009015460ff16600681111561077c57fe5b14156107a057722bb0b4ba34b733a1b7b73334b936b0ba34b7b760691b915061062a565b600260008481526004602052604090206009015460ff1660068111156107c257fe5b14156107e85774436c61696d65724d6973736564446561646c696e6560581b915061062a565b600360008481526004602052604090206009015460ff16600681111561080a57fe5b141561082b576f57616974696e674368616c6c656e676560801b915061062a565b600460008481526004602052604090206009015460ff16600681111561084d57fe5b141561086b576c21b430b63632b733b2b92bb7b760991b915061062a565b600560008481526004602052604090206009015460ff16600681111561088d57fe5b14156108a8576921b630b4b6b2b92bb7b760b11b915061062a565b600660008481526004602052604090206009015460ff1660068111156108ca57fe5b14156108ea576e10dbdb9cd95b9cdd5cd4995cdd5b1d608a1b915061062a565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000818060005411610973576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6004610606565b60008180600054116109c1576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6002610606565b6000806000806000806000806109dc611e01565b60008b81526004602081815260409283902083516101408101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003810154606085015291820154166080830152600581015460a083015260068082015460c0840152600782015460e08401526008820154610100840152600982015461012084019160ff90911690811115610a7857fe5b6006811115610a8357fe5b90525090506001806000808461012001516006811115610a9f57fe5b1415610ab757506b57616974696e67436c61696d60a01b5b60018461012001516006811115610aca57fe5b1415610ae95750722bb0b4ba34b733a1b7b73334b936b0ba34b7b760691b5b60028461012001516006811115610afc57fe5b1415610b1d575074436c61696d65724d6973736564446561646c696e6560581b5b60038461012001516006811115610b3057fe5b1415610c49575060035461010084015160408051630c91927b60e01b81526004810192909252516f57616974696e674368616c6c656e676560801b926001600160a01b031691630c91927b916024808301926020929190829003018186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d6020811015610bc557600080fd5b505160035461010086015160408051622231c360e11b81526004810192909252519295506001600160a01b03909116916244638691602480820192602092909190829003018186803b158015610c1a57600080fd5b505afa158015610c2e573d6000803e3d6000fd5b505050506040513d6020811015610c4457600080fd5b505191505b60048461012001516006811115610c5c57fe5b1415610c7557506c21b430b63632b733b2b92bb7b760991b5b60058461012001516006811115610c8857fe5b1415610c9e57506921b630b4b6b2b92bb7b760b11b5b60068461012001516006811115610cb157fe5b1415610ccc57506e10dbdb9cd95b9cdd5cd4995cdd5b1d608a1b5b83600001518460200151610cf486610120015187604001516028888a60c001516101f4611ade565b86606001510186608001518760a001518860c001518960e00151879b509b509b509b509b509b509b509b50505050509295985092959890939650565b60009081526001602052604090205460ff1690565b818060005411610d8a576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000838152600460205260409020600101546001600160a01b0316338114610df4576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600084815260026020526040812080546001019055849060008681526004602052604090206009015460ff166006811115610e2b57fe5b14610e7d576040805162461bcd60e51b815260206004820152601c60248201527f53746174652073686f756c642062652057616974696e67436c61696d00000000604482015290519081900360640190fd5b60008581526004602090815260409182902060078101879055600901805460ff19166001179055815187815290810186905281517f1e9358f673ff367487ce56f136412ae5b69bf2c06e223aad2756d748c2a9b52a929181900390910190a15050505050565b6000818060005411610f2a576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000610606565b808060005411610f76576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60008281526002602081815260408084208054600190810190915560049092528320600981015492810154600690910154869493610fc19360ff9091169291602891906101f4611ade565b6000858152600460205260409020600301540142119050806110145760405162461bcd60e51b815260040180806020018281038252602c815260200180611e77602c913960400191505060405180910390fd5b6000848152600460205260409020546001600160a01b031633148015611057575060008481526004602052604081206009015460ff16600681111561105557fe5b145b156110ed57600084815260046020526040902060090180546002919060ff19166001835b021790555061108984611c39565b6000848152600460205260409020600901547fce5d57dc06bffee515dc9f8ca3a267203dbbe503f6bfad687a7120d00756913e90859060ff1660068111156110cd57fe5b6040805192835260ff90911660208301528051918290030190a150611194565b6000848152600460205260409020600101546001600160a01b0316331480156111355750600160008581526004602052604090206009015460ff16600681111561113357fe5b145b1561115d57600084815260046020526040902060090180546006919060ff191660018361107b565b60405162461bcd60e51b815260040180806020018281038252602f815260200180611ef5602f913960400191505060405180910390fd5b505050565b8080600054116111de576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b0316338114611245576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260026020526040902080546001908101909155839060008581526004602052604090206009015460ff16600681111561127f57fe5b146112bb5760405162461bcd60e51b8152600401808060200182810382526023815260200180611e546023913960400191505060405180910390fd5b60035460008581526004602081815260408084208054600182015460028301548387015460058501546007860154600690960154875163020b738760e41b81526001600160a01b039687169a81019a909a5293851660248a0152604489019290925283166064880152608487015260a486019290925260c485019190915290519416936320b738709360e4808501948390030190829087803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b50516000858152600460205260409020600881019190915560090180546003919060ff191660018302179055506040805185815290517fa895da4b794aeba8d8082db237265459db7b7ffdb5aa7c2332a7c5eafbfae7359181900360200190a150505050565b808060005411611435576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b031633811461149c576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260026020526040902080546001908101909155839060008581526004602052604090206009015460ff1660068111156114d657fe5b146115125760405162461bcd60e51b8152600401808060200182810382526023815260200180611e546023913960400191505060405180910390fd5b6000848152600460205260409020600901805460ff1916600617905561153784611c5c565b6040805185815290517fa832892b4543448b594422a93bf38c889d54ae5938a065c6ec5f4636161f522a9181900360200190a150505050565b6000856001600160a01b0316876001600160a01b031614156115c35760405162461bcd60e51b8152600401808060200182810382526025815260200180611ed06025913960400191505060405180910390fd5b600080548152600460208190526040822080546001600160a01b03808c166001600160a01b0319928316178355600180840180548d8416908516179055600284018b90559383018054918a16919092161790556005810186905560068101859055600981018054919392909160ff191690830217905550426003820155600054604080519182526001600160a01b03808b166020840152808a1683830152606083018990528716608083015260a0820186905260c08201859052517f9f53c9493351536908d5efd56da31dfb5a53a510ac3e216afe64af077b558d509181900360e00190a150506000805481526001602081905260408220805460ff19168217905581549081019091555b9695505050505050565b6060808080600360008781526004602052604090206009015460ff1660068111156116ff57fe5b14156117a95760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060035484519293506001600160a01b03169184915060009061175f57fe5b6001600160a01b0390921660209283029190910182015260008781526004909152604081206008015482519091839161179457fe5b602090810291909101015290925090506117c6565b505060408051600080825260208201908152818301909252925090505b9250929050565b6000818060005411611814576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6003610606565b6000818060005411611862576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6005610606565b8080600054116118ae576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b60008281526002602052604090208054600101905581600360008481526004602052604090206009015460ff1660068111156118e657fe5b146119225760405162461bcd60e51b815260040180806020018281038252602d815260200180611ea3602d913960400191505060405180910390fd5b60008381526004602081815260409283902060080154600354845163b6b5c31960e01b8152938401829052935190936001600160a01b03169263b6b5c319926024808301939192829003018186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d60208110156119a757600080fd5b5051156119bd576119b784611cbd565b50611194565b60035460408051633664f8bf60e11b81526004810184905290516001600160a01b0390921691636cc9f17e91602480820192602092909190829003018186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b505115611a43576119b784611d90565b6040805162461bcd60e51b815260206004820152601860248201527f5374617465206f66205647206973206e6f742066696e616c0000000000000000604482015290519081900360640190fd5b6000818060005411611ad7576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b6006610606565b600080876006811115611aed57fe5b1415611b09578564e8d4a510008484025b0486010190506116ce565b6001876006811115611b1757fe5b1415611b2c578564e8d4a51000848402611afe565b6003876006811115611b3a57fe5b1415611bdb5760035460408051631b8798d560e11b81526004810189905260248101889052604481018790526064810186905260848101859052905188926001600160a01b03169163370f31aa9160a4808301926020929190829003018186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b50510190506116ce565b6005876006811115611be957fe5b1480611c0057506004876006811115611bfe57fe5b145b80611c1657506002876006811115611c1457fe5b145b80611c2c57506006876006811115611c2a57fe5b145b156116ce575060006116ce565b6000908152600160209081526040808320805460ff191690556002909152812055565b6000818152600460208190526040822080546001600160a01b031990811682556001820180548216905560028201849055600382018490559181018054909216909155600581018290556006810182905560080155611cba81611c39565b50565b808060005411611d02576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b611d0b82611c5c565b6000828152600460208190526040909120600901805460ff19166001835b02179055506000828152600460205260409020600901547fce5d57dc06bffee515dc9f8ca3a267203dbbe503f6bfad687a7120d00756913e90839060ff166006811115611d7257fe5b6040805192835260ff90911660208301528051918290030190a15050565b808060005411611dd5576040805162461bcd60e51b81526020600482015260166024820152600080516020611f24833981519152604482015290519081900360640190fd5b611dde82611c5c565b600082815260046020526040902060090180546005919060ff1916600183611d29565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906101208201529056fe53746174652073686f756c642062652057616974696e67436f6e6669726d6174696f6e446561646c696e65206973206e6f74206f76657220666f7220746869732073706563696669632073746174655374617465206973206e6f742057616974696e674368616c6c656e67652c2063616e6e6f742077696e427956474368616c6c656e67657220616e6420436c61696d6572206e65656420746f206469666665724661696c20746f20436c61696d566963746f7279427954696d6520696e2063757272656e7420636f6e646974696f6e496e646578206e6f7420696e7374616e74696174656400000000000000000000a26469706673582212203fcba7868bcd1ad10e523b5fb225fd029d795d1e2d7ef79023a277abc5b5406664736f6c63430007040033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "devdoc": {
    "kind": "dev",
    "methods": {
      "challenge(uint256)": {
        "params": {
          "_index": "Index of compute instance which challenger is starting the VG."
        }
      },
      "confirm(uint256)": {
        "params": {
          "_index": "Index of compute instance that the challenger is confirming the claim."
        }
      },
      "getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)": {
        "params": {
          "_maxCycle": "number of instructions until the machine is forcibly halted",
          "_picoSecondsToRunInsn": "time the offchain will take to run one instruction"
        }
      },
      "instantiate(address,address,uint256,address,bytes32,uint256)": {
        "params": {
          "_challenger": "address of the challenger.",
          "_claimer": "address of the claimer.",
          "_finalTime": "max cycle of the machine for that computation",
          "_initialHash": "hash in which both claimer and challenger agree on",
          "_machineAddress": "address of the machine that will run the instruction",
          "_roundDuration": "duration of the round (security param)"
        },
        "returns": {
          "_0": "Compute index."
        }
      },
      "submitClaim(uint256,bytes32)": {
        "params": {
          "_claimedFinalHash": "hash of the machine after computation is completed.",
          "_index": "Index of instance that the claimer is interacting with"
        }
      },
      "winByVG(uint256)": {
        "params": {
          "_index": "Index of compute instance which challenger is starting the VG."
        }
      }
    },
    "version": 1
  },
  "evm": {
    "bytecode": {
      "generatedSources": [],
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1FE0 CODESIZE SUB DUP1 PUSH2 0x1FE0 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F79 DUP1 PUSH2 0x67 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x137 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA0C222B4 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xC19E71C3 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xC19E71C3 EQ PUSH2 0x3A0 JUMPI DUP1 PUSH4 0xC526656C EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xCE73B628 EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0xD0A068CF EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0xDED4DF63 EQ PUSH2 0x4E9 JUMPI DUP1 PUSH4 0xE174B3BF EQ PUSH2 0x506 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0xA0C222B4 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0xA20D952B EQ PUSH2 0x32C JUMPI DUP1 PUSH4 0xA2DC7973 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0xAB82D9A0 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0xBA0179B5 EQ PUSH2 0x383 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x5748C130 GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x5748C130 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x6547429E EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x6C092EDD EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0x73DF1612 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x82AFD23B EQ PUSH2 0x2EA JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x1FF62AB EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x26987B60 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x370F31AA EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x388E43BE EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x3D46B819 EQ PUSH2 0x1E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x523 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH2 0x56E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x574 JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x630 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6D6 JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x92C JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x97A JUMP JUMPDEST PUSH2 0x288 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD30 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xEE3 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF31 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1199 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x13F0 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x1570 JUMP JUMPDEST PUSH2 0x416 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16D8 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 0x45A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x442 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 0x499 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x481 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 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x17CD JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x181B JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1869 JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A90 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ DUP1 PUSH2 0x567 JUMPI POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x586 PUSH1 0x0 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1ADE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x599 PUSH1 0x1 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1ADE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5AC PUSH1 0x3 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x1ADE JUMP JUMPDEST SWAP2 SWAP1 SWAP3 ADD ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x603 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 0x1F24 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 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x626 JUMPI INVALID JUMPDEST EQ SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x677 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x680 DUP2 PUSH2 0xD30 JUMP JUMPDEST PUSH2 0x6C2 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 PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x71D 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x73D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x75A JUMPI PUSH12 0x57616974696E67436C61696D PUSH1 0xA0 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x77C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7A0 JUMPI PUSH19 0x2BB0B4BA34B733A1B7B73334B936B0BA34B7B7 PUSH1 0x69 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x7C2 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7E8 JUMPI PUSH21 0x436C61696D65724D6973736564446561646C696E65 PUSH1 0x58 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x80A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x82B JUMPI PUSH16 0x57616974696E674368616C6C656E6765 PUSH1 0x80 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x84D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x86B JUMPI PUSH13 0x21B430B63632B733B2B92BB7B7 PUSH1 0x99 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x88D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8A8 JUMPI PUSH10 0x21B630B4B6B2B92BB7B7 PUSH1 0xB1 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x8CA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8EA JUMPI PUSH15 0x10DBDB9CD95B9CDD5CD4995CDD5B1D PUSH1 0x8A SHL SWAP2 POP PUSH2 0x62A 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 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x973 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x9C1 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 0x1F24 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 0x606 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x9DC PUSH2 0x1E01 JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x140 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP1 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xA78 JUMPI INVALID JUMPDEST PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xA83 JUMPI INVALID JUMPDEST SWAP1 MSTORE POP SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xA9F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAB7 JUMPI POP PUSH12 0x57616974696E67436C61696D PUSH1 0xA0 SHL JUMPDEST PUSH1 0x1 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xACA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAE9 JUMPI POP PUSH19 0x2BB0B4BA34B733A1B7B73334B936B0BA34B7B7 PUSH1 0x69 SHL JUMPDEST PUSH1 0x2 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xAFC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB1D JUMPI POP PUSH21 0x436C61696D65724D6973736564446561646C696E65 PUSH1 0x58 SHL JUMPDEST PUSH1 0x3 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xB30 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC49 JUMPI POP PUSH1 0x3 SLOAD PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC91927B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD PUSH16 0x57616974696E674368616C6C656E6765 PUSH1 0x80 SHL SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xC91927B SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAF 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 0xBC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SLOAD PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH3 0x2231C3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD SWAP3 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH3 0x446386 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC2E 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 0xC44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP JUMPDEST PUSH1 0x4 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xC5C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC75 JUMPI POP PUSH13 0x21B430B63632B733B2B92BB7B7 PUSH1 0x99 SHL JUMPDEST PUSH1 0x5 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xC88 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC9E JUMPI POP PUSH10 0x21B630B4B6B2B92BB7B7 PUSH1 0xB1 SHL JUMPDEST PUSH1 0x6 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xCB1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xCCC JUMPI POP PUSH15 0x10DBDB9CD95B9CDD5CD4995CDD5B1D PUSH1 0x8A SHL JUMPDEST DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0xCF4 DUP7 PUSH2 0x120 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x28 DUP9 DUP11 PUSH1 0xC0 ADD MLOAD PUSH2 0x1F4 PUSH2 0x1ADE JUMP JUMPDEST DUP7 PUSH1 0x60 ADD MLOAD ADD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD DUP10 PUSH1 0xE0 ADD MLOAD DUP8 SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP POP POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xD8A 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0xDF4 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 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP5 SWAP1 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xE2B JUMPI INVALID JUMPDEST EQ PUSH2 0xE7D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53746174652073686F756C642062652057616974696E67436C61696D00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x7 DUP2 ADD DUP8 SWAP1 SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD DUP8 DUP2 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x1E9358F673FF367487CE56F136412AE5B69BF2C06E223AAD2756D748C2A9B52A SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xF2A 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x606 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xF76 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 0x1F24 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 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE DUP4 KECCAK256 PUSH1 0x9 DUP2 ADD SLOAD SWAP3 DUP2 ADD SLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SLOAD DUP7 SWAP5 SWAP4 PUSH2 0xFC1 SWAP4 PUSH1 0xFF SWAP1 SWAP2 AND SWAP3 SWAP2 PUSH1 0x28 SWAP2 SWAP1 PUSH2 0x1F4 PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD ADD TIMESTAMP GT SWAP1 POP DUP1 PUSH2 0x1014 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1E77 PUSH1 0x2C SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 ISZERO PUSH2 0x1057 JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1055 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x10ED JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x2 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH2 0x1089 DUP5 PUSH2 0x1C39 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH32 0xCE5D57DC06BFFEE515DC9F8CA3A267203DBBE503F6BFAD687A7120D00756913E SWAP1 DUP6 SWAP1 PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x10CD JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP PUSH2 0x1194 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 ISZERO PUSH2 0x1135 JUMPI POP PUSH1 0x1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1133 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x115D JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x6 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH2 0x107B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EF5 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x11DE 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x1245 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 SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP4 SWAP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x127F JUMPI INVALID JUMPDEST EQ PUSH2 0x12BB JUMPI 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 0x1E54 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD DUP4 DUP8 ADD SLOAD PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x7 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD DUP8 MLOAD PUSH4 0x20B7387 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP11 DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE SWAP4 DUP6 AND PUSH1 0x24 DUP11 ADD MSTORE PUSH1 0x44 DUP10 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC4 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 MLOAD SWAP5 AND SWAP4 PUSH4 0x20B73870 SWAP4 PUSH1 0xE4 DUP1 DUP6 ADD SWAP5 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1374 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 0x138A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA895DA4B794AEBA8D8082DB237265459DB7B7FFDB5AA7C2332A7C5EAFBFAE735 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1435 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x149C 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 SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP4 SWAP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x14D6 JUMPI INVALID JUMPDEST EQ PUSH2 0x1512 JUMPI 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 0x1E54 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x6 OR SWAP1 SSTORE PUSH2 0x1537 DUP5 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA832892B4543448B594422A93BF38C889D54AE5938A065C6EC5F4636161F522A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x15C3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1ED0 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP4 SSTORE PUSH1 0x1 DUP1 DUP5 ADD DUP1 SLOAD DUP14 DUP5 AND SWAP1 DUP6 AND OR SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP12 SWAP1 SSTORE SWAP4 DUP4 ADD DUP1 SLOAD SWAP2 DUP11 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x9 DUP2 ADD DUP1 SLOAD SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 PUSH1 0xFF NOT AND SWAP1 DUP4 MUL OR SWAP1 SSTORE POP TIMESTAMP PUSH1 0x3 DUP3 ADD SSTORE PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP11 AND DUP4 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE DUP8 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP6 SWAP1 MSTORE MLOAD PUSH32 0x9F53C9493351536908D5EFD56DA31DFB5A53A510AC3E216AFE64AF077B558D50 SWAP2 DUP2 SWAP1 SUB PUSH1 0xE0 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 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP1 DUP1 PUSH1 0x3 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x16FF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x17A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP5 POP SWAP1 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x3 SLOAD DUP5 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP5 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x175F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD DUP3 MLOAD SWAP1 SWAP2 DUP4 SWAP2 PUSH2 0x1794 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17C6 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 SWAP3 POP SWAP1 POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1814 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1862 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 PUSH2 0x606 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x18AE 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 0x1F24 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 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP2 PUSH1 0x3 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x18E6 JUMPI INVALID JUMPDEST EQ PUSH2 0x1922 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EA3 PUSH1 0x2D SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 PUSH1 0x8 ADD SLOAD PUSH1 0x3 SLOAD DUP5 MLOAD PUSH4 0xB6B5C319 PUSH1 0xE0 SHL DUP2 MSTORE SWAP4 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 MLOAD SWAP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0xB6B5C319 SWAP3 PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x19BD JUMPI PUSH2 0x19B7 DUP5 PUSH2 0x1CBD JUMP JUMPDEST POP PUSH2 0x1194 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3664F8BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x6CC9F17E SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D 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 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1A43 JUMPI PUSH2 0x19B7 DUP5 PUSH2 0x1D90 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374617465206F66205647206973206E6F742066696E616C0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1AD7 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1AED JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1B09 JUMPI DUP6 PUSH5 0xE8D4A51000 DUP5 DUP5 MUL JUMPDEST DIV DUP7 ADD ADD SWAP1 POP PUSH2 0x16CE JUMP JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1B17 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1B2C JUMPI DUP6 PUSH5 0xE8D4A51000 DUP5 DUP5 MUL PUSH2 0x1AFE JUMP JUMPDEST PUSH1 0x3 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1B3A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1BDB JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B8798D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x370F31AA SWAP2 PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BBB 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 0x1BD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADD SWAP1 POP PUSH2 0x16CE JUMP JUMPDEST PUSH1 0x5 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1BE9 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x1C00 JUMPI POP PUSH1 0x4 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1BFE JUMPI INVALID JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x1C16 JUMPI POP PUSH1 0x2 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1C14 JUMPI INVALID JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x1C2C JUMPI POP PUSH1 0x6 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1C2A JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x16CE JUMPI POP PUSH1 0x0 PUSH2 0x16CE 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 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2 DUP3 ADD DUP5 SWAP1 SSTORE PUSH1 0x3 DUP3 ADD DUP5 SWAP1 SSTORE SWAP2 DUP2 ADD DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x8 ADD SSTORE PUSH2 0x1CBA DUP2 PUSH2 0x1C39 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1D02 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1D0B DUP3 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH32 0xCE5D57DC06BFFEE515DC9F8CA3A267203DBBE503F6BFAD687A7120D00756913E SWAP1 DUP4 SWAP1 PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1D72 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1DD5 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1DDE DUP3 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x5 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH2 0x1D29 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x140 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x120 DUP3 ADD MSTORE SWAP1 JUMP INVALID MSTORE8 PUSH21 0x6174652073686F756C642062652057616974696E67 NUMBER PUSH16 0x6E6669726D6174696F6E446561646C69 PUSH15 0x65206973206E6F74206F7665722066 PUSH16 0x72207468697320737065636966696320 PUSH20 0x746174655374617465206973206E6F7420576169 PUSH21 0x696E674368616C6C656E67652C2063616E6E6F7420 PUSH24 0x696E427956474368616C6C656E67657220616E6420436C61 PUSH10 0x6D6572206E6565642074 PUSH16 0x206469666665724661696C20746F2043 PUSH13 0x61696D566963746F7279427954 PUSH10 0x6D6520696E2063757272 PUSH6 0x6E7420636F6E PUSH5 0x6974696F6E 0x49 PUSH15 0x646578206E6F7420696E7374616E74 PUSH10 0x61746564000000000000 STOP STOP STOP STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODEHASH 0xCB 0xA7 DUP7 DUP12 0xCD BYTE 0xD1 0xE MSTORE EXTCODESIZE 0x5F 0xB2 0x25 REVERT MUL SWAP14 PUSH26 0x5D1E2D7EF79023A277ABC5B5406664736F6C6343000704003300 ",
      "sourceMap": "1444:18362:4:-:0;;;759:1:2;729:31;;3881:101:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3881:101:4;3935:2;:40;;-1:-1:-1;;;;;;3935:40:4;-1:-1:-1;;;;;3935:40:4;;;;;;;;;1444:18362;;;-1:-1:-1;1444:18362:4;;"
    },
    "deployedBytecode": {
      "generatedSources": [],
      "immutableReferences": {},
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x137 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA0C222B4 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xC19E71C3 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xC19E71C3 EQ PUSH2 0x3A0 JUMPI DUP1 PUSH4 0xC526656C EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xCE73B628 EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0xD0A068CF EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0xDED4DF63 EQ PUSH2 0x4E9 JUMPI DUP1 PUSH4 0xE174B3BF EQ PUSH2 0x506 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0xA0C222B4 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0xA20D952B EQ PUSH2 0x32C JUMPI DUP1 PUSH4 0xA2DC7973 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0xAB82D9A0 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0xBA0179B5 EQ PUSH2 0x383 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x5748C130 GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x5748C130 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x6547429E EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x6C092EDD EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0x73DF1612 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x82AFD23B EQ PUSH2 0x2EA JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x1FF62AB EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x26987B60 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x370F31AA EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x388E43BE EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x3D46B819 EQ PUSH2 0x1E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x523 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH2 0x56E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x574 JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x630 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6D6 JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x92C JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x97A JUMP JUMPDEST PUSH2 0x288 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD30 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xEE3 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF31 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1199 JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x13F0 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x1570 JUMP JUMPDEST PUSH2 0x416 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16D8 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 0x45A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x442 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 0x499 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x481 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 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x17CD JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x181B JUMP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1869 JUMP JUMPDEST PUSH2 0x168 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A90 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ DUP1 PUSH2 0x567 JUMPI POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x586 PUSH1 0x0 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1ADE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x599 PUSH1 0x1 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1ADE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5AC PUSH1 0x3 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x1ADE JUMP JUMPDEST SWAP2 SWAP1 SWAP3 ADD ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x603 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 0x1F24 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 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x626 JUMPI INVALID JUMPDEST EQ SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x677 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x680 DUP2 PUSH2 0xD30 JUMP JUMPDEST PUSH2 0x6C2 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 PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x71D 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x73D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x75A JUMPI PUSH12 0x57616974696E67436C61696D PUSH1 0xA0 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x77C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7A0 JUMPI PUSH19 0x2BB0B4BA34B733A1B7B73334B936B0BA34B7B7 PUSH1 0x69 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x7C2 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7E8 JUMPI PUSH21 0x436C61696D65724D6973736564446561646C696E65 PUSH1 0x58 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x80A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x82B JUMPI PUSH16 0x57616974696E674368616C6C656E6765 PUSH1 0x80 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x84D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x86B JUMPI PUSH13 0x21B430B63632B733B2B92BB7B7 PUSH1 0x99 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x88D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8A8 JUMPI PUSH10 0x21B630B4B6B2B92BB7B7 PUSH1 0xB1 SHL SWAP2 POP PUSH2 0x62A JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x8CA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8EA JUMPI PUSH15 0x10DBDB9CD95B9CDD5CD4995CDD5B1D PUSH1 0x8A SHL SWAP2 POP PUSH2 0x62A 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 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x973 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x9C1 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 0x1F24 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 0x606 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x9DC PUSH2 0x1E01 JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x140 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP1 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xA78 JUMPI INVALID JUMPDEST PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xA83 JUMPI INVALID JUMPDEST SWAP1 MSTORE POP SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xA9F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAB7 JUMPI POP PUSH12 0x57616974696E67436C61696D PUSH1 0xA0 SHL JUMPDEST PUSH1 0x1 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xACA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAE9 JUMPI POP PUSH19 0x2BB0B4BA34B733A1B7B73334B936B0BA34B7B7 PUSH1 0x69 SHL JUMPDEST PUSH1 0x2 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xAFC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB1D JUMPI POP PUSH21 0x436C61696D65724D6973736564446561646C696E65 PUSH1 0x58 SHL JUMPDEST PUSH1 0x3 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xB30 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC49 JUMPI POP PUSH1 0x3 SLOAD PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC91927B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD PUSH16 0x57616974696E674368616C6C656E6765 PUSH1 0x80 SHL SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xC91927B SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAF 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 0xBC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SLOAD PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH3 0x2231C3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD SWAP3 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH3 0x446386 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC2E 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 0xC44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP JUMPDEST PUSH1 0x4 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xC5C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC75 JUMPI POP PUSH13 0x21B430B63632B733B2B92BB7B7 PUSH1 0x99 SHL JUMPDEST PUSH1 0x5 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xC88 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC9E JUMPI POP PUSH10 0x21B630B4B6B2B92BB7B7 PUSH1 0xB1 SHL JUMPDEST PUSH1 0x6 DUP5 PUSH2 0x120 ADD MLOAD PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xCB1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xCCC JUMPI POP PUSH15 0x10DBDB9CD95B9CDD5CD4995CDD5B1D PUSH1 0x8A SHL JUMPDEST DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0xCF4 DUP7 PUSH2 0x120 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x28 DUP9 DUP11 PUSH1 0xC0 ADD MLOAD PUSH2 0x1F4 PUSH2 0x1ADE JUMP JUMPDEST DUP7 PUSH1 0x60 ADD MLOAD ADD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD DUP10 PUSH1 0xE0 ADD MLOAD DUP8 SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP SWAP12 POP POP POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xD8A 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0xDF4 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 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP5 SWAP1 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xE2B JUMPI INVALID JUMPDEST EQ PUSH2 0xE7D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53746174652073686F756C642062652057616974696E67436C61696D00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x7 DUP2 ADD DUP8 SWAP1 SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD DUP8 DUP2 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x1E9358F673FF367487CE56F136412AE5B69BF2C06E223AAD2756D748C2A9B52A SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xF2A 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x606 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xF76 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 0x1F24 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 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE DUP4 KECCAK256 PUSH1 0x9 DUP2 ADD SLOAD SWAP3 DUP2 ADD SLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SLOAD DUP7 SWAP5 SWAP4 PUSH2 0xFC1 SWAP4 PUSH1 0xFF SWAP1 SWAP2 AND SWAP3 SWAP2 PUSH1 0x28 SWAP2 SWAP1 PUSH2 0x1F4 PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD ADD TIMESTAMP GT SWAP1 POP DUP1 PUSH2 0x1014 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1E77 PUSH1 0x2C SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 ISZERO PUSH2 0x1057 JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1055 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x10ED JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x2 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH2 0x1089 DUP5 PUSH2 0x1C39 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH32 0xCE5D57DC06BFFEE515DC9F8CA3A267203DBBE503F6BFAD687A7120D00756913E SWAP1 DUP6 SWAP1 PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x10CD JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP PUSH2 0x1194 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 ISZERO PUSH2 0x1135 JUMPI POP PUSH1 0x1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1133 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x115D JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x6 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH2 0x107B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EF5 PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x11DE 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x1245 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 SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP4 SWAP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x127F JUMPI INVALID JUMPDEST EQ PUSH2 0x12BB JUMPI 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 0x1E54 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD DUP4 DUP8 ADD SLOAD PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x7 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD DUP8 MLOAD PUSH4 0x20B7387 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP11 DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE SWAP4 DUP6 AND PUSH1 0x24 DUP11 ADD MSTORE PUSH1 0x44 DUP10 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC4 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 MLOAD SWAP5 AND SWAP4 PUSH4 0x20B73870 SWAP4 PUSH1 0xE4 DUP1 DUP6 ADD SWAP5 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1374 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 0x138A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA895DA4B794AEBA8D8082DB237265459DB7B7FFDB5AA7C2332A7C5EAFBFAE735 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1435 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 0x1F24 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x149C 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 SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP4 SWAP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x14D6 JUMPI INVALID JUMPDEST EQ PUSH2 0x1512 JUMPI 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 0x1E54 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 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x6 OR SWAP1 SSTORE PUSH2 0x1537 DUP5 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA832892B4543448B594422A93BF38C889D54AE5938A065C6EC5F4636161F522A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x15C3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1ED0 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP4 SSTORE PUSH1 0x1 DUP1 DUP5 ADD DUP1 SLOAD DUP14 DUP5 AND SWAP1 DUP6 AND OR SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP12 SWAP1 SSTORE SWAP4 DUP4 ADD DUP1 SLOAD SWAP2 DUP11 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x9 DUP2 ADD DUP1 SLOAD SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 PUSH1 0xFF NOT AND SWAP1 DUP4 MUL OR SWAP1 SSTORE POP TIMESTAMP PUSH1 0x3 DUP3 ADD SSTORE PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP11 AND DUP4 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE DUP8 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP6 SWAP1 MSTORE MLOAD PUSH32 0x9F53C9493351536908D5EFD56DA31DFB5A53A510AC3E216AFE64AF077B558D50 SWAP2 DUP2 SWAP1 SUB PUSH1 0xE0 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 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP1 DUP1 PUSH1 0x3 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x16FF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x17A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP5 POP SWAP1 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x3 SLOAD DUP5 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP5 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x175F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD DUP3 MLOAD SWAP1 SWAP2 DUP4 SWAP2 PUSH2 0x1794 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17C6 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 SWAP3 POP SWAP1 POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1814 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1862 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 PUSH2 0x606 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x18AE 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 0x1F24 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 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP2 PUSH1 0x3 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x18E6 JUMPI INVALID JUMPDEST EQ PUSH2 0x1922 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EA3 PUSH1 0x2D SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 PUSH1 0x8 ADD SLOAD PUSH1 0x3 SLOAD DUP5 MLOAD PUSH4 0xB6B5C319 PUSH1 0xE0 SHL DUP2 MSTORE SWAP4 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 MLOAD SWAP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0xB6B5C319 SWAP3 PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x19BD JUMPI PUSH2 0x19B7 DUP5 PUSH2 0x1CBD JUMP JUMPDEST POP PUSH2 0x1194 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3664F8BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x6CC9F17E SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D 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 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1A43 JUMPI PUSH2 0x19B7 DUP5 PUSH2 0x1D90 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374617465206F66205647206973206E6F742066696E616C0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1AD7 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 PUSH2 0x606 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1AED JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1B09 JUMPI DUP6 PUSH5 0xE8D4A51000 DUP5 DUP5 MUL JUMPDEST DIV DUP7 ADD ADD SWAP1 POP PUSH2 0x16CE JUMP JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1B17 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1B2C JUMPI DUP6 PUSH5 0xE8D4A51000 DUP5 DUP5 MUL PUSH2 0x1AFE JUMP JUMPDEST PUSH1 0x3 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1B3A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1BDB JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B8798D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x370F31AA SWAP2 PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BBB 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 0x1BD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADD SWAP1 POP PUSH2 0x16CE JUMP JUMPDEST PUSH1 0x5 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1BE9 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x1C00 JUMPI POP PUSH1 0x4 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1BFE JUMPI INVALID JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x1C16 JUMPI POP PUSH1 0x2 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1C14 JUMPI INVALID JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x1C2C JUMPI POP PUSH1 0x6 DUP8 PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1C2A JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x16CE JUMPI POP PUSH1 0x0 PUSH2 0x16CE 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 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2 DUP3 ADD DUP5 SWAP1 SSTORE PUSH1 0x3 DUP3 ADD DUP5 SWAP1 SSTORE SWAP2 DUP2 ADD DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x8 ADD SSTORE PUSH2 0x1CBA DUP2 PUSH2 0x1C39 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1D02 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1D0B DUP3 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH32 0xCE5D57DC06BFFEE515DC9F8CA3A267203DBBE503F6BFAD687A7120D00756913E SWAP1 DUP4 SWAP1 PUSH1 0xFF AND PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1D72 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1DD5 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 0x1F24 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1DDE DUP3 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH1 0x5 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH2 0x1D29 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x140 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x120 DUP3 ADD MSTORE SWAP1 JUMP INVALID MSTORE8 PUSH21 0x6174652073686F756C642062652057616974696E67 NUMBER PUSH16 0x6E6669726D6174696F6E446561646C69 PUSH15 0x65206973206E6F74206F7665722066 PUSH16 0x72207468697320737065636966696320 PUSH20 0x746174655374617465206973206E6F7420576169 PUSH21 0x696E674368616C6C656E67652C2063616E6E6F7420 PUSH24 0x696E427956474368616C6C656E67657220616E6420436C61 PUSH10 0x6D6572206E6565642074 PUSH16 0x206469666665724661696C20746F2043 PUSH13 0x61696D566963746F7279427954 PUSH10 0x6D6520696E2063757272 PUSH6 0x6E7420636F6E PUSH5 0x6974696F6E 0x49 PUSH15 0x646578206E6F7420696E7374616E74 PUSH10 0x61746564000000000000 STOP STOP STOP STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODEHASH 0xCB 0xA7 DUP7 DUP12 0xCD BYTE 0xD1 0xE MSTORE EXTCODESIZE 0x5F 0xB2 0x25 REVERT MUL SWAP14 PUSH26 0x5D1E2D7EF79023A277ABC5B5406664736F6C6343000704003300 ",
      "sourceMap": "1444:18362:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13527:191;;;;;;;;;;;;;;;;-1:-1:-1;13527:191:4;;;;;;-1:-1:-1;;;;;13527:191:4;;:::i;:::-;;;;;;;;;;;;;;;;;;729:31:2;;;:::i;:::-;;;;;;;;;;;;;;;;12457:1064:4;;;;;;;;;;;;;;;;-1:-1:-1;12457:1064:4;;;;;;;;;;;;;;;;;;;;;;:::i;17619:194::-;;;;;;;;;;;;;;;;-1:-1:-1;17619:194:4;;:::i;1405:186:2:-;;;;;;;;;;;;;;;;-1:-1:-1;1405:186:2;;:::i;16362:1006:4:-;;;;;;;;;;;;;;;;-1:-1:-1;16362:1006:4;;:::i;18217:182::-;;;;;;;;;;;;;;;;-1:-1:-1;18217:182:4;;:::i;17819:198::-;;;;;;;;;;;;;;;;-1:-1:-1;17819:198:4;;:::i;14308:2048::-;;;;;;;;;;;;;;;;-1:-1:-1;14308:2048:4;;;;;;-1:-1:-1;;;;;14308:2048:4;;:::i;:::-;;;;;-1:-1:-1;;;;;14308:2048:4;;;;;;-1:-1:-1;;;;;14308:2048:4;;;;;;;;;;;-1:-1:-1;;;;;14308:2048:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1289:110:2;;;;;;;;;;;;;;;;-1:-1:-1;1289:110:2;;:::i;5808:485:4:-;;;;;;;;;;;;;;;;-1:-1:-1;5808:485:4;;;;;;;:::i;:::-;;17433:180;;;;;;;;;;;;;;;;-1:-1:-1;17433:180:4;;:::i;8664:1362::-;;;;;;;;;;;;;;;;-1:-1:-1;8664:1362:4;;:::i;7018:735::-;;;;;;;;;;;;;;;;-1:-1:-1;7018:735:4;;:::i;6434:416::-;;;;;;;;;;;;;;;;-1:-1:-1;6434:416:4;;:::i;4474:1095::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4474:1095:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13724:578::-;;;;;;;;;;;;;;;;-1:-1:-1;13724:578:4;;;;;;-1:-1:-1;;;;;13724:578:4;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18023:188;;;;;;;;;;;;;;;;-1:-1:-1;18023:188:4;;:::i;18405:176::-;;;;;;;;;;;;;;;;-1:-1:-1;18405:176:4;;:::i;8012:594::-;;;;;;;;;;;;;;;;-1:-1:-1;8012:594:4;;:::i;18587:186::-;;;;;;;;;;;;;;;;-1:-1:-1;18587:186:4;;:::i;13527:191::-;13609:4;13634:16;;;:8;:16;;;;;:27;-1:-1:-1;;;;;13634:36:4;;;:27;;:36;;13633:77;;-1:-1:-1;13676:16:4;;;;:8;:16;;;;;:24;;;-1:-1:-1;;;;;13676:33:4;;;:24;;:33;13633:77;13625:86;13527:191;-1:-1:-1;;;13527:191:4:o;729:31:2:-;;;;:::o;12457:1064:4:-;12683:7;12706:20;12729:208;12762:18;12794:14;12822:19;12855:14;12883:9;12906:21;12729:19;:208::i;:::-;12706:231;;12948:27;12978:215;13011:25;13050:14;13078:19;13111:14;13139:9;13162:21;12978:19;:215::i;:::-;12948:245;;13204:24;13231:212;13264:22;13300:14;13328:19;13361:14;13389:9;13412:21;13231:19;:212::i;:::-;13461:34;;;;:53;;12457:1064;-1:-1:-1;;;;;;;12457:1064:4:o;17619:194::-;17733:4;17708:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;17785:25:4::1;17752:58;:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:58;::::0;::::1;;;;;;;17745:65;;989:1:2;17619:194:4::0;;;;:::o;1405:186:2:-;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;16362:1006:4:-;16474:7;16449:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;16534:18:4::1;16501:16:::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:51;::::0;::::1;;;;;;;16497:103;;;-1:-1:-1::0;;;16568:21:4::1;;;;16497:103;16646:25;16613:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:58;::::0;::::1;;;;;;;16609:117;;;-1:-1:-1::0;;;16687:28:4::1;;;;16609:117;16772:27;16739:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:60;::::0;::::1;;;;;;;16735:121;;;-1:-1:-1::0;;;16815:30:4::1;;;;16735:121;16902:22;16869:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:55;::::0;::::1;;;;;;;16865:111;;;-1:-1:-1::0;;;16940:25:4::1;;;;16865:111;17022:19;16989:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:52;::::0;::::1;;;;;;;16985:105;;;-1:-1:-1::0;;;17057:22:4::1;;;;16985:105;17136:16;17103;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:49;::::0;::::1;;;;;;;17099:99;;;-1:-1:-1::0;;;17168:19:4::1;;;;17099:99;17244:21;17211:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:54;::::0;::::1;;;;;;;17207:109;;;-1:-1:-1::0;;;17281:24:4::1;;;;17207:109;17325:36;::::0;;-1:-1:-1;;;17325:36:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17325:36:4;;;;;;;;;;;;;::::1;18217:182:::0;18325:4;18300:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;18377:19:4::1;18344:52;::::0;17819:198;17935:4;17910:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;17987:27:4::1;17954:60;::::0;14308:2048;14381:19;14410:16;14436:17;14463:16;14489:20;14519:18;14547:25;14582:21;14628:19;;:::i;:::-;14650:16;;;;:8;:16;;;;;;;;;14628:38;;;;;;;;;-1:-1:-1;;;;;14628:38:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14628:38:4;-1:-1:-1;14861:1:4;;14837:21;;14947:1;:14;;;:36;;;;;;;;;14943:96;;;-1:-1:-1;;;;14943:96:4;15070:25;15052:1;:14;;;:43;;;;;;;;;15048:110;;;-1:-1:-1;;;;15048:110:4;15189:27;15171:1;:14;;;:45;;;;;;;;;15167:114;;;-1:-1:-1;;;;15167:114:4;15312:22;15294:1;:14;;;:40;;;;;;;;;15290:245;;;-1:-1:-1;15413:2:4;;;15438:12;;;15413:38;;;-1:-1:-1;;;15413:38:4;;;;;;;;;;-1:-1:-1;;;15350:33:4;-1:-1:-1;;;;;15413:2:4;;:24;;:38;;;;;;;;;;;;;;:2;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15413:38:4;15486:2;;;15511:12;;;15486:38;;;-1:-1:-1;;;15486:38:4;;;;;;;;;;15413;;-1:-1:-1;;;;;;15486:2:4;;;;:24;;:38;;;;;15413;;15486;;;;;;;;:2;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15486:38:4;;-1:-1:-1;15290:245:4;15566:19;15548:1;:14;;;:37;;;;;;;;;15544:98;;;-1:-1:-1;;;;15544:98:4;15673:16;15655:1;:14;;;:34;;;;;;;;;15651:92;;;-1:-1:-1;;;;15651:92:4;15774:21;15756:1;:14;;;:39;;;;;;;;;15752:102;;;-1:-1:-1;;;;15752:102:4;15885:1;:12;;;15911:1;:9;;;15954:252;15991:1;:14;;;16023:1;:15;;;16056:2;16101:13;16132:1;:11;;;16161:3;15954:19;:252::i;:::-;15934:1;:16;;;:272;16220:1;:9;;;16243:1;:13;;;16270:1;:11;;;16295:1;:18;;;16327:12;15864:485;;;;;;;;;;;;;;;;;;;;14308:2048;;;;;;;;;;;:::o;1289:110:2:-;1353:4;1377:14;;;:6;:14;;;;;;;;;1289:110::o;5808:485:4:-;5913:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;5936:16:4::1;::::0;;;:8:::1;:16;::::0;;;;:24:::1;;::::0;-1:-1:-1;;;;;5936:24:4::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;;5985:6:4;;6015:16:::3;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;::::0;::::3;;:51;::::0;::::3;;;;;;;6007:92;;;::::0;;-1:-1:-1;;;6007:92:4;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;6109:16;::::0;;;:8:::3;:16;::::0;;;;;;;;:33:::3;::::0;::::3;:53:::0;;;6172:29:::3;;:57:::0;;-1:-1:-1;;6172:57:4::3;6204:25;6172:57;::::0;;6245:41;;;;;;;::::3;::::0;;;;;::::3;::::0;;;;;;;;;::::3;891:1:0::2;989::2::1;5808:485:4::0;;;:::o;17433:180::-;17540:4;17515:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;17592:18:4::1;17559:51;::::0;8664:1362;8749:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;1250:13:::1;::::0;;;:5:::1;:13;::::0;;;;;;;:15;;::::1;::::0;;::::1;::::0;;;8911:8:4::2;:16:::0;;;;;:29:::2;::::0;::::2;::::0;8957:30;;::::2;::::0;9113:26:::2;::::0;;::::2;::::0;8780:6;;1250:13:2;8875:285:4::2;::::0;8911:29:::2;::::0;;::::2;::::0;8957:30;9004:2:::2;::::0;1250:15:2;9156:3:4::2;8875:19;:285::i;:::-;8841:16;::::0;;;:8:::2;:16;::::0;;;;:31:::2;;::::0;:319:::2;8823:15;:337;::::0;-1:-1:-1;8823:337:4;9220:70:::2;;;;-1:-1:-1::0;;;9220:70:4::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9320:16;::::0;;;:8:::2;:16;::::0;;;;:27;-1:-1:-1;;;;;9320:27:4::2;9306:10;:41;9305:100:::0;::::2;;;-1:-1:-1::0;9386:18:4::2;9353:16:::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;::::2;;:51;::::0;::::2;;;;;;;9305:100;9301:322;;;9421:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;:59:::0;;9453:27:::2;::::0;9421:29;-1:-1:-1;;9421:59:4::2;::::0;9453:27;9421:59:::2;;;;;;9494:18;9505:6;9494:10;:18::i;:::-;9561:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;9531:61:::2;::::0;9547:6;;9561:29:::2;;9555:36;::::0;::::2;;;;;;9531:61;::::0;;;;;::::2;::::0;;::::2;;::::0;::::2;::::0;;;;;;;;;::::2;9606:7;;;9301:322;9652:16;::::0;;;:8:::2;:16;::::0;;;;:24:::2;;::::0;-1:-1:-1;;;;;9652:24:4::2;9638:10;:38;9637:104:::0;::::2;;;-1:-1:-1::0;9715:25:4::2;9682:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;::::2;;:58;::::0;::::2;;;;;;;9637:104;9633:320;;;9757:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;:53:::0;;9789:21:::2;::::0;9757:29;-1:-1:-1;;9757:53:4::2;::::0;9789:21;9757:53:::2;::::0;9633:320:::2;9962:57;;-1:-1:-1::0;;;9962:57:4::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:1:2;989::::1;8664:1362:4::0;;:::o;7018:735::-;7094:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;7117:16:4::1;::::0;;;:8:::1;:16;::::0;;;;:27;-1:-1:-1;;;;;7117:27:4::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;;::::2;::::0;;;7169:6:4;;7199:16:::3;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;::::0;::::3;;:58;::::0;::::3;;;;;;;7191:106;;;;-1:-1:-1::0;;;7191:106:4::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7337:2;::::0;::::3;7365:16:::0;;;:8:::3;:16;::::0;;;;;;;:27;;7337:2;7406:24;::::3;::::0;7444:30:::3;::::0;::::3;::::0;7488:24;;::::3;::::0;7526:28:::3;::::0;::::3;::::0;7568:33:::3;::::0;::::3;::::0;7615:26:::3;::::0;;::::3;::::0;7337:305;;-1:-1:-1;;;7337:305:4;;-1:-1:-1;;;;;7365:27:4;;::::3;7337:305:::0;;::::3;::::0;;;;7406:24;;::::3;7337:305:::0;;;;;;;;;;;7488:24;::::3;7337:305:::0;;;;;;;;;;;;;;;;;;;;;;;;:2;::::3;::::0;:14:::3;::::0;:305;;;;;;;;;;;;:2;:305;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;7337:305:4;7307:16:::3;::::0;;;:8:::3;7337:305;7307:16:::0;;;;:27:::3;::::0;::::3;:335:::0;;;;7652:29:::3;;:54:::0;;7684:22:::3;::::0;7652:29;-1:-1:-1;;7652:54:4::3;::::0;7684:22;7652:54:::3;;::::0;;-1:-1:-1;7722:24:4::3;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;891:1:0::2;989::2::1;7018:735:4::0;;:::o;6434:416::-;6508:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;6531:16:4::1;::::0;;;:8:::1;:16;::::0;;;;:27;-1:-1:-1;;;;;6531:27:4::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;;::::2;::::0;;;6583:6:4;;6613:16:::3;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;::::0;::::3;;:58;::::0;::::3;;;;;;;6605:106;;;;-1:-1:-1::0;;;6605:106:4::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6721:16;::::0;;;:8:::3;:16;::::0;;;;:29:::3;;:53:::0;;-1:-1:-1;;6721:53:4::3;6753:21;6721:53;::::0;;6784:21:::3;6721:16:::0;6784:13:::3;:21::i;:::-;6820:23;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;891:1:0::2;989::2::1;6434:416:4::0;;:::o;4474:1095::-;4699:7;4745:8;-1:-1:-1;;;;;4730:23:4;:11;-1:-1:-1;;;;;4730:23:4;;;4722:73;;;;-1:-1:-1;;;4722:73:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:34;4851:12;;4842:22;;:8;:22;;;;;;;4874:40;;-1:-1:-1;;;;;4874:40:4;;;-1:-1:-1;;;;;;4874:40:4;;;;;;;4924:23;;;:34;;;;;;;;;;;4968:29;;;:46;;;5024:23;;;:41;;;;;;;;;;;;5075:27;;;:42;;;5127:25;;;:38;;;5175:28;;;:49;;4842:22;;4805:34;5175:28;;-1:-1:-1;;5175:49:4;;4805:34;5175:49;;;;-1:-1:-1;5267:15:4;5234:30;;;:48;5326:12;;5298:195;;;;;;-1:-1:-1;;;;;5298:195:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5504:20:4;5511:12;;5504:20;;5527:4;5504:20;;;;;;;:27;;-1:-1:-1;;5504:27:4;;;;;5548:14;;;;;;;;4474:1095;;;;;;;;;:::o;13724:578::-;13812:27;;;;14003:22;13970:16;;;;:8;:16;;;;;:29;;;;;:55;;;;;;;;;13966:247;;;14045:16;;;14059:1;14045:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14079:16:4;;;14093:1;14079:16;;;;;;;;;14041:20;;-1:-1:-1;14093:1:4;-1:-1:-1;14079:16:4;;;;;;;;;-1:-1:-1;;14124:2:4;;14109:4;;14075:20;;-1:-1:-1;;;;;;14124:2:4;;14109:4;;-1:-1:-1;14124:2:4;;14109:4;;;;-1:-1:-1;;;;;14109:18:4;;;:4;;;;;;;;;;:18;14148:16;;;;:8;:16;;;;;;:27;;;14141:4;;14148:27;;14141:1;;:4;;;;;;;;;;;;;:34;14197:1;;-1:-1:-1;14200:1:4;-1:-1:-1;14189:13:4;;13966:247;-1:-1:-1;;14226:16:4;;;14240:1;14226:16;;;;;;14256;;;;;;;;;14226;-1:-1:-1;14226:16:4;-1:-1:-1;13724:578:4;;;;;;:::o;18023:188::-;18134:4;18109:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;18186:22:4::1;18153:55;::::0;18405:176;18510:4;18485:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;18562:16:4::1;18529:49;::::0;8012:594;8086:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;1250:13:::1;::::0;;;:5:::1;:13;::::0;;;;:15;;::::1;;::::0;;8117:6:4;8180:22:::2;8147:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;::::2;;:55;::::0;::::2;;;;;;;8139:113;;;;-1:-1:-1::0;;;8139:113:4::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8262:15;8280:16:::0;;;:8:::2;:16;::::0;;;;;;;;:27:::2;;::::0;8322:2:::2;::::0;:40;;-1:-1:-1;;;8322:40:4;;;;::::2;::::0;;;;;8280:27;;-1:-1:-1;;;;;8322:2:4::2;::::0;:31:::2;::::0;:40;;;;;8280:16;;8322:40;;;;;:2;:40;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8322:40:4;8318:113:::2;;;8378:22;8393:6;8378:14;:22::i;:::-;8414:7;;;8318:113;8445:2;::::0;:37:::2;::::0;;-1:-1:-1;;;8445:37:4;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;8445:2:4;;::::2;::::0;:28:::2;::::0;:37;;;;;::::2;::::0;;;;;;;;;:2;:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8445:37:4;8441:107:::2;;;8498:19;8510:6;8498:11;:19::i;8441:107::-;8557:42;::::0;;-1:-1:-1;;;8557:42:4;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;18587:186:::0;18697:4;18672:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;18749:21:4::1;18716:54;::::0;10672:1177;10918:7;;10945:6;:28;;;;;;;;;10941:207;;;11123:14;11115:4;11078:33;;;11077:42;;11054:19;:66;:83;11047:90;;;;10941:207;11172:25;11162:6;:35;;;;;;;;;11158:214;;;11347:14;11339:4;11302:33;;;11301:42;;11158:214;11396:22;11386:6;:32;;;;;;;;;11382:262;;;11504:2;;:112;;;-1:-1:-1;;;11504:112:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11619:14;;-1:-1:-1;;;;;11504:2:4;;:25;;:112;;;;;;;;;;;;;;:2;:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11504:112:4;:129;;-1:-1:-1;11497:136:4;;11382:262;11668:16;11658:6;:26;;;;;;;;;:59;;;-1:-1:-1;11698:19:4;11688:6;:29;;;;;;;;;11658:59;:100;;;-1:-1:-1;11731:27:4;11721:6;:37;;;;;;;;;11658:100;:135;;;-1:-1:-1;11772:21:4;11762:6;:31;;;;;;;;;11658:135;11654:189;;;-1:-1:-1;11816:1:4;11809:8;;1597:111:2;1669:5;1652:14;;;:6;:14;;;;;;;;:22;;-1:-1:-1;;1652:22:2;;;1684:5;:13;;;;;:17;1597:111::o;18779:499:4:-;18844:16;;;;:8;:16;;;;;;;18837:34;;-1:-1:-1;;;;;;18837:34:4;;;;;;18888:24;;18881:31;;;;;;18929:30;;;18922:37;;;18976:31;;;18969:38;;;19024:24;;;19017:31;;;;;;;;19065:28;;;19058:35;;;19110:26;;;19103:33;;;19216:27;;19209:34;19253:18;18853:6;19253:10;:18::i;:::-;18779:499;:::o;19284:260::-;19357:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;19379:21:4::1;19393:6;19379:13;:21::i;:::-;19410:16;::::0;;;19442:19:::1;19410:16;::::0;;;;;;;:29:::1;;:51:::0;;-1:-1:-1;;19410:51:4::1;::::0;19442:19;19410:51:::1;;;::::0;;-1:-1:-1;19506:16:4::1;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;19476:61:::1;::::0;19492:6;;19506:29:::1;;19500:36;::::0;::::1;;;;;;19476:61;::::0;;;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;19284:260:::0;;:::o;19550:254::-;19620:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;19642:21:4::1;19656:6;19642:13;:21::i;:::-;19673:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;:48:::0;;19705:16:::1;::::0;19673:29;-1:-1:-1;;19673:48:4::1;::::0;19705:16;19673:48:::1;::::0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"
    },
    "gasEstimates": {
      "creation": {
        "codeDepositCost": "1611400",
        "executionCost": "infinite",
        "totalCost": "infinite"
      },
      "external": {
        "challenge(uint256)": "infinite",
        "claimVictoryByTime(uint256)": "infinite",
        "confirm(uint256)": "infinite",
        "currentIndex()": "1044",
        "getCurrentState(uint256)": "infinite",
        "getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)": "infinite",
        "getNonce(uint256)": "infinite",
        "getState(uint256,address)": "infinite",
        "getSubInstances(uint256,address)": "infinite",
        "instantiate(address,address,uint256,address,bytes32,uint256)": "infinite",
        "isActive(uint256)": "1229",
        "isConcerned(uint256,address)": "2138",
        "stateIsChallengerWon(uint256)": "infinite",
        "stateIsClaimerMissedDeadline(uint256)": "infinite",
        "stateIsClaimerWon(uint256)": "infinite",
        "stateIsConsensusResult(uint256)": "infinite",
        "stateIsWaitingChallange(uint256)": "infinite",
        "stateIsWaitingClaim(uint256)": "infinite",
        "stateIsWaitingConfirmation(uint256)": "infinite",
        "submitClaim(uint256,bytes32)": "infinite",
        "winByVG(uint256)": "infinite"
      },
      "internal": {
        "challengerWins(uint256)": "infinite",
        "claimerWins(uint256)": "infinite",
        "clearInstance(uint256)": "113616",
        "getMaxStateDuration(enum ComputeInterface.state,uint256,uint256,uint256,uint256,uint256)": "infinite"
      }
    },
    "methodIdentifiers": {
      "challenge(uint256)": "ab82d9a0",
      "claimVictoryByTime(uint256)": "a2dc7973",
      "confirm(uint256)": "ba0179b5",
      "currentIndex()": "26987b60",
      "getCurrentState(uint256)": "5748c130",
      "getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)": "370f31aa",
      "getNonce(uint256)": "3d46b819",
      "getState(uint256,address)": "73df1612",
      "getSubInstances(uint256,address)": "c526656c",
      "instantiate(address,address,uint256,address,bytes32,uint256)": "c19e71c3",
      "isActive(uint256)": "82afd23b",
      "isConcerned(uint256,address)": "01ff62ab",
      "stateIsChallengerWon(uint256)": "6547429e",
      "stateIsClaimerMissedDeadline(uint256)": "6c092edd",
      "stateIsClaimerWon(uint256)": "d0a068cf",
      "stateIsConsensusResult(uint256)": "e174b3bf",
      "stateIsWaitingChallange(uint256)": "ce73b628",
      "stateIsWaitingClaim(uint256)": "a20d952b",
      "stateIsWaitingConfirmation(uint256)": "388e43be",
      "submitClaim(uint256,bytes32)": "a0c222b4",
      "winByVG(uint256)": "ded4df63"
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vgInstantiatorAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"ChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_claimedFinalHash\",\"type\":\"bytes32\"}],\"name\":\"ClaimSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_machineAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_finalTime\",\"type\":\"uint256\"}],\"name\":\"ComputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_state\",\"type\":\"uint8\"}],\"name\":\"ComputeFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"ResultConfirmed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"challenge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"claimVictoryByTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"confirm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"_roundDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeToStartMachine\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partitionSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxCycle\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_picoSecondsToRunInsn\",\"type\":\"uint256\"}],\"name\":\"getMaxInstanceDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_machine\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_finalTime\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_claimedFinalHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_currentState\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getSubInstances\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_machineAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_finalTime\",\"type\":\"uint256\"}],\"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\":\"stateIsChallengerWon\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsClaimerMissedDeadline\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsClaimerWon\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsConsensusResult\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsWaitingChallange\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsWaitingClaim\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsWaitingConfirmation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_claimedFinalHash\",\"type\":\"bytes32\"}],\"name\":\"submitClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"winByVG\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"challenge(uint256)\":{\"params\":{\"_index\":\"Index of compute instance which challenger is starting the VG.\"}},\"confirm(uint256)\":{\"params\":{\"_index\":\"Index of compute instance that the challenger is confirming the claim.\"}},\"getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"_maxCycle\":\"number of instructions until the machine is forcibly halted\",\"_picoSecondsToRunInsn\":\"time the offchain will take to run one instruction\"}},\"instantiate(address,address,uint256,address,bytes32,uint256)\":{\"params\":{\"_challenger\":\"address of the challenger.\",\"_claimer\":\"address of the claimer.\",\"_finalTime\":\"max cycle of the machine for that computation\",\"_initialHash\":\"hash in which both claimer and challenger agree on\",\"_machineAddress\":\"address of the machine that will run the instruction\",\"_roundDuration\":\"duration of the round (security param)\"},\"returns\":{\"_0\":\"Compute index.\"}},\"submitClaim(uint256,bytes32)\":{\"params\":{\"_claimedFinalHash\":\"hash of the machine after computation is completed.\",\"_index\":\"Index of instance that the claimer is interacting with\"}},\"winByVG(uint256)\":{\"params\":{\"_index\":\"Index of compute instance which challenger is starting the VG.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"challenge(uint256)\":{\"notice\":\"Challenger disputes the claim, starting a verification game.\"},\"claimVictoryByTime(uint256)\":{\"notice\":\"Claim victory for opponent timeout.\"},\"confirm(uint256)\":{\"notice\":\"Challenger accepts claim.\"},\"instantiate(address,address,uint256,address,bytes32,uint256)\":{\"notice\":\"Instantiates a compute instance.\"},\"submitClaim(uint256,bytes32)\":{\"notice\":\"Claimer claims the hash of the result of a computation\"},\"winByVG(uint256)\":{\"notice\":\"In case one of the parties wins the verification game, then he or she can call this function to claim victory in this contract as well.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ComputeInstantiator.sol\":\"ComputeInstantiator\"},\"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\"},\"contracts/ComputeInstantiator.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\\n/// @title An instantiator of compute\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/InstantiatorImpl.sol\\\";\\nimport \\\"@cartesi/util/contracts/Decorated.sol\\\";\\nimport \\\"./ComputeInterface.sol\\\";\\nimport \\\"./VGInterface.sol\\\";\\n\\n\\ncontract ComputeInstantiator is InstantiatorImpl, ComputeInterface, Decorated {\\n    // after instantiation, the claimer will submit the final hash\\n    // then the challenger can either accept of challenge.\\n    // in the latter case a verification game will be instantiated\\n    // to resolve the dispute.\\n\\n    VGInterface private vg;\\n\\n    // IMPLEMENT GARBAGE COLLECTOR AFTER AN INSTACE IS FINISHED!\\n    struct ComputeCtx {\\n        address challenger;\\n        address claimer;\\n        uint256 roundDuration; // time interval to interact with this contract\\n        uint256 timeOfLastMove; // last time someone made a move with deadline\\n        address machine; // machine which will run the challenge\\n        bytes32 initialHash;\\n        uint256 finalTime;\\n        bytes32 claimedFinalHash;\\n        uint256 vgInstance; // instance of verification game in case of dispute\\n        state currentState;\\n    }\\n\\n    mapping(uint256 => ComputeCtx) internal instance;\\n\\n    // These are the possible states and transitions of the contract.\\n\\n    // +---+\\n    // |   |\\n    // +---+\\n    //   |\\n    //   | instantiate\\n    //   v\\n    // +--------------+ claimVictoryByTime +-----------------------+\\n    // | WaitingClaim |------------------->| ClaimerMisseddeadline |\\n    // +--------------+                    +-----------------------+\\n    //   |\\n    //   | submitClaim\\n    //   v\\n    // +---------------------+  confirm    +-----------------+\\n    // | WaitingConfirmation |------------>| ConsensusResult |\\n    // +---------------------+ or deadline +-----------------+\\n    //   |\\n    //   | challenge\\n    //   v\\n    // +------------------+ winByVG        +---------------+\\n    // | WaitingChallenge |--------------->| ChallengerWon |\\n    // +------------------+                +---------------+\\n    //   |\\n    //   |\\n    //   |                  winByVG        +------------+\\n    //   +-------------------------------->| ClaimerWon |\\n    //                                     +------------+\\n    //\\n\\n    event ComputeCreated(\\n        uint256 _index,\\n        address _challenger,\\n        address _claimer,\\n        uint256 _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        uint256 _finalTime\\n    );\\n    event ClaimSubmitted(uint256 _index, bytes32 _claimedFinalHash);\\n    event ResultConfirmed(uint256 _index);\\n    event ChallengeStarted(uint256 _index);\\n    event ComputeFinished(uint256 _index, uint8 _state);\\n\\n    constructor(address _vgInstantiatorAddress) {\\n        vg = VGInterface(_vgInstantiatorAddress);\\n    }\\n\\n    /// @notice Instantiates a compute instance.\\n    /// @param _challenger address of the challenger.\\n    /// @param _claimer address of the claimer.\\n    /// @param _roundDuration duration of the round (security param)\\n    /// @param _machineAddress address of the machine that will run the instruction\\n    /// @param _initialHash hash in which both claimer and challenger agree on\\n    /// @param _finalTime max cycle of the machine for that computation\\n    /// @return Compute index.\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        uint256 _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        uint256 _finalTime) public override returns (uint256)\\n    {\\n        require(_challenger != _claimer, \\\"Challenger and Claimer need to differ\\\");\\n        ComputeCtx storage currentInstance = instance[currentIndex];\\n        currentInstance.challenger = _challenger;\\n        currentInstance.claimer = _claimer;\\n        currentInstance.roundDuration = _roundDuration;\\n        currentInstance.machine = _machineAddress;\\n        currentInstance.initialHash = _initialHash;\\n        currentInstance.finalTime = _finalTime;\\n        currentInstance.currentState = state.WaitingClaim;\\n        currentInstance.timeOfLastMove = block.timestamp;\\n\\n        emit ComputeCreated(\\n            currentIndex,\\n            _challenger,\\n            _claimer,\\n            _roundDuration,\\n            _machineAddress,\\n            _initialHash,\\n            _finalTime);\\n\\n        active[currentIndex] = true;\\n        return currentIndex++;\\n    }\\n\\n    /// @notice Claimer claims the hash of the result of a computation\\n    /// @param _index Index of instance that the claimer is interacting with\\n    /// @param _claimedFinalHash hash of the machine after computation is completed.\\n    function submitClaim(uint256 _index, bytes32 _claimedFinalHash) public override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].claimer)\\n        increasesNonce(_index)\\n    {\\n        require(instance[_index].currentState == state.WaitingClaim, \\\"State should be WaitingClaim\\\");\\n        instance[_index].claimedFinalHash = _claimedFinalHash;\\n        instance[_index].currentState = state.WaitingConfirmation;\\n\\n        emit ClaimSubmitted(_index, _claimedFinalHash);\\n    }\\n\\n    /// @notice Challenger accepts claim.\\n    /// @param _index Index of compute instance that the challenger is confirming the claim.\\n    function confirm(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].challenger)\\n        increasesNonce(_index)\\n    {\\n        require(instance[_index].currentState == state.WaitingConfirmation, \\\"State should be WaitingConfirmation\\\");\\n        instance[_index].currentState = state.ConsensusResult;\\n        clearInstance(_index);\\n        emit ResultConfirmed(_index);\\n    }\\n\\n    /// @notice Challenger disputes the claim, starting a verification game.\\n    /// @param _index Index of compute instance which challenger is starting the VG.\\n    function challenge(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].challenger)\\n        increasesNonce(_index)\\n    {\\n        require(instance[_index].currentState == state.WaitingConfirmation, \\\"State should be WaitingConfirmation\\\");\\n        instance[_index].vgInstance = vg.instantiate(\\n            instance[_index].challenger,\\n            instance[_index].claimer,\\n            instance[_index].roundDuration,\\n            instance[_index].machine,\\n            instance[_index].initialHash,\\n            instance[_index].claimedFinalHash,\\n            instance[_index].finalTime);\\n        instance[_index].currentState = state.WaitingChallenge;\\n\\n        emit ChallengeStarted(_index);\\n    }\\n\\n    /// @notice In case one of the parties wins the verification game,\\n    /// then he or she can call this function to claim victory in\\n    /// this contract as well.\\n    /// @param _index Index of compute instance which challenger is starting the VG.\\n    function winByVG(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        increasesNonce(_index)\\n    {\\n        require(instance[_index].currentState == state.WaitingChallenge, \\\"State is not WaitingChallenge, cannot winByVG\\\");\\n        uint256 vgIndex = instance[_index].vgInstance;\\n\\n        if (vg.stateIsFinishedChallengerWon(vgIndex)) {\\n            challengerWins(_index);\\n            return;\\n        }\\n\\n        if (vg.stateIsFinishedClaimerWon(vgIndex)) {\\n            claimerWins(_index);\\n            return;\\n        }\\n        require(false, \\\"State of VG is not final\\\");\\n    }\\n\\n    /// @notice Claim victory for opponent timeout.\\n    function claimVictoryByTime(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        increasesNonce(_index)\\n    {\\n       bool afterDeadline = (block.timestamp > instance[_index].timeOfLastMove + getMaxStateDuration(\\n               instance[_index].currentState,\\n               instance[_index].roundDuration,\\n               40, // time to start machine\\n               1, // vg is not instantiated, so it doesnt matter\\n               instance[_index].finalTime,\\n               500) // pico seconds to run instruction\\n           );\\n\\n\\n        require(afterDeadline, \\\"Deadline is not over for this specific state\\\");\\n\\n        if ((msg.sender == instance[_index].challenger) && (instance[_index].currentState == state.WaitingClaim)) {\\n            instance[_index].currentState = state.ClaimerMissedDeadline;\\n            deactivate(_index);\\n            emit ComputeFinished(_index, uint8(instance[_index].currentState));\\n            return;\\n        }\\n\\n        if ((msg.sender == instance[_index].claimer) && (instance[_index].currentState == state.WaitingConfirmation)) {\\n            instance[_index].currentState = state.ConsensusResult;\\n            deactivate(_index);\\n            emit ComputeFinished(_index, uint8(instance[_index].currentState));\\n            return;\\n        }\\n        revert(\\\"Fail to ClaimVictoryByTime in current condition\\\");\\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    /// @param _partitionSize size of partition, how many instructions the\\n    //          will run to reach the necessary hash\\n    /// @param _maxCycle is the maximum amount of steps a machine can perform\\n    //          before being forced into becoming halted\\n    /// @param _picoSecondsToRunInsn time the offchain will take to run one instruction\\n    function getMaxStateDuration(\\n        state _state,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) private view returns (uint256)\\n    {\\n        if (_state == state.WaitingClaim) {\\n            // time to run entire machine + time to react\\n            return _timeToStartMachine + ((_maxCycle * _picoSecondsToRunInsn) / 1e12) + _roundDuration;\\n        }\\n\\n        if (_state == state.WaitingConfirmation) {\\n            // time to run entire machine + time to react\\n            return _timeToStartMachine + ((_maxCycle * _picoSecondsToRunInsn) / 1e12) + _roundDuration;\\n        }\\n\\n        if (_state == state.WaitingChallenge) {\\n            // time to run a verification game + time to react\\n            return vg.getMaxInstanceDuration(_roundDuration, _timeToStartMachine, _partitionSize, _maxCycle, _picoSecondsToRunInsn) + _roundDuration;\\n        }\\n\\n        if (_state == state.ClaimerWon || _state == state.ChallengerWon || _state == state.ClaimerMissedDeadline || _state == state.ConsensusResult) {\\n            return 0; // final state\\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    /// @param _partitionSize size of partition, how many instructions the\\n    //          will run to reach the necessary hash\\n    /// @param _maxCycle number of instructions until the machine is forcibly halted\\n    /// @param _picoSecondsToRunInsn time the offchain will take to run one instruction\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) public view returns (uint256)\\n    {\\n        uint256 waitingClaim = getMaxStateDuration(\\n            state.WaitingClaim,\\n            _roundDuration,\\n            _timeToStartMachine,\\n            _partitionSize,\\n            _maxCycle,\\n            _picoSecondsToRunInsn\\n        );\\n\\n        uint256 waitingConfirmation = getMaxStateDuration(\\n            state.WaitingConfirmation,\\n            _roundDuration,\\n            _timeToStartMachine,\\n            _partitionSize,\\n            _maxCycle,\\n            _picoSecondsToRunInsn\\n        );\\n\\n        uint256 waitingChallenge = getMaxStateDuration(\\n            state.WaitingChallenge,\\n            _roundDuration,\\n            _timeToStartMachine,\\n            _partitionSize,\\n            _maxCycle,\\n            _picoSecondsToRunInsn\\n        );\\n\\n        return waitingClaim + waitingConfirmation + waitingChallenge;\\n    }\\n\\n    function isConcerned(uint256 _index, address _user) public override view returns (bool) {\\n        return ((instance[_index].challenger == _user) || (instance[_index].claimer == _user));\\n    }\\n\\n    function getSubInstances(uint256 _index, address)\\n        public override view returns (address[] memory _addresses,\\n                            uint256[] memory _indices)\\n    {\\n        address[] memory a;\\n        uint256[] memory i;\\n        if (instance[_index].currentState == state.WaitingChallenge) {\\n            a = new address[](1);\\n            i = new uint256[](1);\\n            a[0] = address(vg);\\n            i[0] = instance[_index].vgInstance;\\n            return (a, i);\\n        }\\n        a = new address[](0);\\n        i = new uint256[](0);\\n        return (a, i);\\n    }\\n\\n    function getState(uint256 _index, address) public view returns\\n        ( address _challenger,\\n        address _claimer,\\n        uint256 _deadline,\\n        address _machine,\\n        bytes32 _initialHash,\\n        uint256 _finalTime,\\n        bytes32 _claimedFinalHash,\\n        bytes32 _currentState\\n        )\\n    {\\n        ComputeCtx memory i = instance[_index];\\n\\n        // we have to duplicate the code for getCurrentState because of\\n        // \\\"stack too deep\\\"\\n\\n        // this variables only matter on challenging state\\n        uint256 partitionSize = 1;\\n        uint256 partitionGameIndex = 1;\\n\\n        bytes32 currentState;\\n        if (i.currentState == state.WaitingClaim) {\\n            currentState = \\\"WaitingClaim\\\";\\n        }\\n        if (i.currentState == state.WaitingConfirmation) {\\n            currentState = \\\"WaitingConfirmation\\\";\\n        }\\n        if (i.currentState == state.ClaimerMissedDeadline) {\\n            currentState = \\\"ClaimerMissedDeadline\\\";\\n        }\\n        if (i.currentState == state.WaitingChallenge) {\\n            currentState = \\\"WaitingChallenge\\\";\\n            partitionSize = vg.getPartitionQuerySize(i.vgInstance);\\n            partitionGameIndex = vg.getPartitionGameIndex(i.vgInstance);\\n        }\\n        if (i.currentState == state.ChallengerWon) {\\n            currentState = \\\"ChallengerWon\\\";\\n        }\\n        if (i.currentState == state.ClaimerWon) {\\n            currentState = \\\"ClaimerWon\\\";\\n        }\\n        if (i.currentState == state.ConsensusResult) {\\n            currentState = \\\"ConsensusResult\\\";\\n        }\\n\\n        return (\\n            i.challenger,\\n            i.claimer,\\n            i.timeOfLastMove +  getMaxStateDuration(\\n                i.currentState,\\n                i.roundDuration,\\n                40, // time to start machine\\n                partitionSize,\\n                i.finalTime,\\n                500 // pico seconds to run insn\\n            ),\\n            i.machine,\\n            i.initialHash,\\n            i.finalTime,\\n            i.claimedFinalHash,\\n            currentState\\n        );\\n    }\\n\\n    function getCurrentState(uint256 _index) public override view\\n        onlyInstantiated(_index)\\n        returns (bytes32)\\n    {\\n        if (instance[_index].currentState == state.WaitingClaim) {\\n            return \\\"WaitingClaim\\\";\\n        }\\n        if (instance[_index].currentState == state.WaitingConfirmation) {\\n            return \\\"WaitingConfirmation\\\";\\n        }\\n        if (instance[_index].currentState == state.ClaimerMissedDeadline) {\\n            return \\\"ClaimerMissedDeadline\\\";\\n        }\\n        if (instance[_index].currentState == state.WaitingChallenge) {\\n            return \\\"WaitingChallenge\\\";\\n        }\\n        if (instance[_index].currentState == state.ChallengerWon) {\\n            return \\\"ChallengerWon\\\";\\n        }\\n        if (instance[_index].currentState == state.ClaimerWon) {\\n            return \\\"ClaimerWon\\\";\\n        }\\n        if (instance[_index].currentState == state.ConsensusResult) {\\n            return \\\"ConsensusResult\\\";\\n        }\\n        require(false, \\\"Unrecognized state\\\");\\n    }\\n\\n    // remove these functions and change tests accordingly\\n    function stateIsWaitingClaim(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.WaitingClaim; }\\n\\n    function stateIsWaitingConfirmation(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.WaitingConfirmation; }\\n\\n    function stateIsClaimerMissedDeadline(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.ClaimerMissedDeadline; }\\n\\n    function stateIsWaitingChallange(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.WaitingChallenge; }\\n\\n    function stateIsChallengerWon(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.ChallengerWon; }\\n\\n    function stateIsClaimerWon(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.ClaimerWon; }\\n\\n    function stateIsConsensusResult(uint256 _index) public view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.ConsensusResult; }\\n\\n    function clearInstance(uint256 _index) internal {\\n        delete instance[_index].challenger;\\n        delete instance[_index].claimer;\\n        delete instance[_index].roundDuration;\\n        delete instance[_index].timeOfLastMove;\\n        delete instance[_index].machine;\\n        delete instance[_index].initialHash;\\n        delete instance[_index].finalTime;\\n        // !!!!!!!!! should call clear in vgInstance !!!!!!!!!\\n        delete instance[_index].vgInstance;\\n        deactivate(_index);\\n    }\\n\\n    function challengerWins(uint256 _index) private\\n        onlyInstantiated(_index)\\n    {\\n        clearInstance(_index);\\n        instance[_index].currentState = state.ChallengerWon;\\n        emit ComputeFinished(_index, uint8(instance[_index].currentState));\\n    }\\n\\n    function claimerWins(uint256 _index) private\\n        onlyInstantiated(_index)\\n    {\\n        clearInstance(_index);\\n        instance[_index].currentState = state.ClaimerWon;\\n        emit ComputeFinished(_index, uint8(instance[_index].currentState));\\n    }\\n}\\n\",\"keccak256\":\"0xd6e2c7fdefe3a6cf10ec4d27127a78abf3b73c7997c1a84efca8c6e8383a2750\",\"license\":\"GPL-3.0-only\"},\"contracts/ComputeInterface.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 compute instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\n\\ninterface ComputeInterface is Instantiator {\\n    enum state {\\n        WaitingClaim,\\n        WaitingConfirmation,\\n        ClaimerMissedDeadline,\\n        WaitingChallenge,\\n        ChallengerWon,\\n        ClaimerWon,\\n        ConsensusResult\\n    }\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        uint256 _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        uint256 _finalTime\\n    ) external returns (uint256);\\n\\n    function submitClaim(uint256 _index, bytes32 _claimedFinalHash) external;\\n\\n    function confirm(uint256 _index) external;\\n\\n    function challenge(uint256 _index) external;\\n\\n    function winByVG(uint256 _index) external;\\n\\n    function claimVictoryByTime(uint256 _index) external;\\n}\\n\",\"keccak256\":\"0x481c569ec5f7c4e0e4842311e4c0d3676f79e707b88122eed3be06a8e4c34612\",\"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/MachineInterface.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\\n/// @title MachineInterface interface contract\\npragma solidity ^0.7.0;\\n\\n\\ninterface MachineInterface {\\n    event StepGiven(uint8 exitCode);\\n\\n    function step(\\n        uint64[] memory _rwPositions,\\n        bytes8[] memory _rwValues,\\n        bool[] memory _isRead\\n    ) external returns (uint8, uint256);\\n\\n    function getMemoryInteractor() external view returns (address);\\n}\\n\",\"keccak256\":\"0x227a51ac54bc8246aec29d73bc48701c6c2bcd0ad0b606105c079f31283526d7\",\"license\":\"GPL-3.0-only\"},\"contracts/PartitionInterface.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 Abstract interface for partition instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\n\\ninterface PartitionInterface is Instantiator {\\n    enum state {\\n        WaitingQuery,\\n        WaitingHashes,\\n        ChallengerWon,\\n        ClaimerWon,\\n        DivergenceFound\\n    }\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        bytes32 _initialHash,\\n        bytes32 _claimerFinalHash,\\n        uint256 _finalTime,\\n        uint256 _querySize,\\n        uint256 _roundDuration\\n    ) external returns (uint256);\\n\\n    function timeHash(uint256 _index, uint256 key)\\n        external\\n        view\\n        returns (bytes32);\\n\\n    function divergenceTime(uint256 _index) external view returns (uint256);\\n\\n    function stateIsWaitingQuery(uint256 _index) external view returns (bool);\\n\\n    function stateIsWaitingHashes(uint256 _index) external view returns (bool);\\n\\n    function stateIsChallengerWon(uint256 _index) external view returns (bool);\\n\\n    function stateIsClaimerWon(uint256 _index) external view returns (bool);\\n\\n    function stateIsDivergenceFound(uint256 _index)\\n        external\\n        view\\n        returns (bool);\\n\\n    function getPartitionGameIndex(uint256 _index)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getQuerySize(uint256 _index) external view returns (uint256);\\n\\n    function getCurrentStateDeadline(uint _index) external view returns (uint time);\\n\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc8c1bf7c3ecd4b7a14be8bf70c93aad06873180056a63af9aca10a7f0e267bf8\",\"license\":\"GPL-3.0-only\"},\"contracts/VGInterface.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 Verification game instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Decorated.sol\\\";\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\nimport \\\"./PartitionInterface.sol\\\";\\nimport \\\"./MMInterface.sol\\\";\\nimport \\\"./MachineInterface.sol\\\";\\n\\ninterface VGInterface is Instantiator {\\n    enum state {\\n        WaitPartition,\\n        WaitMemoryProveValues,\\n        FinishedClaimerWon,\\n        FinishedChallengerWon\\n    }\\n\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        uint256 _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        bytes32 _claimerFinalHash,\\n        uint256 _finalTime\\n    ) external returns (uint256);\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function stateIsFinishedClaimerWon(uint256 _index)\\n        external\\n        view\\n        returns (bool);\\n\\n    function stateIsFinishedChallengerWon(uint256 _index)\\n        external\\n        view\\n        returns (bool);\\n\\n    function winByPartitionTimeout(uint256 _index) external;\\n\\n    function startMachineRunChallenge(uint256 _index) external;\\n\\n    function settleVerificationGame(uint256 _index) external;\\n\\n    function claimVictoryByTime(uint256 _index) external;\\n\\n    //function stateIsWaitPartition(uint256 _index) public view returns (bool);\\n    //function stateIsWaitMemoryProveValues(uint256 _index) public view\\n    //  returns (bool);\\n    //function clearInstance(uint256 _index) internal;\\n    //function challengerWins(uint256 _index) private;\\n    //function claimerWins(uint256 _index) private;\\n\\n    function getPartitionQuerySize(uint256 _index)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getPartitionGameIndex(uint256 _index)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x520380137623cac076f23ab845ed9f6611f56065cab174455fcf9815c81d5ba6\",\"license\":\"GPL-3.0-only\"}},\"version\":1}",
  "storageLayout": {
    "storage": [
      {
        "astId": 89,
        "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
        "label": "currentIndex",
        "offset": 0,
        "slot": "0",
        "type": "t_uint256"
      },
      {
        "astId": 93,
        "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
        "label": "active",
        "offset": 0,
        "slot": "1",
        "type": "t_mapping(t_uint256,t_bool)"
      },
      {
        "astId": 97,
        "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
        "label": "nonce",
        "offset": 0,
        "slot": "2",
        "type": "t_mapping(t_uint256,t_uint256)"
      },
      {
        "astId": 581,
        "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
        "label": "vg",
        "offset": 0,
        "slot": "3",
        "type": "t_contract(VGInterface)6410"
      },
      {
        "astId": 606,
        "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
        "label": "instance",
        "offset": 0,
        "slot": "4",
        "type": "t_mapping(t_uint256,t_struct(ComputeCtx)602_storage)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_contract(VGInterface)6410": {
        "encoding": "inplace",
        "label": "contract VGInterface",
        "numberOfBytes": "20"
      },
      "t_enum(state)1935": {
        "encoding": "inplace",
        "label": "enum ComputeInterface.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(ComputeCtx)602_storage)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => struct ComputeInstantiator.ComputeCtx)",
        "numberOfBytes": "32",
        "value": "t_struct(ComputeCtx)602_storage"
      },
      "t_mapping(t_uint256,t_uint256)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => uint256)",
        "numberOfBytes": "32",
        "value": "t_uint256"
      },
      "t_struct(ComputeCtx)602_storage": {
        "encoding": "inplace",
        "label": "struct ComputeInstantiator.ComputeCtx",
        "members": [
          {
            "astId": 583,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "challenger",
            "offset": 0,
            "slot": "0",
            "type": "t_address"
          },
          {
            "astId": 585,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "claimer",
            "offset": 0,
            "slot": "1",
            "type": "t_address"
          },
          {
            "astId": 587,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "roundDuration",
            "offset": 0,
            "slot": "2",
            "type": "t_uint256"
          },
          {
            "astId": 589,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "timeOfLastMove",
            "offset": 0,
            "slot": "3",
            "type": "t_uint256"
          },
          {
            "astId": 591,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "machine",
            "offset": 0,
            "slot": "4",
            "type": "t_address"
          },
          {
            "astId": 593,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "initialHash",
            "offset": 0,
            "slot": "5",
            "type": "t_bytes32"
          },
          {
            "astId": 595,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "finalTime",
            "offset": 0,
            "slot": "6",
            "type": "t_uint256"
          },
          {
            "astId": 597,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "claimedFinalHash",
            "offset": 0,
            "slot": "7",
            "type": "t_bytes32"
          },
          {
            "astId": 599,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "vgInstance",
            "offset": 0,
            "slot": "8",
            "type": "t_uint256"
          },
          {
            "astId": 601,
            "contract": "contracts/ComputeInstantiator.sol:ComputeInstantiator",
            "label": "currentState",
            "offset": 0,
            "slot": "9",
            "type": "t_enum(state)1935"
          }
        ],
        "numberOfBytes": "320"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      }
    }
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "challenge(uint256)": {
        "notice": "Challenger disputes the claim, starting a verification game."
      },
      "claimVictoryByTime(uint256)": {
        "notice": "Claim victory for opponent timeout."
      },
      "confirm(uint256)": {
        "notice": "Challenger accepts claim."
      },
      "instantiate(address,address,uint256,address,bytes32,uint256)": {
        "notice": "Instantiates a compute instance."
      },
      "submitClaim(uint256,bytes32)": {
        "notice": "Claimer claims the hash of the result of a computation"
      },
      "winByVG(uint256)": {
        "notice": "In case one of the parties wins the verification game, then he or she can call this function to claim victory in this contract as well."
      }
    },
    "version": 1
  }
}