0 txs
3k calls
constructor
constructor((uint32 gameType, bytes32 absolutePrestate, uint256 maxGameDepth, uint256 splitDepth, uint64 clockExtension, uint64 maxClockDuration, address vm, address weth, address anchorStateRegistry, uint256 l2ChainId) _params, address _proposer, address _challenger)
functions
absolutePrestate
viewfunction absolutePrestate() view returns (bytes32 absolutePrestate_)
anchorStateRegistry
viewfunction anchorStateRegistry() view returns (address registry_)
bondDistributionMode
viewfunction bondDistributionMode() view returns (uint8)
challenger
viewfunction challenger() view returns (address challenger_)
claimData
viewfunction claimData(uint256) view returns (uint32 parentIndex, address counteredBy, address claimant, uint128 bond, bytes32 claim, uint128 position, uint128 clock)
claimDataLen
viewfunction claimDataLen() view returns (uint256 len_)
claims
viewfunction claims(bytes32) view returns (bool)
clockExtension
viewfunction clockExtension() view returns (uint64 clockExtension_)
createdAt
viewfunction createdAt() view returns (uint64)
credit
viewfunction credit(address _recipient) view returns (uint256 credit_)
extraData
purefunction extraData() pure returns (bytes extraData_)
gameCreator
purefunction gameCreator() pure returns (address creator_)
gameData
viewfunction gameData() view returns (uint32 gameType_, bytes32 rootClaim_, bytes extraData_)
gameType
viewfunction gameType() view returns (uint32 gameType_)
getChallengerDuration
viewfunction getChallengerDuration(uint256 _claimIndex) view returns (uint64 duration_)
getNumToResolve
viewfunction getNumToResolve(uint256 _claimIndex) view returns (uint256 numRemainingChildren_)
getRequiredBond
viewfunction getRequiredBond(uint128 _position) view returns (uint256 requiredBond_)
hasUnlockedCredit
viewfunction hasUnlockedCredit(address) view returns (bool)
l1Head
purefunction l1Head() pure returns (bytes32 l1Head_)
l2BlockNumber
purefunction l2BlockNumber() pure returns (uint256 l2BlockNumber_)
l2BlockNumberChallenged
viewfunction l2BlockNumberChallenged() view returns (bool)
l2BlockNumberChallenger
viewfunction l2BlockNumberChallenger() view returns (address)
l2ChainId
viewfunction l2ChainId() view returns (uint256 l2ChainId_)
maxClockDuration
viewfunction maxClockDuration() view returns (uint64 maxClockDuration_)
maxGameDepth
viewfunction maxGameDepth() view returns (uint256 maxGameDepth_)
normalModeCredit
viewfunction normalModeCredit(address) view returns (uint256)
proposer
viewfunction proposer() view returns (address proposer_)
refundModeCredit
viewfunction refundModeCredit(address) view returns (uint256)
resolutionCheckpoints
viewfunction resolutionCheckpoints(uint256) view returns (bool initialCheckpointComplete, uint32 subgameIndex, uint128 leftmostPosition, address counteredBy)
resolvedAt
viewfunction resolvedAt() view returns (uint64)
resolvedSubgames
viewfunction resolvedSubgames(uint256) view returns (bool)
rootClaim
purefunction rootClaim() pure returns (bytes32 rootClaim_)
splitDepth
viewfunction splitDepth() view returns (uint256 splitDepth_)
startingBlockNumber
viewfunction startingBlockNumber() view returns (uint256 startingBlockNumber_)
startingOutputRoot
viewfunction startingOutputRoot() view returns (bytes32 root, uint256 l2BlockNumber)
startingRootHash
viewfunction startingRootHash() view returns (bytes32 startingRootHash_)
status
viewfunction status() view returns (uint8)
subgames
viewfunction subgames(uint256, uint256) view returns (uint256)
version
purefunction version() pure returns (string)
vm
viewfunction vm() view returns (address vm_)
wasRespectedGameTypeWhenCreated
viewfunction wasRespectedGameTypeWhenCreated() view returns (bool)
weth
viewfunction weth() view returns (address weth_)
addLocalData
nonpayablefunction addLocalData(uint256 _ident, uint256 _execLeafIdx, uint256 _partOffset)
attack
payablefunction attack(bytes32 _disputed, uint256 _parentIndex, bytes32 _claim) payable
challengeRootL2Block
nonpayablefunction challengeRootL2Block(tuple _outputRootProof, bytes _headerRLP)
claimCredit
nonpayablefunction claimCredit(address _recipient)
closeGame
nonpayablefunction closeGame()
defend
payablefunction defend(bytes32 _disputed, uint256 _parentIndex, bytes32 _claim) payable
initialize
payablefunction initialize() payable
move
payablefunction move(bytes32 _disputed, uint256 _challengeIndex, bytes32 _claim, bool _isAttack) payable
resolve
nonpayablefunction resolve() returns (uint8 status_)
resolveClaim
nonpayablefunction resolveClaim(uint256 _claimIndex, uint256 _numToResolve)
step
nonpayablefunction step(uint256 _claimIndex, bool _isAttack, bytes _stateData, bytes _proof)
events
GameClosed
event GameClosed(uint8 bondDistributionMode)
Move
event Move(uint256 indexed parentIndex, bytes32 indexed claim, address indexed claimant)
Resolved
event Resolved(uint8 indexed status)
errors
AlreadyInitialized
error AlreadyInitialized()
AnchorRootNotFound
error AnchorRootNotFound()
BadAuth
error BadAuth()
BlockNumberMatches
error BlockNumberMatches()
BondTransferFailed
error BondTransferFailed()
CannotDefendRootClaim
error CannotDefendRootClaim()
ClaimAboveSplit
error ClaimAboveSplit()
ClaimAlreadyExists
error ClaimAlreadyExists()
ClaimAlreadyResolved
error ClaimAlreadyResolved()
ClockNotExpired
error ClockNotExpired()
ClockTimeExceeded
error ClockTimeExceeded()
ContentLengthMismatch
error ContentLengthMismatch()
DuplicateStep
error DuplicateStep()
EmptyItem
error EmptyItem()
GameDepthExceeded
error GameDepthExceeded()
GameNotFinalized
error GameNotFinalized()
GameNotInProgress
error GameNotInProgress()
GameNotResolved
error GameNotResolved()
IncorrectBondAmount
error IncorrectBondAmount()
InvalidBondDistributionMode
error InvalidBondDistributionMode()
InvalidChallengePeriod
error InvalidChallengePeriod()
InvalidClockExtension
error InvalidClockExtension()
InvalidDataRemainder
error InvalidDataRemainder()
InvalidDisputedClaimIndex
error InvalidDisputedClaimIndex()
InvalidHeader
error InvalidHeader()
InvalidHeaderRLP
error InvalidHeaderRLP()
InvalidLocalIdent
error InvalidLocalIdent()
InvalidOutputRootProof
error InvalidOutputRootProof()
InvalidParent
error InvalidParent()
InvalidPrestate
error InvalidPrestate()
InvalidSplitDepth
error InvalidSplitDepth()
L2BlockNumberChallenged
error L2BlockNumberChallenged()
MaxDepthTooLarge
error MaxDepthTooLarge()
NoCreditToClaim
error NoCreditToClaim()
OutOfOrderResolution
error OutOfOrderResolution()
ReservedGameType
error ReservedGameType()
UnexpectedList
error UnexpectedList()
UnexpectedRootClaim
error UnexpectedRootClaim(bytes32 rootClaim)
UnexpectedString
error UnexpectedString()
ValidStep
error ValidStep()
creation bytecode
0x6102006040523480156200001257600080fd5b50604051620064593803806200645983398101604081905262000035916200053c565b82620000446001607e6200064b565b60ff16816040015111156200006c57604051633beff19960e11b815260040160405180910390fd5b60001981606001511480620000965750604081015160608201516200009390600162000671565b10155b15620000b55760405163e62ccf3960e01b815260040160405180910390fd5b600281606001511015620000dc5760405163e62ccf3960e01b815260040160405180910390fd5b6001600160401b0380168160c001516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000129573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014f91906200068c565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b39190620006ac565b1115620001d35760405163b4e1243360e01b815260040160405180910390fd5b6000620001f882608001516001600160401b03166200048e60201b62000ce11760201c565b6200020e906001600160401b03166002620006c6565b905060008260c001516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b91906200068c565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df9190620006ac565b6200030284608001516001600160401b03166200048e60201b62000ce11760201c565b6001600160401b031662000317919062000671565b905060006200033283836200049160201b6200277a1760201c565b90506001600160401b038111156200035d5760405163235dfb2b60e21b815260040160405180910390fd5b620003808460a001516001600160401b03166200048e60201b62000ce11760201c565b6001600160401b0316816001600160401b03161115620003b35760405163235dfb2b60e21b815260040160405180910390fd5b63ffffffff8016620003da856000015163ffffffff166200048e60201b62000ce11760201c565b63ffffffff1603620003ff5760405163073ed16760e31b815260040160405180910390fd5b5050815163ffffffff1661012090815260208301516080908152604084015160a0908152606085015160c0908152918501516001600160401b039081166101a052908501511660e0908152908401516001600160a01b03908116610100908152918501518116610140529084015181166101605292015161018052509182166101c052166101e05250620006e8565b90565b600081831015620004a35781620004a5565b825b9392505050565b60405161014081016001600160401b0381118282101715620004de57634e487b7160e01b600052604160045260246000fd5b60405290565b805163ffffffff81168114620004f957600080fd5b919050565b80516001600160401b0381168114620004f957600080fd5b6001600160a01b03811681146200052c57600080fd5b50565b8051620004f98162000516565b60008060008385036101808112156200055457600080fd5b610140808212156200056557600080fd5b6200056f620004ac565b91506200057c86620004e4565b8252602086015160208301526040860151604083015260608601516060830152620005aa60808701620004fe565b6080830152620005bd60a08701620004fe565b60a0830152620005d060c087016200052f565b60c0830152620005e360e087016200052f565b60e0830152610100620005f88188016200052f565b8184015250610120808701518184015250819450620006198187016200052f565b935050506200062c61016085016200052f565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168082101562000668576200066862000635565b90039392505050565b6000821982111562000687576200068762000635565b500190565b6000602082840312156200069f57600080fd5b8151620004a58162000516565b600060208284031215620006bf57600080fd5b5051919050565b6000816000190483118215151615620006e357620006e362000635565b500290565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615b9d620008bc6000396000818161061101528181611a3f01526122ec01526000818161090201528181611a0d01528181611e2701526122ba01526000818161076d015281816130290152818161309401526130c7015260008181610aba01526126b80152600081816106e301528181611bc801528181611ca201528181611d310152818161353601526139c501526000818161059e0152818161181b015281816119170152818161343001526138cc01526000818161093d0152818161273a015261399c01526000818161053b015281816123ba01528181612f420152614233015260008181610b0d01528181610f7401528181611fb801528181611ffa01528181612eb2015281816130f70152613156015260008181610b400152818161255e01528181612cfb01528181612e2101528181613065015281816140aa015281816144d7015281816145b60152818161466901528181614e970152615088015260008181610be7015281816120a60152818161212c01528181612dc401528181612f1601528181613fc201526140cb01526000818161082f015261414e0152615b9d6000f3fe60806040526004361061034a5760003560e01c80636f034409116101bb578063c0d8bb74116100f7578063dabd396d11610095578063f8f43ff61161006f578063f8f43ff614610b94578063fa24f74314610bb4578063fa315aa914610bd8578063fe2bbeb214610c0b57600080fd5b8063dabd396d14610afe578063ec5e630814610b31578063eff0f59214610b6457600080fd5b8063cf09e0d0116100d1578063cf09e0d014610a6a578063d5d44d8014610a8b578063d6ae3cd514610aab578063d8cc1a3c14610ade57600080fd5b8063c0d8bb74146109a9578063c395e1ca146109d6578063c6f0308c146109f657600080fd5b80638b85902b11610164578063a8e4fb901161013e578063a8e4fb90146108f3578063bbdc02db14610926578063bcef3b5514610967578063bd8da9561461098957600080fd5b80638b85902b146107fe5780638d450a9514610820578063a445ece61461085357600080fd5b80637b0f0adc116101955780637b0f0adc146107ce5780638129fc1c146107e15780638980e0cc146107e957600080fd5b80636f0344091461079157806370872aa5146107a4578063786b844b146107b957600080fd5b80633e3ac9121161028a57806357da950e11610233578063609d33341161020d578063609d33341461070757806360e274641461071c5780636361506d1461073c5780636b6716c01461075e57600080fd5b806357da950e146106845780635a5fa2d9146106b45780635c0cba33146106d457600080fd5b8063529d6a8c11610264578063529d6a8c146105d5578063534db0e21461060257806354fd4d501461063557600080fd5b80633e3ac9121461055f5780633fc8cef31461058f578063472777c6146105c257600080fd5b806325fc2ace116102f757806330dbe570116102d157806330dbe570146104b8578063378dd48c146104f057806337b1b2291461050a5780633a7684631461052c57600080fd5b806325fc2ace146104645780632810e1d6146104835780632ad69aeb1461049857600080fd5b8063200d2ed211610328578063200d2ed2146103dc578063222abf451461040a578063250e69bd1461044a57600080fd5b8063019351301461034f57806303c2924d1461037157806319effeb414610391575b600080fd5b34801561035b57600080fd5b5061036f61036a36600461540d565b610c3b565b005b34801561037d57600080fd5b5061036f61038c366004615468565b610efa565b34801561039d57600080fd5b506000546103be9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103e857600080fd5b506000546103fd90600160801b900460ff1681565b6040516103d391906154c1565b34801561041657600080fd5b5061043a6104253660046154e9565b600c6020526000908152604090205460ff1681565b60405190151581526020016103d3565b34801561045657600080fd5b50600a5461043a9060ff1681565b34801561047057600080fd5b506008545b6040519081526020016103d3565b34801561048f57600080fd5b506103fd611482565b3480156104a457600080fd5b506104756104b3366004615468565b61165a565b3480156104c457600080fd5b506001546104d8906001600160a01b031681565b6040516001600160a01b0390911681526020016103d3565b3480156104fc57600080fd5b50600d546103fd9060ff1681565b34801561051657600080fd5b503660011981013560f01c90033560601c6104d8565b34801561053857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104d8565b34801561056b57600080fd5b5060005461043a907201000000000000000000000000000000000000900460ff1681565b34801561059b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104d8565b61036f6105d0366004615506565b611690565b3480156105e157600080fd5b506104756105f03660046154e9565b60036020526000908152604090205481565b34801561060e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104d8565b34801561064157600080fd5b5060408051808201909152600581527f312e342e3100000000000000000000000000000000000000000000000000000060208201525b6040516103d3919061559d565b34801561069057600080fd5b5060085460095461069f919082565b604080519283526020830191909152016103d3565b3480156106c057600080fd5b506104756106cf3660046155b0565b6116a2565b3480156106e057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104d8565b34801561071357600080fd5b506106776116dc565b34801561072857600080fd5b5061036f6107373660046154e9565b6116ea565b34801561074857600080fd5b503660011981013560f01c900360340135610475565b34801561076a57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103be565b61036f61079f3660046155d7565b611a02565b3480156107b057600080fd5b50600954610475565b3480156107c557600080fd5b5061036f611aa9565b61036f6107dc366004615506565b611e0f565b61036f611e1c565b3480156107f557600080fd5b50600254610475565b34801561080a57600080fd5b503660011981013560f01c900360540135610475565b34801561082c57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610475565b34801561085f57600080fd5b506108b561086e3660046155b0565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b031660608201526080016103d3565b3480156108ff57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104d8565b34801561093257600080fd5b5060405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103d3565b34801561097357600080fd5b503660011981013560f01c900360140135610475565b34801561099557600080fd5b506103be6109a43660046155b0565b611e88565b3480156109b557600080fd5b506104756109c43660046154e9565b600b6020526000908152604090205481565b3480156109e257600080fd5b506104756109f1366004615618565b612022565b348015610a0257600080fd5b50610a16610a113660046155b0565b6121e3565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e0016103d3565b348015610a7657600080fd5b506000546103be9067ffffffffffffffff1681565b348015610a9757600080fd5b50610475610aa63660046154e9565b612257565b348015610ab757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610475565b348015610aea57600080fd5b5061036f610af9366004615641565b6122af565b348015610b0a57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103be565b348015610b3d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610475565b348015610b7057600080fd5b5061043a610b7f3660046155b0565b60046020526000908152604090205460ff1681565b348015610ba057600080fd5b5061036f610baf366004615506565b612352565b348015610bc057600080fd5b50610bc9612738565b6040516103d3939291906156cd565b348015610be457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610475565b348015610c1757600080fd5b5061043a610c263660046155b0565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610c5a57610c5a61548a565b14610c785760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610ccb576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ce43660011981013560f01c90036014013590565b90565b610cfb610cf636869003860186615708565b612795565b14610d32576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d4792919061577c565b604051809103902014610d86576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dcf610dca84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127f192505050565b61285e565b90506000610df682600881518110610de957610de961578c565b6020026020010151612a14565b9050602081511115610e34576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605401358103610e8b576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054600160801b900460ff166002811115610f1957610f1961548a565b14610f375760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610f4c57610f4c61578c565b906000526020600020906005020190506000610f6784611e88565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015610fd0576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611019576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561103657508515155b1561109957835464010000000090046001600160a01b03166000811561105c578161106b565b60018601546001600160a01b03165b90506110778187612ac8565b505050600094855250506006602052505060409020805460ff19166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b0316606083015261111d576001600160801b03604082015260018152600086900361111d578195505b600086826020015163ffffffff1661113591906157b8565b905060008382116111465781611148565b835b602084015190915063ffffffff165b818110156112685760008682815481106111735761117361578c565b6000918252602080832090910154808352600690915260409091205490915060ff166111cb576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282815481106111e0576111e061578c565b60009182526020909120600590910201805490915064010000000090046001600160a01b03161580156112275750600481015460408701516001600160801b039182169116115b156112535760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b50508080611260906157d0565b915050611157565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039093169290921790915584900361147757606083015160008a8152600660205260409020805460ff19166001179055891580156113b457506000547201000000000000000000000000000000000000900460ff165b1561140f576001546001600160a01b03166113cf818a612ac8565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611475565b61143c6001600160a01b038216156114275781611436565b60018901546001600160a01b03165b89612ac8565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b600080600054600160801b900460ff1660028111156114a3576114a361548a565b146114c15760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff16611525576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b031660026000815481106115445761154461578c565b600091825260209091206005909102015464010000000090046001600160a01b031614611572576001611575565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b8360028111156116195761161961548a565b02179055600281111561162e5761162e61548a565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b6005602052816000526040600020818154811061167657600080fd5b90600052602060002001600091509150505481565b905090565b61169d8383836001611a02565b505050565b600081815260076020908152604080832060059092528220805482546116d390610100900463ffffffff16826157ea565b95945050505050565b606061168b60546020612b0a565b6116f2611aa9565b60006002600d5460ff16600281111561170d5761170d61548a565b0361173157506001600160a01b0381166000908152600b60205260409020546117a0565b6001600d5460ff16600281111561174a5761174a61548a565b0361176e57506001600160a01b0381166000908152600360205260409020546117a0565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff1661187d576001600160a01b038281166000818152600c602052604090819020805460ff19166001179055517f7eee288d0000000000000000000000000000000000000000000000000000000081526004810191909152602481018390527f000000000000000000000000000000000000000000000000000000000000000090911690637eee288d90604401600060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b505050505050565b806000036118b7576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038281166000818152600b60209081526040808320839055600390915280822091909155517ff3fef3a30000000000000000000000000000000000000000000000000000000081526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063f3fef3a390604401600060405180830381600087803b15801561195d57600080fd5b505af1158015611971573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146119c2576040519150601f19603f3d011682016040523d82523d6000602084013e6119c7565b606091505b505090508061169d576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a615750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b611a97576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa384848484612b3e565b50505050565b6002600d5460ff166002811115611ac257611ac261548a565b1480611ae457506001600d5460ff166002811115611ae257611ae261548a565b145b15611aeb57565b6000600d5460ff166002811115611b0457611b0461548a565b14611b3b576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff16600003611b97576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630314d2b390602401602060405180830381865afa158015611c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3b9190615801565b905080611c74576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906317cf21a990602401600060405180830381600087803b158015611cee57600080fd5b505af1925050508015611cff575060015b506040517f496b9c160000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063496b9c1690602401602060405180830381865afa158015611d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da49190615801565b90508015611dbe57600d805460ff19166001179055611dcc565b600d805460ff191660021790555b600d546040517f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f91611e039160ff909116906154c1565b60405180910390a15050565b61169d8383836000611a02565b326001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e7e576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e866134df565b565b600080600054600160801b900460ff166002811115611ea957611ea961548a565b14611ec75760405163067fe19560e41b815260040160405180910390fd5b600060028381548110611edc57611edc61578c565b600091825260208220600590910201805490925063ffffffff90811614611f4257815460028054909163ffffffff16908110611f1a57611f1a61578c565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b6004820154600090611f6d90600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b611f819067ffffffffffffffff16426157ea565b611f97611f60846001600160801b031660401c90565b67ffffffffffffffff16611fab91906157b8565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611ff857806116d3565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b60008061209f836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f00000000000000000000000000000000000000000000000000000000000000008111156120fe576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a30060006121198383615834565b9050670de0b6b3a76400006000612150827f0000000000000000000000000000000000000000000000000000000000000000615848565b9050600061216e612169670de0b6b3a764000086615848565b613a58565b9050600061217c8484613caa565b9050600061218a8383613cf9565b9050600061219782613d27565b905060006121b6826121b1670de0b6b3a76400008f615848565b613f0f565b905060006121c48b83613cf9565b90506121d0818d615848565b9f9e505050505050505050505050505050565b600281815481106121f357600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b60006002600d5460ff1660028111156122725761227261548a565b0361229357506001600160a01b03166000908152600b602052604090205490565b506001600160a01b031660009081526003602052604090205490565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061230e5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b612344576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611875868686868686613f40565b60008054600160801b900460ff1660028111156123715761237161548a565b1461238f5760405163067fe19560e41b815260040160405180910390fd5b60008060008061239e8661449c565b935093509350935060006123b4858585856147f5565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243a9190615867565b905060018903612507576001600160a01b0381166352f0f3ad8a8461246b3660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156124dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125019190615884565b50611477565b60028903612526576001600160a01b0381166352f0f3ad8a848961246b565b60038903612545576001600160a01b0381166352f0f3ad8a848761246b565b6004890361267a5760006125826001600160801b0385167f0000000000000000000000000000000000000000000000000000000000000000614894565b60095461258f91906157b8565b61259a9060016157b8565b90503660011981013560f01c90036054013581106125c7573660011981013560f01c9003605401356125c9565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561264f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126739190615884565b5050611477565b60058903612706576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a4016124be565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000003660011981013560f01c90036014013560606127736116dc565b9050909192565b60008183101561278a578161278c565b825b90505b92915050565b600081600001518260200151836040015184606001516040516020016127d4949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612840576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061286e85614929565b9194509250905060018160018111156128895761288961548a565b146128c0576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516128cc83856157b8565b14612903576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161291a5790505093506000835b8651811015612a085760008061298d6040518060400160405280858c6000015161297191906157ea565b8152602001858c6020015161298691906157b8565b9052614929565b5091509150604051806040016040528083836129a991906157b8565b8152602001848b602001516129be91906157b8565b8152508885815181106129d3576129d361578c565b60209081029190910101526129e96001856157b8565b93506129f581836157b8565b6129ff90846157b8565b92505050612947565b50845250919392505050565b60606000806000612a2485614929565b919450925090506000816001811115612a3f57612a3f61548a565b14612a76576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a8082846157b8565b855114612ab9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d385602001518484614dc7565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b0390931692909190612b019084906157b8565b90915550505050565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054600160801b900460ff166002811115612b5d57612b5d61548a565b14612b7b5760405163067fe19560e41b815260040160405180910390fd5b600060028481548110612b9057612b9061578c565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514612c54576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000612ce9826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612d245750612d217f000000000000000000000000000000000000000000000000000000000000000060026157b8565b81145b8015612d2e575084155b15612d65576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d8b575086155b15612dc2576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115612e1c576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e477f000000000000000000000000000000000000000000000000000000000000000060016157b8565b8103612e5957612e5986888588614e5c565b34612e6383612022565b14612e9a576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612ea588611e88565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603612f0d576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612f3a60017f00000000000000000000000000000000000000000000000000000000000000006157ea565b830361305e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc29190615867565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130239190615884565b613057907f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1661589d565b90506130f1565b61308960017f00000000000000000000000000000000000000000000000000000000000000006157ea565b83036130c4576130577f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1660026158c9565b507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff165b613125817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166158f9565b67ffffffffffffffff166131408367ffffffffffffffff1690565b67ffffffffffffffff16111561318757613184817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166158f9565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff16156131fc576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c815260200190815260200160002060016002805490506133f391906157ea565b81546001810183556000928352602080842090910191909155338252600b90526040812080543492906134279084906157b8565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561348957600080fd5b505af115801561349d573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b60005471010000000000000000000000000000000000900460ff1615613531576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d83ef2676040518163ffffffff1660e01b81526004016040805180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b59190615922565b9092509050816135f1576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461362457639824bdab6000526004601cfd5b803660011981013560f01c90036054013511613682576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff808252600060208084018281523660011981013560f01c90038035606090811c8789018181526001600160801b0334818116948b0194855260149095013560808b01908152600160a08c0181815242841660c08e019081526002805493840181558c529c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590930292830180549a5191909d167fffffffffffffffff000000000000000000000000000000000000000000000000909a16999099176401000000006001600160a01b039a8b160217909b5592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0820180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001691851691909117905593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015595519651968116600160801b9790911696909602959095177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101558154710100000000000000000000000000000000007fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff909116178255918152600b9091529182208054919290916138c39084906157b8565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561392557600080fd5b505af1158015613939573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000063ffffffff1692507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691633c9f397c9160048083019260209291908290030181865afa158015613a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3c9190615946565b600a805460ff191663ffffffff92909216929092141790555050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613aae57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613ce757637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613d175763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613d5557919050565b680755bf798b4a1bf1e58212613d735763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061278c670de0b6b3a764000083613f2786613a58565b613f31919061596c565b613f3b9190615a28565b613d27565b60008054600160801b900460ff166002811115613f5f57613f5f61548a565b14613f7d5760405163067fe19560e41b815260040160405180910390fd5b600060028781548110613f9257613f9261578c565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b9050613fe87f000000000000000000000000000000000000000000000000000000000000000060016157b8565b614062826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461409c576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915614178576140ef7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006157ea565b6001901b614105846001600160801b0316614feb565b6001600160801b03166141189190615a72565b1561414c5761414361413460016001600160801b038716615a86565b865463ffffffff166000615071565b6003015461416e565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050614199565b600385015491506141966141346001600160801b0386166001615aa6565b90505b600882901b60088a8a6040516141b092919061577c565b6040518091039020901b146141f1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141fc8c61513a565b9050600061420b836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e14ced3290614278908f908f908f908f908a90600401615b11565b6020604051808303816000875af1158015614297573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142bb9190615884565b600485015491149150600090600290614344906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143be896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143c89190615b4b565b6143d29190615b6e565b60ff161590508115158103614413576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b03161561445d576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008060008060008590506000600282815481106144bc576144bc61578c565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090614571906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145ab576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090614650906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146c557825463ffffffff1661468f7f000000000000000000000000000000000000000000000000000000000000000060016157b8565b8303614699578391505b600281815481106146ac576146ac61578c565b90600052602060002090600502019350809450506145af565b600481810154908401546001600160801b0391821691166000816001600160801b031661470a6146fe856001600160801b031660011c90565b6001600160801b031690565b6001600160801b031614905080156147a3576000614730836001600160801b0316614feb565b6001600160801b0316111561478057600061476061475860016001600160801b038616615a86565b896001615071565b6003810154600490910154909c506001600160801b03169a506147869050565b6008549a505b600386015460048701549099506001600160801b031697506147e7565b60006147bc6147586001600160801b0385166001615aa6565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b038416156148505760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a001604051602081830303815290604052805190602001206116d3565b82826040516020016148759291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614908847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b6000806000836000015160000361496c576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614991576000600160009450945094505050614dc0565b60b78111614aa75760006149a66080836157ea565b9050808760000151116149e5576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614a5d57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614a94576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614dc0915050565b60bf8111614c05576000614abc60b7836157ea565b905080876000015111614afb576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b5d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614ba5576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614baf81846157b8565b895111614be8576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614bf38360016157b8565b9750955060009450614dc09350505050565b60f78111614c6a576000614c1a60c0836157ea565b905080876000015111614c59576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614dc0915050565b6000614c7760f7836157ea565b905080876000015111614cb6576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d18576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d60576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d6a81846157b8565b895111614da3576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614dae8360016157b8565b9750955060019450614dc09350505050565b9193909250565b60608167ffffffffffffffff811115614de257614de26156f2565b6040519080825280601f01601f191660200182016040528015614e0c576020820181803683370190505b5090508115614e55576000614e2184866157b8565b90506020820160005b84811015614e42578281015182820152602001614e2a565b84811115614e51576000858301525b5050505b9392505050565b6000614e726001600160801b0384166001615aa6565b90506000614e8282866001615071565b9050600086901a8380614f4c5750614ebb60027f0000000000000000000000000000000000000000000000000000000000000000615a72565b6004830154600290614f3d906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614f479190615b6e565b60ff16145b15614fa45760ff811660011480614f66575060ff81166002145b614f9f576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613679565b614fe2565b60ff811615614fe2576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613679565b50505050505050565b60008061505f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826150b1576150ac6001600160801b0386167f0000000000000000000000000000000000000000000000000000000000000000615169565b6150c3565b6150c3856001600160801b03166152a8565b9050600284815481106150d8576150d861578c565b906000526020600020906005020191505b60048201546001600160801b0382811691161461513257815460028054909163ffffffff1690811061511d5761511d61578c565b906000526020600020906005020191506150e9565b509392505050565b600080600080600061514b8661449c565b935093509350935061515f848484846147f5565b9695505050505050565b6000816151e6846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116151fc5763b34b5c226000526004601cfd5b615205836152a8565b905081615282826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161278f5761278c6152988360016157b8565b6001600160801b03831690615334565b60008119600183011681615323827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806153a8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126153d657600080fd5b50813567ffffffffffffffff8111156153ee57600080fd5b60208301915083602082850101111561540657600080fd5b9250929050565b600080600083850360a081121561542357600080fd5b608081121561543157600080fd5b50839250608084013567ffffffffffffffff81111561544f57600080fd5b61545b868287016153c4565b9497909650939450505050565b6000806040838503121561547b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106154be57634e487b7160e01b600052602160045260246000fd5b50565b602081016154ce836154a0565b91905290565b6001600160a01b03811681146154be57600080fd5b6000602082840312156154fb57600080fd5b8135614e55816154d4565b60008060006060848603121561551b57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156155585760208185018101518683018201520161553c565b8181111561556a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061278c6020830184615532565b6000602082840312156155c257600080fd5b5035919050565b80151581146154be57600080fd5b600080600080608085870312156155ed57600080fd5b843593506020850135925060408501359150606085013561560d816155c9565b939692955090935050565b60006020828403121561562a57600080fd5b81356001600160801b0381168114614e5557600080fd5b6000806000806000806080878903121561565a57600080fd5b86359550602087013561566c816155c9565b9450604087013567ffffffffffffffff8082111561568957600080fd5b6156958a838b016153c4565b909650945060608901359150808211156156ae57600080fd5b506156bb89828a016153c4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006116d36060830184615532565b634e487b7160e01b600052604160045260246000fd5b60006080828403121561571a57600080fd5b6040516080810181811067ffffffffffffffff8211171561574b57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156157cb576157cb6157a2565b500190565b600060001982036157e3576157e36157a2565b5060010190565b6000828210156157fc576157fc6157a2565b500390565b60006020828403121561581357600080fd5b8151614e55816155c9565b634e487b7160e01b600052601260045260246000fd5b6000826158435761584361581e565b500490565b6000816000190483118215151615615862576158626157a2565b500290565b60006020828403121561587957600080fd5b8151614e55816154d4565b60006020828403121561589657600080fd5b5051919050565b600067ffffffffffffffff8083168185168083038211156158c0576158c06157a2565b01949350505050565b600067ffffffffffffffff808316818516818304811182151516156158f0576158f06157a2565b02949350505050565b600067ffffffffffffffff8381169083168181101561591a5761591a6157a2565b039392505050565b6000806040838503121561593557600080fd5b505080516020909101519092909150565b60006020828403121561595857600080fd5b815163ffffffff81168114614e5557600080fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156159ad576159ad6157a2565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156159e8576159e86157a2565b60008712925087820587128484161615615a0457615a046157a2565b87850587128184161615615a1a57615a1a6157a2565b505050929093029392505050565b600082615a3757615a3761581e565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615a6d57615a6d6157a2565b500590565b600082615a8157615a8161581e565b500690565b60006001600160801b038381169083168181101561591a5761591a6157a2565b60006001600160801b038083168185168083038211156158c0576158c06157a2565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615b25606083018789615ac8565b8281036020840152615b38818688615ac8565b9150508260408301529695505050505050565b600060ff821660ff841680821015615b6557615b656157a2565b90039392505050565b600060ff831680615b8157615b8161581e565b8060ff8416069150509291505056fea164736f6c634300080f000a0000000000000000000000000000000000000000000000000000000000000001038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c0000000000000000000000000000000000000000000000000000000000000049000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000049d40000000000000000000000000f027f4a985560fb13324e943edf55ad6f1d15dc1000000000000000000000000dd1f7fd55b392dac171264cd7c23bdde78566d680000000000000000000000009f1094945b3fa96d64befa51c866f21243e0c99100000000000000000000000000000000000000000000000000000000000907c40000000000000000000000009e3dff1d78b92069bbb9645eb3ed478f3547fd7e0000000000000000000000009e3dff1d78b92069bbb9645eb3ed478f3547fd7e