@cartesi/arbitration
Version:
Arbitration DLib
570 lines • 256 kB
JSON
{
"contractName": "VGInstantiator",
"sourceName": "contracts/VGInstantiator.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_partitionInstantiatorAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_mmInstantiatorAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "MemoryWriten",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_mmInstance",
"type": "uint256"
}
],
"name": "PartitionDivergenceFound",
"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": "bytes32",
"name": "_claimerFinalHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_finalTime",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_partitionInstance",
"type": "uint256"
}
],
"name": "VGCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "enum VGInterface.state",
"name": "_finalState",
"type": "uint8"
}
],
"name": "VGFinished",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "claimVictoryByTime",
"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": "_index",
"type": "uint256"
}
],
"name": "getCurrentStateDeadline",
"outputs": [
{
"internalType": "uint256",
"name": "time",
"type": "uint256"
}
],
"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"
}
],
"name": "getPartitionGameIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "getPartitionQuerySize",
"outputs": [
{
"internalType": "uint256",
"name": "",
"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": "contract MachineInterface",
"name": "_machine",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_initialHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_claimerFinalHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_hashBeforeDivergence",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_hashAfterDivergence",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_currentState",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "_uintValues",
"type": "uint256[]"
}
],
"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": "bytes32",
"name": "_claimerFinalHash",
"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": "x",
"type": "uint256"
}
],
"name": "log2OverTwo",
"outputs": [
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "settleVerificationGame",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "startMachineRunChallenge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "stateIsFinishedChallengerWon",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "stateIsFinishedClaimerWon",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "winByPartitionTimeout",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60806040526000805534801561001457600080fd5b50604051612b46380380612b468339818101604052604081101561003757600080fd5b508051602090910151600380546001600160a01b039384166001600160a01b03199182161790915560048054939092169216919091179055612ac88061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80636cc9f17e116100ad578063b6b5c31911610071578063b6b5c319146103de578063bfa69ed8146103fb578063c526656c14610418578063cd3784e7146104dd578063daaadf4e146104fa57610120565b80636cc9f17e1461029557806373df1612146102b257806382afd23b14610385578063a2dc7973146103a2578063a703df28146103c157610120565b806326987b60116100f457806326987b6014610201578063370f31aa146102095780633d46b8191461023e578063429fc0181461025b5780635748c1301461027857610120565b80624463861461012557806301ff62ab146101545780630c91927b1461019457806320b73870146101b1575b600080fd5b6101426004803603602081101561013b57600080fd5b5035610517565b60408051918252519081900360200190f35b6101806004803603604081101561016a57600080fd5b50803590602001356001600160a01b03166105a4565b604080519115158252519081900360200190f35b610142600480360360208110156101aa57600080fd5b50356105ef565b610142600480360360e08110156101c757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359091169060808101359060a08101359060c0013561064c565b6101426108e8565b610142600480360360a081101561021f57600080fd5b50803590602081013590604081013590606081013590608001356108ee565b6101426004803603602081101561025457600080fd5b5035610922565b6101426004803603602081101561027157600080fd5b50356109cc565b6101426004803603602081101561028e57600080fd5b5035610b14565b610180600480360360208110156102ab57600080fd5b5035610cb0565b6102de600480360360408110156102c857600080fd5b50803590602001356001600160a01b0316610d22565b604051808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b0316815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610369578181015183820152602001610351565b505050509050019a505050505050505050505060405180910390f35b6101806004803603602081101561039b57600080fd5b50356110cc565b6103bf600480360360208110156103b857600080fd5b50356110e1565b005b6103bf600480360360208110156103d757600080fd5b5035611308565b610180600480360360208110156103f457600080fd5b5035611a4f565b6103bf6004803603602081101561041157600080fd5b5035611a9d565b6104446004803603604081101561042e57600080fd5b50803590602001356001600160a01b0316611cb1565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610488578181015183820152602001610470565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104c75781810151838201526020016104af565b5050505090500194505050505060405180910390f35b6103bf600480360360208110156104f357600080fd5b5035611e5c565b6101426004803603602081101561051057600080fd5b50356122cb565b6003546000828152600560209081526040808320600901548151622231c360e11b81526004810191909152905192936001600160a01b0316926244638692602480840193919291829003018186803b15801561057257600080fd5b505afa158015610586573d6000803e3d6000fd5b505050506040513d602081101561059c57600080fd5b505192915050565b6000828152600560205260408120546001600160a01b03838116911614806105e857506000838152600560205260409020600101546001600160a01b038381169116145b9392505050565b60035460008281526005602090815260408083206009015481516341fde16f60e01b81526004810191909152905192936001600160a01b0316926341fde16f92602480840193919291829003018186803b15801561057257600080fd5b600080821161068c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129a86024913960400191505060405180910390fd5b6000805481526005602052604080822080546001600160a01b03808d166001600160a01b03199283161790925583548452919092206001018054928a16929091169190911790556106dc826122cb565b6000805481526005602081815260408084206004958c02860160029091015583548452808420600390810180546001600160a01b03808e166001600160a01b0319909216919091179091558554865282862087018b905585548652828620909401899055845485528185206006018890558454855281852042600790910155548151633562820d60e01b81528e8516968101969096528c84166024870152604486018a90526064860189905260848601889052600a60a487015260c486018c90529051921693633562820d9360e480830194928390030190829087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b5051600080548152600560205260408082206009019290925580548152908120600d01805460ff19169055547fd4ad9a0f11913813f7818801ad85d597c0dfd1d2c01bcb1a02f29c6d6544fdd5908989610848866122cb565b600080548152600560209081526040918290206009015482519687526001600160a01b0395861691870191909152928416858201526004918c02919091016060850152918916608084015260a0830188905260c0830187905260e0830186905261010083015251908190036101200190a1506000805481526001602081905260408220805460ff1916821790558154908101909155979650505050505050565b60005481565b600080610900600088888888886122fc565b90506000610913600189898989896122fc565b91909101979650505050505050565b6000818060005411610969576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610972816110cc565b6109b4576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b60008381526002602052604090205491505b50919050565b6000818060005411610a13576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610a1b612910565b60008481526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610ae557fe5b6003811115610af057fe5b815250509050610b068482604001516028612449565b60e090910151019392505050565b6000818060005411610b5b576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000838152600560205260408120600d015460ff166003811115610b7b57fe5b1415610b99576c2bb0b4ba2830b93a34ba34b7b760991b91506109c6565b60016000848152600560205260409020600d015460ff166003811115610bbb57fe5b1415610be15774576169744d656d6f727950726f766556616c75657360581b91506109c6565b60026000848152600560205260409020600d015460ff166003811115610c0357fe5b1415610c2657712334b734b9b432b221b630b4b6b2b92bb7b760711b91506109c6565b60036000848152600560205260409020600d015460ff166003811115610c4857fe5b1415610c6e57742334b734b9b432b221b430b63632b733b2b92bb7b760591b91506109c6565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000818060005411610cf7576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60025b6000848152600560205260409020600d015460ff166003811115610d1a57fe5b149392505050565b60008060008060008060008060608a8060005411610d75576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610d7d612910565b60008d81526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610e4757fe5b6003811115610e5257fe5b90525060408051600580825260c08201909252919250606091906020820160a0803683370190505090508160c0015181600081518110610e8e57fe5b602002602001018181525050610f41826101a0015183604001516028600360009054906101000a90046001600160a01b03166001600160a01b03166341fde16f8761012001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d6020811015610f3257600080fd5b505160c08701516101f46122fc565b8260e001510181600181518110610f5457fe5b60200260200101818152505081610100015181600281518110610f7357fe5b60200260200101818152505081610120015181600381518110610f9257fe5b60200260200101818152505081610140015181600481518110610fb157fe5b6020908102919091010152600080836101a001516003811115610fd057fe5b1415610fe957506c2bb0b4ba2830b93a34ba34b7b760991b5b6001836101a001516003811115610ffc57fe5b141561101d575074576169744d656d6f727950726f766556616c75657360581b5b6002836101a00151600381111561103057fe5b141561104e5750712334b734b9b432b221b630b4b6b2b92bb7b760711b5b6003836101a00151600381111561106157fe5b14156110825750742334b734b9b432b221b430b63632b733b2b92bb7b760591b5b82600001518360200151846060015185608001518660a0015187610160015188610180015187899c509c509c509c509c509c509c509c509c50505050509295985092959850929598565b60009081526001602052604090205460ff1690565b808060005411611126576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020600101546001600160a01b0316338114611190576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260056020908152604091829020600d810154600282015460035460099093015485516341fde16f60e01b81526004810191909152945161124c9560ff9093169491936028936001600160a01b03909116926341fde16f92602480840193829003018186803b15801561120657600080fd5b505afa15801561121a573d6000803e3d6000fd5b505050506040513d602081101561123057600080fd5b50516000888152600560205260409020600601546101f46122fc565b60008481526005602052604090206007015401421161129c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806129f0602e913960400191505060405180910390fd5b60016000848152600560205260409020600d015460ff1660038111156112be57fe5b146112fa5760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b611303836126fa565b505050565b80806000541161134d576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020546001600160a01b03163381146113b4576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b60016000848152600560205260409020600d015460ff1660038111156113d657fe5b146114125760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b600083815260056020908152604091829020600801546004805484516343d4b78b60e01b8152918201839052935191936001600160a01b0316926343d4b78b92602480840193829003018186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b50516114d35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a506023913960400191505060405180910390fd5b600480546040805163f154f91d60e01b815292830184905251606092839283926001600160a01b039091169163f154f91d916024808301926000929190829003018186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561156157600080fd5b810190808051604051939291908464010000000082111561158157600080fd5b90830190602082018581111561159657600080fd5b82518660208202830111640100000000821117156115b357600080fd5b82525081516020918201928201910280838360005b838110156115e05781810151838201526020016115c8565b505050509050016040526020018051604051939291908464010000000082111561160957600080fd5b90830190602082018581111561161e57600080fd5b825186602082028301116401000000008211171561163b57600080fd5b82525081516020918201928201910280838360005b83811015611668578181015183820152602001611650565b505050509050016040526020018051604051939291908464010000000082111561169157600080fd5b9083019060208201858111156116a657600080fd5b82518660208202830111640100000000821117156116c357600080fd5b82525081516020918201928201910280838360005b838110156116f05781810151838201526020016116d8565b50505050905001604052505050925092509250600080600560008a815260200190815260200160002060030160009054906101000a90046001600160a01b03166001600160a01b0316637718d4c88686866040518463ffffffff1660e01b815260040180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611798578181015183820152602001611780565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156117d75781810151838201526020016117bf565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156118165781810151838201526020016117fe565b5050505090500196505050505050506040805180830381600087803b15801561183e57600080fd5b505af1158015611852573d6000803e3d6000fd5b505050506040513d604081101561186857600080fd5b5080516020909101516004805460408051631f6aea2b60e11b81529283018b9052519395509193506001600160a01b0390911691633ed5d4569160248082019260009290919082900301818387803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b50506004805460408051634b7a14dd60e11b81529283018b9052516001600160a01b0390911693506396f429ba92506024808301926020929190829003018186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b505161198c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129cc6024913960400191505060405180910390fd5b60ff821615801561199d5750845181145b8015611a2d5750600089815260056020908152604091829020600c0154600480548451630241916160e61b81529182018b9052935191936001600160a01b031692639064584092602480840193829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b505114155b15611a3b57611a3b896127c9565b611a44896126fa565b505050505050505050565b6000818060005411611a96576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6003610cfa565b808060005411611ae2576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260408120600d015460ff166003811115611b0257fe5b14611b54576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b6000828152600560209081526040918290206009015460035483516332a3a14f60e11b815260048101839052935191936001600160a01b0390911692636547429e92602480840193829003018186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b505115611bf057611bea836127c9565b50611cad565b6003546040805163d0a068cf60e01b81526004810184905290516001600160a01b039092169163d0a068cf91602480820192602092909190829003018186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d6020811015611c6657600080fd5b505115611c7657611bea836126fa565b60405162461bcd60e51b8152600401808060200182810382526032815260200180612a1e6032913960400191505060405180910390fd5b5050565b6060808080600080878152600560205260409020600d015460ff166003811115611cd757fe5b1415611d815760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060035484519293506001600160a01b031691849150600090611d3757fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060090154825190918391611d6c57fe5b60209081029190910101529092509050611e55565b60016000878152600560205260409020600d015460ff166003811115611da357fe5b1415611e385760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060045484519293506001600160a01b031691849150600090611e0357fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060080154825190918391611d6c57fe5b505060408051600080825260208201908152818301909252925090505b9250929050565b808060005411611ea1576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60008281526002602052604081208054600101905582906000848152600560205260409020600d015460ff166003811115611ed857fe5b14611f2a576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b600354600084815260056020908152604091829020600901548251631d9f2d7760e01b8152600481019190915291516001600160a01b0390931692631d9f2d77926024808201939291829003018186803b158015611f8757600080fd5b505afa158015611f9b573d6000803e3d6000fd5b505050506040513d6020811015611fb157600080fd5b5051612004576040805162461bcd60e51b815260206004820152601a60248201527f446976657267656e63652073686f756c6420626520666f756e64000000000000604482015290519081900360640190fd5b600083815260056020908152604080832060090154600354825163326ff2f560e01b81526004810183905292519194936001600160a01b039091169263326ff2f59260248083019392829003018186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d602081101561208b57600080fd5b5051600086815260056020908152604091829020600a0183905560035482516360696f8160e01b8152600481018790526024810185905292519394506001600160a01b0316926360696f81926044808201939291829003018186803b1580156120f357600080fd5b505afa158015612107573d6000803e3d6000fd5b505050506040513d602081101561211d57600080fd5b5051600086815260056020908152604091829020600b019290925560035481516360696f8160e01b81526004810186905260018501602482015291516001600160a01b03909116926360696f819260448082019391829003018186803b15801561218657600080fd5b505afa15801561219a573d6000803e3d6000fd5b505050506040513d60208110156121b057600080fd5b50516000868152600560209081526040808320600c810194909455600480548554600b909601548351631140bc8f60e31b815230938101939093526001600160a01b039687166024840152604483015291519490911693638a05e47893606480840194938390030190829087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b505050506040513d602081101561225457600080fd5b50516000868152600560209081526040808320600881018590556009810193909355426007840155600d909201805460ff1916600117905581518881529081019290925280517fe6772c68f52fac01f8694176345ad126ec91d30c32f27a57e8d20c076c2b063d9281900390910190a15050505050565b60006101005b82156122e75760019290921c91600019016122d1565b60028160ff03816122f457fe5b049392505050565b60008087600381111561230b57fe5b14156123ac5760035460408051631b8798d560e11b8152600481018990526024810188905260448101879052606481018690526084810185905290516001600160a01b039092169163370f31aa9160a480820192602092909190829003018186803b15801561237957600080fd5b505afa15801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b5051905061243f565b60018760038111156123ba57fe5b14156124115760048054604080516384dfd44d60e01b815292830189905260248301889052516001600160a01b03909116916384dfd44d916044808301926020929190829003018186803b15801561237957600080fd5b600287600381111561241f57fe5b14806124365750600387600381111561243457fe5b145b15610c6e575060005b9695505050505050565b6000612453612910565b60008581526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff9091169081111561251d57fe5b600381111561252857fe5b9052509050600080868152600560205260409020600d015460ff16600381111561254e57fe5b14156125e15760e081015160035461012083015160408051630853f80360e31b81526004810192909252516001600160a01b039092169163429fc01891602480820192602092909190829003018186803b1580156125ab57600080fd5b505afa1580156125bf573d6000803e3d6000fd5b505050506040513d60208110156125d557600080fd5b50510391506105e89050565b60016000868152600560205260409020600d015460ff16600381111561260357fe5b141561269d57600480546101008301516040805163db1de41960e01b8152938401919091526024830187905260448301869052516001600160a01b039091169163db1de419916064808301926020929190829003018186803b15801561266857600080fd5b505afa15801561267c573d6000803e3d6000fd5b505050506040513d602081101561269257600080fd5b505191506105e89050565b60026000868152600560205260409020600d015460ff1660038111156126bf57fe5b14806126ea575060036000868152600560205260409020600d015460ff1660038111156126e857fe5b145b15610c6e57506000949350505050565b80806000541161273f576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6127488261283a565b6000828152600560205260409020600d0180546002919060ff19166001835b021790555060008281526005602052604090819020600d015490517f2b38fc22e74e632df708aa11ee5b00b21845d40c64ccf39fafc8ef018b82b9b19160ff1690808260038111156127b557fe5b815260200191505060405180910390a15050565b80806000541161280e576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6128178261283a565b6000828152600560205260409020600d0180546003919060ff1916600183612767565b80806000541161287f576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b600082815260056020818152604080842080546001600160a01b031990811682556001808301805483169055600280840188905560038401805490931690925560048301879055948201869055600682018690556007820186905560088201869055600a8201869055600b8201869055600c909101859055928252808420805460ff19169055919052812055611cad565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101829052906101a08201529056fe53746174652073686f756c6420626520576169744d656d6f727950726f766556616c75657346696e616c2074696d65206d7573742062652067726561746572207468616e207a65726f5374617465206f66204d4d2073686f756c642062652046696e69736865645265706c61794475726174696f6e206f6620576169744d656d6f727950726f766556616c756573206d757374206265206f7665724661696c20746f2057696e4279506172746974696f6e54696d656f757420696e2063757272656e7420636f6e646974696f6e5374617465206f66204d4d2073686f756c642062652057616974696e675265706c6179496e646578206e6f7420696e7374616e74696174656400000000000000000000a2646970667358221220b0472aeb6d1fafba8da23af46b1f47be1f9e1e463238728f2f918c3ee872304964736f6c63430007040033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101205760003560e01c80636cc9f17e116100ad578063b6b5c31911610071578063b6b5c319146103de578063bfa69ed8146103fb578063c526656c14610418578063cd3784e7146104dd578063daaadf4e146104fa57610120565b80636cc9f17e1461029557806373df1612146102b257806382afd23b14610385578063a2dc7973146103a2578063a703df28146103c157610120565b806326987b60116100f457806326987b6014610201578063370f31aa146102095780633d46b8191461023e578063429fc0181461025b5780635748c1301461027857610120565b80624463861461012557806301ff62ab146101545780630c91927b1461019457806320b73870146101b1575b600080fd5b6101426004803603602081101561013b57600080fd5b5035610517565b60408051918252519081900360200190f35b6101806004803603604081101561016a57600080fd5b50803590602001356001600160a01b03166105a4565b604080519115158252519081900360200190f35b610142600480360360208110156101aa57600080fd5b50356105ef565b610142600480360360e08110156101c757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359091169060808101359060a08101359060c0013561064c565b6101426108e8565b610142600480360360a081101561021f57600080fd5b50803590602081013590604081013590606081013590608001356108ee565b6101426004803603602081101561025457600080fd5b5035610922565b6101426004803603602081101561027157600080fd5b50356109cc565b6101426004803603602081101561028e57600080fd5b5035610b14565b610180600480360360208110156102ab57600080fd5b5035610cb0565b6102de600480360360408110156102c857600080fd5b50803590602001356001600160a01b0316610d22565b604051808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b0316815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610369578181015183820152602001610351565b505050509050019a505050505050505050505060405180910390f35b6101806004803603602081101561039b57600080fd5b50356110cc565b6103bf600480360360208110156103b857600080fd5b50356110e1565b005b6103bf600480360360208110156103d757600080fd5b5035611308565b610180600480360360208110156103f457600080fd5b5035611a4f565b6103bf6004803603602081101561041157600080fd5b5035611a9d565b6104446004803603604081101561042e57600080fd5b50803590602001356001600160a01b0316611cb1565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610488578181015183820152602001610470565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104c75781810151838201526020016104af565b5050505090500194505050505060405180910390f35b6103bf600480360360208110156104f357600080fd5b5035611e5c565b6101426004803603602081101561051057600080fd5b50356122cb565b6003546000828152600560209081526040808320600901548151622231c360e11b81526004810191909152905192936001600160a01b0316926244638692602480840193919291829003018186803b15801561057257600080fd5b505afa158015610586573d6000803e3d6000fd5b505050506040513d602081101561059c57600080fd5b505192915050565b6000828152600560205260408120546001600160a01b03838116911614806105e857506000838152600560205260409020600101546001600160a01b038381169116145b9392505050565b60035460008281526005602090815260408083206009015481516341fde16f60e01b81526004810191909152905192936001600160a01b0316926341fde16f92602480840193919291829003018186803b15801561057257600080fd5b600080821161068c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129a86024913960400191505060405180910390fd5b6000805481526005602052604080822080546001600160a01b03808d166001600160a01b03199283161790925583548452919092206001018054928a16929091169190911790556106dc826122cb565b6000805481526005602081815260408084206004958c02860160029091015583548452808420600390810180546001600160a01b03808e166001600160a01b0319909216919091179091558554865282862087018b905585548652828620909401899055845485528185206006018890558454855281852042600790910155548151633562820d60e01b81528e8516968101969096528c84166024870152604486018a90526064860189905260848601889052600a60a487015260c486018c90529051921693633562820d9360e480830194928390030190829087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b5051600080548152600560205260408082206009019290925580548152908120600d01805460ff19169055547fd4ad9a0f11913813f7818801ad85d597c0dfd1d2c01bcb1a02f29c6d6544fdd5908989610848866122cb565b600080548152600560209081526040918290206009015482519687526001600160a01b0395861691870191909152928416858201526004918c02919091016060850152918916608084015260a0830188905260c0830187905260e0830186905261010083015251908190036101200190a1506000805481526001602081905260408220805460ff1916821790558154908101909155979650505050505050565b60005481565b600080610900600088888888886122fc565b90506000610913600189898989896122fc565b91909101979650505050505050565b6000818060005411610969576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610972816110cc565b6109b4576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b60008381526002602052604090205491505b50919050565b6000818060005411610a13576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610a1b612910565b60008481526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610ae557fe5b6003811115610af057fe5b815250509050610b068482604001516028612449565b60e090910151019392505050565b6000818060005411610b5b576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000838152600560205260408120600d015460ff166003811115610b7b57fe5b1415610b99576c2bb0b4ba2830b93a34ba34b7b760991b91506109c6565b60016000848152600560205260409020600d015460ff166003811115610bbb57fe5b1415610be15774576169744d656d6f727950726f766556616c75657360581b91506109c6565b60026000848152600560205260409020600d015460ff166003811115610c0357fe5b1415610c2657712334b734b9b432b221b630b4b6b2b92bb7b760711b91506109c6565b60036000848152600560205260409020600d015460ff166003811115610c4857fe5b1415610c6e57742334b734b9b432b221b430b63632b733b2b92bb7b760591b91506109c6565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000818060005411610cf7576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60025b6000848152600560205260409020600d015460ff166003811115610d1a57fe5b149392505050565b60008060008060008060008060608a8060005411610d75576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610d7d612910565b60008d81526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610e4757fe5b6003811115610e5257fe5b90525060408051600580825260c08201909252919250606091906020820160a0803683370190505090508160c0015181600081518110610e8e57fe5b602002602001018181525050610f41826101a0015183604001516028600360009054906101000a90046001600160a01b03166001600160a01b03166341fde16f8761012001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d6020811015610f3257600080fd5b505160c08701516101f46122fc565b8260e001510181600181518110610f5457fe5b60200260200101818152505081610100015181600281518110610f7357fe5b60200260200101818152505081610120015181600381518110610f9257fe5b60200260200101818152505081610140015181600481518110610fb157fe5b6020908102919091010152600080836101a001516003811115610fd057fe5b1415610fe957506c2bb0b4ba2830b93a34ba34b7b760991b5b6001836101a001516003811115610ffc57fe5b141561101d575074576169744d656d6f727950726f766556616c75657360581b5b6002836101a00151600381111561103057fe5b141561104e5750712334b734b9b432b221b630b4b6b2b92bb7b760711b5b6003836101a00151600381111561106157fe5b14156110825750742334b734b9b432b221b430b63632b733b2b92bb7b760591b5b82600001518360200151846060015185608001518660a0015187610160015188610180015187899c509c509c509c509c509c509c509c509c50505050509295985092959850929598565b60009081526001602052604090205460ff1690565b808060005411611126576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020600101546001600160a01b0316338114611190576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260056020908152604091829020600d810154600282015460035460099093015485516341fde16f60e01b81526004810191909152945161124c9560ff9093169491936028936001600160a01b03909116926341fde16f92602480840193829003018186803b15801561120657600080fd5b505afa15801561121a573d6000803e3d6000fd5b505050506040513d602081101561123057600080fd5b50516000888152600560205260409020600601546101f46122fc565b60008481526005602052604090206007015401421161129c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806129f0602e913960400191505060405180910390fd5b60016000848152600560205260409020600d015460ff1660038111156112be57fe5b146112fa5760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b611303836126fa565b505050565b80806000541161134d576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020546001600160a01b03163381146113b4576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b60016000848152600560205260409020600d015460ff1660038111156113d657fe5b146114125760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b600083815260056020908152604091829020600801546004805484516343d4b78b60e01b8152918201839052935191936001600160a01b0316926343d4b78b92602480840193829003018186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b50516114d35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a506023913960400191505060405180910390fd5b600480546040805163f154f91d60e01b815292830184905251606092839283926001600160a01b039091169163f154f91d916024808301926000929190829003018186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561156157600080fd5b810190808051604051939291908464010000000082111561158157600080fd5b90830190602082018581111561159657600080fd5b82518660208202830111640100000000821117156115b357600080fd5b82525081516020918201928201910280838360005b838110156115e05781810151838201526020016115c8565b505050509050016040526020018051604051939291908464010000000082111561160957600080fd5b90830190602082018581111561161e57600080fd5b825186602082028301116401000000008211171561163b57600080fd5b82525081516020918201928201910280838360005b83811015611668578181015183820152602001611650565b505050509050016040526020018051604051939291908464010000000082111561169157600080fd5b9083019060208201858111156116a657600080fd5b82518660208202830111640100000000821117156116c357600080fd5b82525081516020918201928201910280838360005b838110156116f05781810151838201526020016116d8565b50505050905001604052505050925092509250600080600560008a815260200190815260200160002060030160009054906101000a90046001600160a01b03166001600160a01b0316637718d4c88686866040518463ffffffff1660e01b815260040180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611798578181015183820152602001611780565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156117d75781810151838201526020016117bf565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156118165781810151838201526020016117fe565b5050505090500196505050505050506040805180830381600087803b15801561183e57600080fd5b505af1158015611852573d6000803e3d6000fd5b505050506040513d604081101561186857600080fd5b5080516020909101516004805460408051631f6aea2b60e11b81529283018b9052519395509193506001600160a01b0390911691633ed5d4569160248082019260009290919082900301818387803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b50506004805460408051634b7a14dd60e11b81529283018b9052516001600160a01b0390911693506396f429ba92506024808301926020929190829003018186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b505161198c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129cc6024913960400191505060405180910390fd5b60ff821615801561199d5750845181145b8015611a2d5750600089815260056020908152604091829020600c0154600480548451630241916160e61b81529182018b9052935191936001600160a01b031692639064584092602480840193829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b505114155b15611a3b57611a3b896127c9565b611a44896126fa565b505050505050505050565b6000818060005411611a96576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6003610cfa565b808060005411611ae2576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260408120600d015460ff166003811115611b0257fe5b14611b54576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b6000828152600560209081526040918290206009015460035483516332a3a14f60e11b815260048101839052935191936001600160a01b0390911692636547429e92602480840193829003018186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b505115611bf057611bea836127c9565b50611cad565b6003546040805163d0a068cf60e01b81526004810184905290516001600160a01b039092169163d0a068cf91602480820192602092909190829003018186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d6020811015611c6657600080fd5b505115611c7657611bea836126fa565b60405162461bcd60e51b8152600401808060200182810382526032815260200180612a1e6032913960400191505060405180910390fd5b5050565b6060808080600080878152600560205260409020600d015460ff166003811115611cd757fe5b1415611d815760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060035484519293506001600160a01b031691849150600090611d3757fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060090154825190918391611d6c57fe5b60209081029190910101529092509050611e55565b60016000878152600560205260409020600d015460ff166003811115611da357fe5b1415611e385760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060045484519293506001600160a01b031691849150600090611e0357fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060080154825190918391611d6c57fe5b505060408051600080825260208201908152818301909252925090505b92509290