Commit d5436b53 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Prevent duplicate `step` moves (#9653)

* Prevent duplicate steps

* Prevent duplicate step claims
parent e3235f46
......@@ -30,8 +30,8 @@ var (
// FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract.
var FaultDisputeGameMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bond\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimedBondFlag\",\"inputs\":[],\"outputs\":[{\"name\":\"claimedBondFlag_\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredBond\",\"inputs\":[{\"name\":\"_position\",\"type\":\"uint128\",\"internalType\":\"Position\"}],\"outputs\":[{\"name\":\"requiredBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101806040523480156200001257600080fd5b5060405162003bd238038062003bd283398101604081905262000035916200009b565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b03166101005262000140565b600080600080600080600080610100898b031215620000b957600080fd5b885163ffffffff81168114620000ce57600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200011157600080fd5b60e08a01519092506001600160a01b03811681146200012f57600080fd5b809150509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161399262000240600039600081816104d301526120dd0152600081816104080152612d330152600081816101ec0152818161127101528181611f110152611f470152600081816102f1015281816119cb0152611cd001526000818161067b01528181610e5f015261223b0152600081816106ae01528181610c4d01528181610d160152818161182601528181611ee70152818161267c015281816128bf015281816129ed01528181612af50152612bd101526000818161075001528181610cb901528181611715015261184701526000818161049801526118dd01526139926000f3fe6080604052600436106101d85760003560e01c80638d450a9511610102578063d8cc1a3c11610095578063f8f43ff611610064578063f8f43ff6146106fd578063fa24f7431461071d578063fa315aa914610741578063fdffbb281461077457600080fd5b8063d8cc1a3c1461064c578063e1f0c3761461066c578063ec5e63081461069f578063f3f7214e146106d257600080fd5b8063c55cd0c7116100d1578063c55cd0c714610561578063c6f0308c14610574578063cf09e0d0146105fe578063d5d44d801461061f57600080fd5b80638d450a9514610489578063bbdc02db146104bc578063bcef3b55146104fd578063c395e1ca1461053a57600080fd5b8063609d33341161017a57806368800abf1161014957806368800abf146103f95780638129fc1c1461042c5780638980e0cc146104345780638b85902b1461044957600080fd5b8063609d33341461037157806360e2746414610386578063632247ea146103a65780636361506d146103b957600080fd5b80632810e1d6116101b65780632810e1d6146102a057806335fef567146102b55780633a768463146102ca57806354fd4d501461031b57600080fd5b80630356fe3a146101dd57806319effeb41461021f578063200d2ed214610265575b600080fd5b3480156101e957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022b57600080fd5b5060005461024c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610216565b34801561027157600080fd5b5060005461029390700100000000000000000000000000000000900460ff1681565b60405161021691906133cc565b3480156102ac57600080fd5b50610293610787565b6102c86102c336600461340d565b610984565b005b3480156102d657600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561032757600080fd5b506103646040518060400160405280600581526020017f302e352e3000000000000000000000000000000000000000000000000000000081525081565b604051610216919061349a565b34801561037d57600080fd5b50610364610994565b34801561039257600080fd5b506102c86103a13660046134cf565b6109a7565b6102c86103b4366004613508565b610a57565b3480156103c557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561020c565b34801561040557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c861122d565b34801561044057600080fd5b5060015461020c565b34801561045557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561020c565b34801561049557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156104c857600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561050957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561020c565b34801561054657600080fd5b5061020c61055536600461353d565b50662386f26fc1000090565b6102c861056f36600461340d565b6115c1565b34801561058057600080fd5b5061059461058f36600461356f565b6115cd565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610216565b34801561060a57600080fd5b5060005461024c9067ffffffffffffffff1681565b34801561062b57600080fd5b5061020c61063a3660046134cf565b60026020526000908152604090205481565b34801561065857600080fd5b506102c86106673660046135d1565b611664565b34801561067857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024c565b3480156106ab57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156106de57600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610216565b34801561070957600080fd5b506102c861071836600461365b565b611c42565b34801561072957600080fd5b506107326120db565b60405161021693929190613687565b34801561074d57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c861078236600461356f565b612138565b600080600054700100000000000000000000000000000000900460ff1660028111156107b5576107b561339d565b146107ec576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16610828576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600081548110610854576108546136b5565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461088f576001610892565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156109435761094361339d565b0217905560028111156109585761095861339d565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61099082826000610a57565b5050565b60606109a260406020612599565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220805490839055905190929083908381818185875af1925050503d8060008114610a12576040519150601f19603f3d011682016040523d82523d6000602084013e610a17565b606091505b5050905080610a52576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a8357610a8361339d565b14610aba576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610acf57610acf6136b5565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b94908390869061263016565b90506000610c34826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c765750610c737f00000000000000000000000000000000000000000000000000000000000000006002613713565b81145b8015610c80575084155b15610cb7576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610d11576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3c7f00000000000000000000000000000000000000000000000000000000000000006001613713565b8103610d4e57610d4e86888588612638565b34662386f26fc100001115610d8f576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610def576001856000015163ffffffff1681548110610dbe57610dbe6136b5565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610e139067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610e3d610e06856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610e519190613713565b610e5b919061372b565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610ece576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff1615610f4c576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506111e1919061372b565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600554610100900460ff161561126f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013511611326576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b606636111561133d5763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152329484019485526fffffffffffffffffffffffffffffffff348116606086019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808701908152600160a088018181524280861660c08b0190815283548085018555938952995160059384027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995192909b167fffffffffffffffff0000000000000000000000000000000000000000000000009099169890981764010000000073ffffffffffffffffffffffffffffffffffffffff928316021790995599517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7870180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919099161790975591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8850180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016918516919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9840155935194519481167001000000000000000000000000000000009590911694909402939093177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9093019290925581547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90931692909217905580546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116179055565b61099082826001610a57565b600181815481106115dd57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff1660028111156116905761169061339d565b146116c7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600187815481106116dc576116dc6136b5565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b905061173b7f00000000000000000000000000000000000000000000000000000000000000006001613713565b6117d7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611818576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156119075761186b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061372b565b6001901b61188a846fffffffffffffffffffffffffffffffff166127f9565b67ffffffffffffffff1661189e9190613771565b156118db576118d26118c360016fffffffffffffffffffffffffffffffff8716613785565b865463ffffffff16600061289f565b600301546118fd565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611931565b6003850154915061192e6118c36fffffffffffffffffffffffffffffffff861660016137b6565b90505b600882901b60088a8a6040516119489291906137ea565b6040518091039020901b14611989576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119948c612983565b905060006119a3836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611a1d908f908f908f908f908a90600401613843565b6020604051808303816000875af1158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a60919061387d565b600485015491149150600090600290611b0b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ba7896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611bb19190613896565b611bbb91906138b7565b67ffffffffffffffff161590508115158103611c03576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611c6e57611c6e61339d565b14611ca5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611cb4866129b2565b93509350935093506000611cca85858585612ddf565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d91906138de565b905060018903611e555773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84611db9367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f919061387d565b506120d0565b60028903611e815773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611db9565b60038903611ead5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611db9565b600489036120255760006fffffffffffffffffffffffffffffffff861615611f4557611f0b6fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612e9e565b611f35907f0000000000000000000000000000000000000000000000000000000000000000613713565b611f40906001613713565b611f67565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201e919061387d565b50506120d0565b6005890361209e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611e0c565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060612131610994565b9050909192565b60008054700100000000000000000000000000000000900460ff1660028111156121645761216461339d565b1461219b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106121b0576121b06136b5565b6000918252602082206005919091020160048101549092506121f290700100000000000000000000000000000000900460401c67ffffffffffffffff16610e06565b600483015490915060009061222490700100000000000000000000000000000000900467ffffffffffffffff16610e06565b61222e9042613896565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661226882846138fb565b67ffffffffffffffff16116122a9576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526004602052604090208054851580156122c9575060055460ff165b15612300576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561230d57508515155b15612372578454640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612340578161235c565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506123688188612f53565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b838110156124b85760008582815481106123a3576123a36136b5565b60009182526020808320909101548083526004909152604090912054909150156123f9576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061240e5761240e6136b5565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612467575060048101546fffffffffffffffffffffffffffffffff908116908516115b156124a5576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b5050806124b19061391e565b9050612387565b5061250073ffffffffffffffffffffffffffffffffffffffff8316156124de57826124fa565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612f53565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff841602178755600088815260046020526040812061255c91613363565b8760000361236857600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b606060006125d084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003613713565b90508267ffffffffffffffff1667ffffffffffffffff8111156125f5576125f5613956565b6040519080825280601f01601f19166020018201604052801561261f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006126576fffffffffffffffffffffffffffffffff841660016137b6565b905060006126678286600161289f565b9050600086901a838061275a57506126a060027f0000000000000000000000000000000000000000000000000000000000000000613771565b6004830154600290612744906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61274e91906138b7565b67ffffffffffffffff16145b156127b25760ff811660011480612774575060ff81166002145b6127ad576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b6127f0565b60ff8116156127f0576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b50505050505050565b600080612886837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826128e8576128e36fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613040565b612903565b612903856fffffffffffffffffffffffffffffffff16613207565b905060018481548110612918576129186136b5565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461297b57815460018054909163ffffffff16908110612966576129666136b5565b90600052602060002090600502019150612929565b509392505050565b6000806000806000612994866129b2565b93509350935093506129a884848484612ddf565b9695505050505050565b60008060008060008590506000600182815481106129d2576129d26136b5565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612aa9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612aea576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612bb1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612c2d57825463ffffffff16612bf77f00000000000000000000000000000000000000000000000000000000000000006001613713565b8303612c01578391505b60018181548110612c1457612c146136b5565b9060005260206000209060050201935080945050612aee565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612c96612c81856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612d7b576000612cce836fffffffffffffffffffffffffffffffff166127f9565b67ffffffffffffffff161115612d31576000612d08612d0060016fffffffffffffffffffffffffffffffff8616613785565b89600161289f565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612d559050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612dd1565b6000612d9d612d006fffffffffffffffffffffffffffffffff851660016137b6565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612e45578282604051602001612e289291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612e96565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612f2b847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101612fc3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff84166000908152602091909152604081208054839290613036908490613713565b9091555050505050565b6000816130df846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613120576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312983613207565b9050816131c8826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613201576131fe6131e5836001613713565b6fffffffffffffffffffffffffffffffff8316906132b3565b90505b92915050565b6000811960018301168161329b827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613340847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b50805460008255906000526020600020908101906133819190613384565b50565b5b808211156133995760008155600101613385565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613407577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561342057600080fd5b50508035926020909101359150565b6000815180845260005b8181101561345557602081850181015186830182015201613439565b81811115613467576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006131fe602083018461342f565b73ffffffffffffffffffffffffffffffffffffffff8116811461338157600080fd5b6000602082840312156134e157600080fd5b81356134ec816134ad565b9392505050565b8035801515811461350357600080fd5b919050565b60008060006060848603121561351d57600080fd5b8335925060208401359150613534604085016134f3565b90509250925092565b60006020828403121561354f57600080fd5b81356fffffffffffffffffffffffffffffffff811681146134ec57600080fd5b60006020828403121561358157600080fd5b5035919050565b60008083601f84011261359a57600080fd5b50813567ffffffffffffffff8111156135b257600080fd5b6020830191508360208285010111156135ca57600080fd5b9250929050565b600080600080600080608087890312156135ea57600080fd5b863595506135fa602088016134f3565b9450604087013567ffffffffffffffff8082111561361757600080fd5b6136238a838b01613588565b9096509450606089013591508082111561363c57600080fd5b5061364989828a01613588565b979a9699509497509295939492505050565b60008060006060848603121561367057600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006136ac606083018461342f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613726576137266136e4565b500190565b60008282101561373d5761373d6136e4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261378057613780613742565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156137ae576137ae6136e4565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156137e1576137e16136e4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006138576060830187896137fa565b828103602084015261386a8186886137fa565b9150508260408301529695505050505050565b60006020828403121561388f57600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156137ae576137ae6136e4565b600067ffffffffffffffff808416806138d2576138d2613742565b92169190910692915050565b6000602082840312156138f057600080fd5b81516134ec816134ad565b600067ffffffffffffffff8083168185168083038211156137e1576137e16136e4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361394f5761394f6136e4565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a",
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bond\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimedBondFlag\",\"inputs\":[],\"outputs\":[{\"name\":\"claimedBondFlag_\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredBond\",\"inputs\":[{\"name\":\"_position\",\"type\":\"uint128\",\"internalType\":\"Position\"}],\"outputs\":[{\"name\":\"requiredBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DuplicateStep\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101806040523480156200001257600080fd5b5060405162003c2938038062003c2983398101604081905262000035916200009b565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b03166101005262000140565b600080600080600080600080610100898b031215620000b957600080fd5b885163ffffffff81168114620000ce57600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200011157600080fd5b60e08a01519092506001600160a01b03811681146200012f57600080fd5b809150509295985092959890939650565b60805160a05160c05160e051610100516101205161014051610160516139e962000240600039600081816104d301526121340152600081816104080152612d8a0152600081816101ec0152818161127101528181611f680152611f9e0152600081816102f1015281816119cb0152611d2701526000818161067b01528181610e5f01526122920152600081816106ae01528181610c4d01528181610d160152818161182601528181611f3e015281816126d30152818161291601528181612a4401528181612b4c0152612c2801526000818161075001528181610cb901528181611715015261184701526000818161049801526118dd01526139e96000f3fe6080604052600436106101d85760003560e01c80638d450a9511610102578063d8cc1a3c11610095578063f8f43ff611610064578063f8f43ff6146106fd578063fa24f7431461071d578063fa315aa914610741578063fdffbb281461077457600080fd5b8063d8cc1a3c1461064c578063e1f0c3761461066c578063ec5e63081461069f578063f3f7214e146106d257600080fd5b8063c55cd0c7116100d1578063c55cd0c714610561578063c6f0308c14610574578063cf09e0d0146105fe578063d5d44d801461061f57600080fd5b80638d450a9514610489578063bbdc02db146104bc578063bcef3b55146104fd578063c395e1ca1461053a57600080fd5b8063609d33341161017a57806368800abf1161014957806368800abf146103f95780638129fc1c1461042c5780638980e0cc146104345780638b85902b1461044957600080fd5b8063609d33341461037157806360e2746414610386578063632247ea146103a65780636361506d146103b957600080fd5b80632810e1d6116101b65780632810e1d6146102a057806335fef567146102b55780633a768463146102ca57806354fd4d501461031b57600080fd5b80630356fe3a146101dd57806319effeb41461021f578063200d2ed214610265575b600080fd5b3480156101e957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022b57600080fd5b5060005461024c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610216565b34801561027157600080fd5b5060005461029390700100000000000000000000000000000000900460ff1681565b6040516102169190613423565b3480156102ac57600080fd5b50610293610787565b6102c86102c3366004613464565b610984565b005b3480156102d657600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561032757600080fd5b506103646040518060400160405280600581526020017f302e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161021691906134f1565b34801561037d57600080fd5b50610364610994565b34801561039257600080fd5b506102c86103a1366004613526565b6109a7565b6102c86103b436600461355f565b610a57565b3480156103c557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561020c565b34801561040557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c861122d565b34801561044057600080fd5b5060015461020c565b34801561045557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561020c565b34801561049557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156104c857600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561050957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561020c565b34801561054657600080fd5b5061020c610555366004613594565b50662386f26fc1000090565b6102c861056f366004613464565b6115c1565b34801561058057600080fd5b5061059461058f3660046135c6565b6115cd565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610216565b34801561060a57600080fd5b5060005461024c9067ffffffffffffffff1681565b34801561062b57600080fd5b5061020c61063a366004613526565b60026020526000908152604090205481565b34801561065857600080fd5b506102c8610667366004613628565b611664565b34801561067857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024c565b3480156106ab57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156106de57600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610216565b34801561070957600080fd5b506102c86107183660046136b2565b611c99565b34801561072957600080fd5b50610732612132565b604051610216939291906136de565b34801561074d57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c86107823660046135c6565b61218f565b600080600054700100000000000000000000000000000000900460ff1660028111156107b5576107b56133f4565b146107ec576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16610828576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106108545761085461370c565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461088f576001610892565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610943576109436133f4565b021790556002811115610958576109586133f4565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61099082826000610a57565b5050565b60606109a2604060206125f0565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220805490839055905190929083908381818185875af1925050503d8060008114610a12576040519150601f19603f3d011682016040523d82523d6000602084013e610a17565b606091505b5050905080610a52576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a8357610a836133f4565b14610aba576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610acf57610acf61370c565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b94908390869061268716565b90506000610c34826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c765750610c737f0000000000000000000000000000000000000000000000000000000000000000600261376a565b81145b8015610c80575084155b15610cb7576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610d11576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3c7f0000000000000000000000000000000000000000000000000000000000000000600161376a565b8103610d4e57610d4e8688858861268f565b34662386f26fc100001115610d8f576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610def576001856000015163ffffffff1681548110610dbe57610dbe61370c565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610e139067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610e3d610e06856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610e51919061376a565b610e5b9190613782565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610ece576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff1615610f4c576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506111e19190613782565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600554610100900460ff161561126f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013511611326576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b606636111561133d5763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152329484019485526fffffffffffffffffffffffffffffffff348116606086019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808701908152600160a088018181524280861660c08b0190815283548085018555938952995160059384027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995192909b167fffffffffffffffff0000000000000000000000000000000000000000000000009099169890981764010000000073ffffffffffffffffffffffffffffffffffffffff928316021790995599517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7870180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919099161790975591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8850180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016918516919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9840155935194519481167001000000000000000000000000000000009590911694909402939093177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9093019290925581547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90931692909217905580546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116179055565b61099082826001610a57565b600181815481106115dd57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611690576116906133f4565b146116c7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600187815481106116dc576116dc61370c565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b905061173b7f0000000000000000000000000000000000000000000000000000000000000000600161376a565b6117d7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611818576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156119075761186b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613782565b6001901b61188a846fffffffffffffffffffffffffffffffff16612850565b67ffffffffffffffff1661189e91906137c8565b156118db576118d26118c360016fffffffffffffffffffffffffffffffff87166137dc565b865463ffffffff1660006128f6565b600301546118fd565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611931565b6003850154915061192e6118c36fffffffffffffffffffffffffffffffff8616600161380d565b90505b600882901b60088a8a604051611948929190613841565b6040518091039020901b14611989576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119948c6129da565b905060006119a3836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611a1d908f908f908f908f908a9060040161389a565b6020604051808303816000875af1158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6091906138d4565b600485015491149150600090600290611b0b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ba7896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611bb191906138ed565b611bbb919061390e565b67ffffffffffffffff161590508115158103611c03576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615611c5a576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611cc557611cc56133f4565b14611cfc576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611d0b86612a09565b93509350935093506000611d2185858585612e36565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190613935565b905060018903611eac5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84611e10367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea691906138d4565b50612127565b60028903611ed85773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611e10565b60038903611f045773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611e10565b6004890361207c5760006fffffffffffffffffffffffffffffffff861615611f9c57611f626fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612ef5565b611f8c907f000000000000000000000000000000000000000000000000000000000000000061376a565b611f9790600161376a565b611fbe565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612051573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207591906138d4565b5050612127565b600589036120f5576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611e63565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060612188610994565b9050909192565b60008054700100000000000000000000000000000000900460ff1660028111156121bb576121bb6133f4565b146121f2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106122075761220761370c565b60009182526020822060059190910201600481015490925061224990700100000000000000000000000000000000900460401c67ffffffffffffffff16610e06565b600483015490915060009061227b90700100000000000000000000000000000000900467ffffffffffffffff16610e06565b61228590426138ed565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166122bf8284613952565b67ffffffffffffffff1611612300576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600460205260409020805485158015612320575060055460ff165b15612357576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561236457508515155b156123c9578454640100000000900473ffffffffffffffffffffffffffffffffffffffff166000811561239757816123b3565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506123bf8188612faa565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561250f5760008582815481106123fa576123fa61370c565b6000918252602080832090910154808352600490915260409091205490915015612450576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106124655761246561370c565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156124be575060048101546fffffffffffffffffffffffffffffffff908116908516115b156124fc576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061250890613975565b90506123de565b5061255773ffffffffffffffffffffffffffffffffffffffff8316156125355782612551565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612faa565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff84160217875560008881526004602052604081206125b3916133ba565b876000036123bf57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b6060600061262784367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361376a565b90508267ffffffffffffffff1667ffffffffffffffff81111561264c5761264c6139ad565b6040519080825280601f01601f191660200182016040528015612676576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006126ae6fffffffffffffffffffffffffffffffff8416600161380d565b905060006126be828660016128f6565b9050600086901a83806127b157506126f760027f00000000000000000000000000000000000000000000000000000000000000006137c8565b600483015460029061279b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6127a5919061390e565b67ffffffffffffffff16145b156128095760ff8116600114806127cb575060ff81166002145b612804576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b612847565b60ff811615612847576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b50505050505050565b6000806128dd837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261293f5761293a6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613097565b61295a565b61295a856fffffffffffffffffffffffffffffffff1661325e565b90506001848154811061296f5761296f61370c565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146129d257815460018054909163ffffffff169081106129bd576129bd61370c565b90600052602060002090600502019150612980565b509392505050565b60008060008060006129eb86612a09565b93509350935093506129ff84848484612e36565b9695505050505050565b6000806000806000859050600060018281548110612a2957612a2961370c565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612b00906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b41576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612c08906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612c8457825463ffffffff16612c4e7f0000000000000000000000000000000000000000000000000000000000000000600161376a565b8303612c58578391505b60018181548110612c6b57612c6b61370c565b9060005260206000209060050201935080945050612b45565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612ced612cd8856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612dd2576000612d25836fffffffffffffffffffffffffffffffff16612850565b67ffffffffffffffff161115612d88576000612d5f612d5760016fffffffffffffffffffffffffffffffff86166137dc565b8960016128f6565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612dac9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612e28565b6000612df4612d576fffffffffffffffffffffffffffffffff8516600161380d565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612e9c578282604051602001612e7f9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612eed565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612f82847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161301a576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff8416600090815260209190915260408120805483929061308d90849061376a565b9091555050505050565b600081613136846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613177576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131808361325e565b90508161321f826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116132585761325561323c83600161376a565b6fffffffffffffffffffffffffffffffff83169061330a565b90505b92915050565b600081196001830116816132f2827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613397847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b50805460008255906000526020600020908101906133d891906133db565b50565b5b808211156133f057600081556001016133dc565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061345e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561347757600080fd5b50508035926020909101359150565b6000815180845260005b818110156134ac57602081850181015186830182015201613490565b818111156134be576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132556020830184613486565b73ffffffffffffffffffffffffffffffffffffffff811681146133d857600080fd5b60006020828403121561353857600080fd5b813561354381613504565b9392505050565b8035801515811461355a57600080fd5b919050565b60008060006060848603121561357457600080fd5b833592506020840135915061358b6040850161354a565b90509250925092565b6000602082840312156135a657600080fd5b81356fffffffffffffffffffffffffffffffff8116811461354357600080fd5b6000602082840312156135d857600080fd5b5035919050565b60008083601f8401126135f157600080fd5b50813567ffffffffffffffff81111561360957600080fd5b60208301915083602082850101111561362157600080fd5b9250929050565b6000806000806000806080878903121561364157600080fd5b863595506136516020880161354a565b9450604087013567ffffffffffffffff8082111561366e57600080fd5b61367a8a838b016135df565b9096509450606089013591508082111561369357600080fd5b506136a089828a016135df565b979a9699509497509295939492505050565b6000806000606084860312156136c757600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006137036060830184613486565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561377d5761377d61373b565b500190565b6000828210156137945761379461373b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826137d7576137d7613799565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156138055761380561373b565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156138385761383861373b565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006138ae606083018789613851565b82810360208401526138c1818688613851565b9150508260408301529695505050505050565b6000602082840312156138e657600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156138055761380561373b565b600067ffffffffffffffff8084168061392957613929613799565b92169190910692915050565b60006020828403121561394757600080fd5b815161354381613504565b600067ffffffffffffffff8083168185168083038211156138385761383861373b565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139a6576139a661373b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a",
}
// FaultDisputeGameABI is the input ABI used to generate the binding from.
......
......@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr
var FaultDisputeGameStorageLayout = new(solc.StorageLayout)
var FaultDisputeGameDeployedBin = "0x6080604052600436106101d85760003560e01c80638d450a9511610102578063d8cc1a3c11610095578063f8f43ff611610064578063f8f43ff6146106fd578063fa24f7431461071d578063fa315aa914610741578063fdffbb281461077457600080fd5b8063d8cc1a3c1461064c578063e1f0c3761461066c578063ec5e63081461069f578063f3f7214e146106d257600080fd5b8063c55cd0c7116100d1578063c55cd0c714610561578063c6f0308c14610574578063cf09e0d0146105fe578063d5d44d801461061f57600080fd5b80638d450a9514610489578063bbdc02db146104bc578063bcef3b55146104fd578063c395e1ca1461053a57600080fd5b8063609d33341161017a57806368800abf1161014957806368800abf146103f95780638129fc1c1461042c5780638980e0cc146104345780638b85902b1461044957600080fd5b8063609d33341461037157806360e2746414610386578063632247ea146103a65780636361506d146103b957600080fd5b80632810e1d6116101b65780632810e1d6146102a057806335fef567146102b55780633a768463146102ca57806354fd4d501461031b57600080fd5b80630356fe3a146101dd57806319effeb41461021f578063200d2ed214610265575b600080fd5b3480156101e957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022b57600080fd5b5060005461024c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610216565b34801561027157600080fd5b5060005461029390700100000000000000000000000000000000900460ff1681565b60405161021691906133cc565b3480156102ac57600080fd5b50610293610787565b6102c86102c336600461340d565b610984565b005b3480156102d657600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561032757600080fd5b506103646040518060400160405280600581526020017f302e352e3000000000000000000000000000000000000000000000000000000081525081565b604051610216919061349a565b34801561037d57600080fd5b50610364610994565b34801561039257600080fd5b506102c86103a13660046134cf565b6109a7565b6102c86103b4366004613508565b610a57565b3480156103c557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561020c565b34801561040557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c861122d565b34801561044057600080fd5b5060015461020c565b34801561045557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561020c565b34801561049557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156104c857600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561050957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561020c565b34801561054657600080fd5b5061020c61055536600461353d565b50662386f26fc1000090565b6102c861056f36600461340d565b6115c1565b34801561058057600080fd5b5061059461058f36600461356f565b6115cd565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610216565b34801561060a57600080fd5b5060005461024c9067ffffffffffffffff1681565b34801561062b57600080fd5b5061020c61063a3660046134cf565b60026020526000908152604090205481565b34801561065857600080fd5b506102c86106673660046135d1565b611664565b34801561067857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024c565b3480156106ab57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156106de57600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610216565b34801561070957600080fd5b506102c861071836600461365b565b611c42565b34801561072957600080fd5b506107326120db565b60405161021693929190613687565b34801561074d57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c861078236600461356f565b612138565b600080600054700100000000000000000000000000000000900460ff1660028111156107b5576107b561339d565b146107ec576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16610828576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600081548110610854576108546136b5565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461088f576001610892565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156109435761094361339d565b0217905560028111156109585761095861339d565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61099082826000610a57565b5050565b60606109a260406020612599565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220805490839055905190929083908381818185875af1925050503d8060008114610a12576040519150601f19603f3d011682016040523d82523d6000602084013e610a17565b606091505b5050905080610a52576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a8357610a8361339d565b14610aba576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610acf57610acf6136b5565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b94908390869061263016565b90506000610c34826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c765750610c737f00000000000000000000000000000000000000000000000000000000000000006002613713565b81145b8015610c80575084155b15610cb7576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610d11576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3c7f00000000000000000000000000000000000000000000000000000000000000006001613713565b8103610d4e57610d4e86888588612638565b34662386f26fc100001115610d8f576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610def576001856000015163ffffffff1681548110610dbe57610dbe6136b5565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610e139067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610e3d610e06856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610e519190613713565b610e5b919061372b565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610ece576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff1615610f4c576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506111e1919061372b565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600554610100900460ff161561126f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013511611326576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b606636111561133d5763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152329484019485526fffffffffffffffffffffffffffffffff348116606086019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808701908152600160a088018181524280861660c08b0190815283548085018555938952995160059384027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995192909b167fffffffffffffffff0000000000000000000000000000000000000000000000009099169890981764010000000073ffffffffffffffffffffffffffffffffffffffff928316021790995599517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7870180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919099161790975591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8850180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016918516919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9840155935194519481167001000000000000000000000000000000009590911694909402939093177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9093019290925581547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90931692909217905580546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116179055565b61099082826001610a57565b600181815481106115dd57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff1660028111156116905761169061339d565b146116c7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600187815481106116dc576116dc6136b5565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b905061173b7f00000000000000000000000000000000000000000000000000000000000000006001613713565b6117d7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611818576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156119075761186b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061372b565b6001901b61188a846fffffffffffffffffffffffffffffffff166127f9565b67ffffffffffffffff1661189e9190613771565b156118db576118d26118c360016fffffffffffffffffffffffffffffffff8716613785565b865463ffffffff16600061289f565b600301546118fd565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611931565b6003850154915061192e6118c36fffffffffffffffffffffffffffffffff861660016137b6565b90505b600882901b60088a8a6040516119489291906137ea565b6040518091039020901b14611989576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119948c612983565b905060006119a3836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611a1d908f908f908f908f908a90600401613843565b6020604051808303816000875af1158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a60919061387d565b600485015491149150600090600290611b0b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ba7896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611bb19190613896565b611bbb91906138b7565b67ffffffffffffffff161590508115158103611c03576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611c6e57611c6e61339d565b14611ca5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611cb4866129b2565b93509350935093506000611cca85858585612ddf565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d91906138de565b905060018903611e555773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84611db9367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f919061387d565b506120d0565b60028903611e815773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611db9565b60038903611ead5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611db9565b600489036120255760006fffffffffffffffffffffffffffffffff861615611f4557611f0b6fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612e9e565b611f35907f0000000000000000000000000000000000000000000000000000000000000000613713565b611f40906001613713565b611f67565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201e919061387d565b50506120d0565b6005890361209e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611e0c565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060612131610994565b9050909192565b60008054700100000000000000000000000000000000900460ff1660028111156121645761216461339d565b1461219b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106121b0576121b06136b5565b6000918252602082206005919091020160048101549092506121f290700100000000000000000000000000000000900460401c67ffffffffffffffff16610e06565b600483015490915060009061222490700100000000000000000000000000000000900467ffffffffffffffff16610e06565b61222e9042613896565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661226882846138fb565b67ffffffffffffffff16116122a9576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526004602052604090208054851580156122c9575060055460ff165b15612300576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561230d57508515155b15612372578454640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612340578161235c565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506123688188612f53565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b838110156124b85760008582815481106123a3576123a36136b5565b60009182526020808320909101548083526004909152604090912054909150156123f9576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061240e5761240e6136b5565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612467575060048101546fffffffffffffffffffffffffffffffff908116908516115b156124a5576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b5050806124b19061391e565b9050612387565b5061250073ffffffffffffffffffffffffffffffffffffffff8316156124de57826124fa565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612f53565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff841602178755600088815260046020526040812061255c91613363565b8760000361236857600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b606060006125d084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003613713565b90508267ffffffffffffffff1667ffffffffffffffff8111156125f5576125f5613956565b6040519080825280601f01601f19166020018201604052801561261f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006126576fffffffffffffffffffffffffffffffff841660016137b6565b905060006126678286600161289f565b9050600086901a838061275a57506126a060027f0000000000000000000000000000000000000000000000000000000000000000613771565b6004830154600290612744906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61274e91906138b7565b67ffffffffffffffff16145b156127b25760ff811660011480612774575060ff81166002145b6127ad576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b6127f0565b60ff8116156127f0576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b50505050505050565b600080612886837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826128e8576128e36fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613040565b612903565b612903856fffffffffffffffffffffffffffffffff16613207565b905060018481548110612918576129186136b5565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461297b57815460018054909163ffffffff16908110612966576129666136b5565b90600052602060002090600502019150612929565b509392505050565b6000806000806000612994866129b2565b93509350935093506129a884848484612ddf565b9695505050505050565b60008060008060008590506000600182815481106129d2576129d26136b5565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612aa9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612aea576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612bb1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612c2d57825463ffffffff16612bf77f00000000000000000000000000000000000000000000000000000000000000006001613713565b8303612c01578391505b60018181548110612c1457612c146136b5565b9060005260206000209060050201935080945050612aee565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612c96612c81856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612d7b576000612cce836fffffffffffffffffffffffffffffffff166127f9565b67ffffffffffffffff161115612d31576000612d08612d0060016fffffffffffffffffffffffffffffffff8616613785565b89600161289f565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612d559050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612dd1565b6000612d9d612d006fffffffffffffffffffffffffffffffff851660016137b6565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612e45578282604051602001612e289291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612e96565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612f2b847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101612fc3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff84166000908152602091909152604081208054839290613036908490613713565b9091555050505050565b6000816130df846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613120576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312983613207565b9050816131c8826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613201576131fe6131e5836001613713565b6fffffffffffffffffffffffffffffffff8316906132b3565b90505b92915050565b6000811960018301168161329b827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613340847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b50805460008255906000526020600020908101906133819190613384565b50565b5b808211156133995760008155600101613385565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613407577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561342057600080fd5b50508035926020909101359150565b6000815180845260005b8181101561345557602081850181015186830182015201613439565b81811115613467576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006131fe602083018461342f565b73ffffffffffffffffffffffffffffffffffffffff8116811461338157600080fd5b6000602082840312156134e157600080fd5b81356134ec816134ad565b9392505050565b8035801515811461350357600080fd5b919050565b60008060006060848603121561351d57600080fd5b8335925060208401359150613534604085016134f3565b90509250925092565b60006020828403121561354f57600080fd5b81356fffffffffffffffffffffffffffffffff811681146134ec57600080fd5b60006020828403121561358157600080fd5b5035919050565b60008083601f84011261359a57600080fd5b50813567ffffffffffffffff8111156135b257600080fd5b6020830191508360208285010111156135ca57600080fd5b9250929050565b600080600080600080608087890312156135ea57600080fd5b863595506135fa602088016134f3565b9450604087013567ffffffffffffffff8082111561361757600080fd5b6136238a838b01613588565b9096509450606089013591508082111561363c57600080fd5b5061364989828a01613588565b979a9699509497509295939492505050565b60008060006060848603121561367057600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006136ac606083018461342f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613726576137266136e4565b500190565b60008282101561373d5761373d6136e4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261378057613780613742565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156137ae576137ae6136e4565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156137e1576137e16136e4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006138576060830187896137fa565b828103602084015261386a8186886137fa565b9150508260408301529695505050505050565b60006020828403121561388f57600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156137ae576137ae6136e4565b600067ffffffffffffffff808416806138d2576138d2613742565b92169190910692915050565b6000602082840312156138f057600080fd5b81516134ec816134ad565b600067ffffffffffffffff8083168185168083038211156137e1576137e16136e4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361394f5761394f6136e4565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
var FaultDisputeGameDeployedBin = "0x6080604052600436106101d85760003560e01c80638d450a9511610102578063d8cc1a3c11610095578063f8f43ff611610064578063f8f43ff6146106fd578063fa24f7431461071d578063fa315aa914610741578063fdffbb281461077457600080fd5b8063d8cc1a3c1461064c578063e1f0c3761461066c578063ec5e63081461069f578063f3f7214e146106d257600080fd5b8063c55cd0c7116100d1578063c55cd0c714610561578063c6f0308c14610574578063cf09e0d0146105fe578063d5d44d801461061f57600080fd5b80638d450a9514610489578063bbdc02db146104bc578063bcef3b55146104fd578063c395e1ca1461053a57600080fd5b8063609d33341161017a57806368800abf1161014957806368800abf146103f95780638129fc1c1461042c5780638980e0cc146104345780638b85902b1461044957600080fd5b8063609d33341461037157806360e2746414610386578063632247ea146103a65780636361506d146103b957600080fd5b80632810e1d6116101b65780632810e1d6146102a057806335fef567146102b55780633a768463146102ca57806354fd4d501461031b57600080fd5b80630356fe3a146101dd57806319effeb41461021f578063200d2ed214610265575b600080fd5b3480156101e957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022b57600080fd5b5060005461024c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610216565b34801561027157600080fd5b5060005461029390700100000000000000000000000000000000900460ff1681565b6040516102169190613423565b3480156102ac57600080fd5b50610293610787565b6102c86102c3366004613464565b610984565b005b3480156102d657600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561032757600080fd5b506103646040518060400160405280600581526020017f302e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161021691906134f1565b34801561037d57600080fd5b50610364610994565b34801561039257600080fd5b506102c86103a1366004613526565b6109a7565b6102c86103b436600461355f565b610a57565b3480156103c557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561020c565b34801561040557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c861122d565b34801561044057600080fd5b5060015461020c565b34801561045557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561020c565b34801561049557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156104c857600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610216565b34801561050957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561020c565b34801561054657600080fd5b5061020c610555366004613594565b50662386f26fc1000090565b6102c861056f366004613464565b6115c1565b34801561058057600080fd5b5061059461058f3660046135c6565b6115cd565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610216565b34801561060a57600080fd5b5060005461024c9067ffffffffffffffff1681565b34801561062b57600080fd5b5061020c61063a366004613526565b60026020526000908152604090205481565b34801561065857600080fd5b506102c8610667366004613628565b611664565b34801561067857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024c565b3480156106ab57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b3480156106de57600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610216565b34801561070957600080fd5b506102c86107183660046136b2565b611c99565b34801561072957600080fd5b50610732612132565b604051610216939291906136de565b34801561074d57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061020c565b6102c86107823660046135c6565b61218f565b600080600054700100000000000000000000000000000000900460ff1660028111156107b5576107b56133f4565b146107ec576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16610828576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106108545761085461370c565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461088f576001610892565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610943576109436133f4565b021790556002811115610958576109586133f4565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61099082826000610a57565b5050565b60606109a2604060206125f0565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220805490839055905190929083908381818185875af1925050503d8060008114610a12576040519150601f19603f3d011682016040523d82523d6000602084013e610a17565b606091505b5050905080610a52576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a8357610a836133f4565b14610aba576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610acf57610acf61370c565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b94908390869061268716565b90506000610c34826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c765750610c737f0000000000000000000000000000000000000000000000000000000000000000600261376a565b81145b8015610c80575084155b15610cb7576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610d11576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3c7f0000000000000000000000000000000000000000000000000000000000000000600161376a565b8103610d4e57610d4e8688858861268f565b34662386f26fc100001115610d8f576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610def576001856000015163ffffffff1681548110610dbe57610dbe61370c565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610e139067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610e3d610e06856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610e51919061376a565b610e5b9190613782565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610ece576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff1615610f4c576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506111e19190613782565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600554610100900460ff161561126f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013511611326576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b606636111561133d5763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152329484019485526fffffffffffffffffffffffffffffffff348116606086019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808701908152600160a088018181524280861660c08b0190815283548085018555938952995160059384027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995192909b167fffffffffffffffff0000000000000000000000000000000000000000000000009099169890981764010000000073ffffffffffffffffffffffffffffffffffffffff928316021790995599517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7870180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919099161790975591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8850180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016918516919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9840155935194519481167001000000000000000000000000000000009590911694909402939093177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9093019290925581547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90931692909217905580546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116179055565b61099082826001610a57565b600181815481106115dd57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611690576116906133f4565b146116c7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600187815481106116dc576116dc61370c565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b905061173b7f0000000000000000000000000000000000000000000000000000000000000000600161376a565b6117d7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611818576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156119075761186b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613782565b6001901b61188a846fffffffffffffffffffffffffffffffff16612850565b67ffffffffffffffff1661189e91906137c8565b156118db576118d26118c360016fffffffffffffffffffffffffffffffff87166137dc565b865463ffffffff1660006128f6565b600301546118fd565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611931565b6003850154915061192e6118c36fffffffffffffffffffffffffffffffff8616600161380d565b90505b600882901b60088a8a604051611948929190613841565b6040518091039020901b14611989576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119948c6129da565b905060006119a3836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611a1d908f908f908f908f908a9060040161389a565b6020604051808303816000875af1158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6091906138d4565b600485015491149150600090600290611b0b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ba7896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611bb191906138ed565b611bbb919061390e565b67ffffffffffffffff161590508115158103611c03576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615611c5a576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611cc557611cc56133f4565b14611cfc576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611d0b86612a09565b93509350935093506000611d2185858585612e36565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190613935565b905060018903611eac5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84611e10367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea691906138d4565b50612127565b60028903611ed85773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611e10565b60038903611f045773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611e10565b6004890361207c5760006fffffffffffffffffffffffffffffffff861615611f9c57611f626fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612ef5565b611f8c907f000000000000000000000000000000000000000000000000000000000000000061376a565b611f9790600161376a565b611fbe565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612051573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207591906138d4565b5050612127565b600589036120f5576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611e63565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060612188610994565b9050909192565b60008054700100000000000000000000000000000000900460ff1660028111156121bb576121bb6133f4565b146121f2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106122075761220761370c565b60009182526020822060059190910201600481015490925061224990700100000000000000000000000000000000900460401c67ffffffffffffffff16610e06565b600483015490915060009061227b90700100000000000000000000000000000000900467ffffffffffffffff16610e06565b61228590426138ed565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166122bf8284613952565b67ffffffffffffffff1611612300576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600460205260409020805485158015612320575060055460ff165b15612357576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561236457508515155b156123c9578454640100000000900473ffffffffffffffffffffffffffffffffffffffff166000811561239757816123b3565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506123bf8188612faa565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561250f5760008582815481106123fa576123fa61370c565b6000918252602080832090910154808352600490915260409091205490915015612450576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106124655761246561370c565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156124be575060048101546fffffffffffffffffffffffffffffffff908116908516115b156124fc576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061250890613975565b90506123de565b5061255773ffffffffffffffffffffffffffffffffffffffff8316156125355782612551565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612faa565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff84160217875560008881526004602052604081206125b3916133ba565b876000036123bf57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b6060600061262784367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361376a565b90508267ffffffffffffffff1667ffffffffffffffff81111561264c5761264c6139ad565b6040519080825280601f01601f191660200182016040528015612676576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006126ae6fffffffffffffffffffffffffffffffff8416600161380d565b905060006126be828660016128f6565b9050600086901a83806127b157506126f760027f00000000000000000000000000000000000000000000000000000000000000006137c8565b600483015460029061279b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6127a5919061390e565b67ffffffffffffffff16145b156128095760ff8116600114806127cb575060ff81166002145b612804576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b612847565b60ff811615612847576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161131d565b50505050505050565b6000806128dd837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261293f5761293a6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613097565b61295a565b61295a856fffffffffffffffffffffffffffffffff1661325e565b90506001848154811061296f5761296f61370c565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146129d257815460018054909163ffffffff169081106129bd576129bd61370c565b90600052602060002090600502019150612980565b509392505050565b60008060008060006129eb86612a09565b93509350935093506129ff84848484612e36565b9695505050505050565b6000806000806000859050600060018281548110612a2957612a2961370c565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612b00906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b41576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612c08906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612c8457825463ffffffff16612c4e7f0000000000000000000000000000000000000000000000000000000000000000600161376a565b8303612c58578391505b60018181548110612c6b57612c6b61370c565b9060005260206000209060050201935080945050612b45565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612ced612cd8856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612dd2576000612d25836fffffffffffffffffffffffffffffffff16612850565b67ffffffffffffffff161115612d88576000612d5f612d5760016fffffffffffffffffffffffffffffffff86166137dc565b8960016128f6565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612dac9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612e28565b6000612df4612d576fffffffffffffffffffffffffffffffff8516600161380d565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612e9c578282604051602001612e7f9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612eed565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612f82847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161301a576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff8416600090815260209190915260408120805483929061308d90849061376a565b9091555050505050565b600081613136846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613177576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131808361325e565b90508161321f826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116132585761325561323c83600161376a565b6fffffffffffffffffffffffffffffffff83169061330a565b90505b92915050565b600081196001830116816132f2827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613397847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b50805460008255906000526020600020908101906133d891906133db565b50565b5b808211156133f057600081556001016133dc565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061345e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561347757600080fd5b50508035926020909101359150565b6000815180845260005b818110156134ac57602081850181015186830182015201613490565b818111156134be576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132556020830184613486565b73ffffffffffffffffffffffffffffffffffffffff811681146133d857600080fd5b60006020828403121561353857600080fd5b813561354381613504565b9392505050565b8035801515811461355a57600080fd5b919050565b60008060006060848603121561357457600080fd5b833592506020840135915061358b6040850161354a565b90509250925092565b6000602082840312156135a657600080fd5b81356fffffffffffffffffffffffffffffffff8116811461354357600080fd5b6000602082840312156135d857600080fd5b5035919050565b60008083601f8401126135f157600080fd5b50813567ffffffffffffffff81111561360957600080fd5b60208301915083602082850101111561362157600080fd5b9250929050565b6000806000806000806080878903121561364157600080fd5b863595506136516020880161354a565b9450604087013567ffffffffffffffff8082111561366e57600080fd5b61367a8a838b016135df565b9096509450606089013591508082111561369357600080fd5b506136a089828a016135df565b979a9699509497509295939492505050565b6000806000606084860312156136c757600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006137036060830184613486565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561377d5761377d61373b565b500190565b6000828210156137945761379461373b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826137d7576137d7613799565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156138055761380561373b565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156138385761383861373b565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006138ae606083018789613851565b82810360208401526138c1818688613851565b9150508260408301529695505050505050565b6000602082840312156138e657600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156138055761380561373b565b600067ffffffffffffffff8084168061392957613929613799565b92169190910692915050565b60006020828403121561394757600080fd5b815161354381613504565b600067ffffffffffffffff8083168185168083038211156138385761383861373b565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139a6576139a661373b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
func init() {
......
......@@ -100,8 +100,8 @@
"sourceCodeHash": "0x1e5a6deded88804971fc1847c9eac65921771bff353437c0b29ed2f55513b984"
},
"src/dispute/FaultDisputeGame.sol": {
"initCodeHash": "0x44969c83852ed72e3152bcd98533fefa7b88116a939bf7ee4ad0f87dc9091ea2",
"sourceCodeHash": "0x47a93c22df3b8481be0a553ba0ecccfc63cccf1ce7a5d908f11c940f4924b09a"
"initCodeHash": "0xa06a5699121ff4b6f7bb89c43d56070fffee78c856363ead237e45ad6746db87",
"sourceCodeHash": "0x5f98e7357a45507c39366d3056a6c948d6be1a0b72a8758c66396041aa823fc9"
},
"src/legacy/DeployerWhitelist.sol": {
"initCodeHash": "0x8de80fb23b26dd9d849f6328e56ea7c173cd9e9ce1f05c9beea559d1720deb3d",
......
......@@ -623,6 +623,11 @@
"name": "ClockTimeExceeded",
"type": "error"
},
{
"inputs": [],
"name": "DuplicateStep",
"type": "error"
},
{
"inputs": [],
"name": "GameDepthExceeded",
......
......@@ -638,6 +638,11 @@
"name": "ClockTimeExceeded",
"type": "error"
},
{
"inputs": [],
"name": "DuplicateStep",
"type": "error"
},
{
"inputs": [],
"name": "GameDepthExceeded",
......
......@@ -81,8 +81,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
bool internal initialized;
/// @notice Semantic version.
/// @custom:semver 0.5.0
string public constant version = "0.5.0";
/// @custom:semver 0.6.0
string public constant version = "0.6.0";
/// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace.
......@@ -193,6 +193,9 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
bool parentPostAgree = (parentPos.depth() - postState.position.depth()) % 2 == 0;
if (parentPostAgree == validStep) revert ValidStep();
// INVARIANT: A step cannot be made against a claim for a second time.
if (parent.counteredBy != address(0)) revert DuplicateStep();
// Set the parent claim as countered. We do not need to append a new claim to the game;
// instead, we can just set the existing parent as countered.
parent.counteredBy = msg.sender;
......
......@@ -88,6 +88,10 @@ error ClaimAboveSplit();
/// depth of the game.
error InvalidSplitDepth();
/// @notice Thrown when trying to step against a claim for a second time, after it has already been countered with
/// an instruction step.
error DuplicateStep();
////////////////////////////////////////////////////////////////
// `PermissionedDisputeGame` Errors //
////////////////////////////////////////////////////////////////
......
......@@ -442,6 +442,27 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.attack{ value: 0 }(0, _dummyClaim());
}
/// @dev Tests that a claim cannot be stepped against twice.
function test_step_duplicateStep_reverts() public {
// Give the test contract some ether
vm.deal(address(this), 100 ether);
// Make claims all the way down the tree.
gameProxy.attack{ value: 1 ether }(0, _dummyClaim());
gameProxy.attack{ value: 1 ether }(1, _dummyClaim());
gameProxy.attack{ value: 1 ether }(2, _dummyClaim());
gameProxy.attack{ value: 1 ether }(3, _dummyClaim());
gameProxy.attack{ value: 1 ether }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
gameProxy.attack{ value: 1 ether }(5, _dummyClaim());
gameProxy.attack{ value: 1 ether }(6, _dummyClaim());
gameProxy.attack{ value: 1 ether }(7, _dummyClaim());
gameProxy.addLocalData(LocalPreimageKey.STARTING_L2_BLOCK_NUMBER, 8, 0);
gameProxy.step(8, true, absolutePrestateData, hex"");
vm.expectRevert(DuplicateStep.selector);
gameProxy.step(8, true, absolutePrestateData, hex"");
}
/// @dev Static unit test for the correctness an uncontested root resolution.
function test_resolve_rootUncontested_succeeds() public {
vm.warp(block.timestamp + 3 days + 12 hours + 1 seconds);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment