Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
e4e02eb1
Unverified
Commit
e4e02eb1
authored
Feb 08, 2024
by
clabby
Committed by
GitHub
Feb 08, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add `PermissionedDisputeGame` (#9421)
* Add `PermissionedDisputeGame` * Add clarifying doc
parent
c6795982
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1107 additions
and
27 deletions
+1107
-27
faultdisputegame.go
op-bindings/bindings/faultdisputegame.go
+1
-1
faultdisputegame_more.go
op-bindings/bindings/faultdisputegame_more.go
+1
-1
Deploy.s.sol
packages/contracts-bedrock/scripts/Deploy.s.sol
+55
-17
semver-lock.json
packages/contracts-bedrock/semver-lock.json
+2
-2
PermissionedDisputeGame.json
...tracts-bedrock/snapshots/abi/PermissionedDisputeGame.json
+684
-0
PermissionedDisputeGame.json
...rock/snapshots/storageLayout/PermissionedDisputeGame.json
+72
-0
FaultDisputeGame.sol
packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol
+13
-5
PermissionedDisputeGame.sol
...contracts-bedrock/src/dispute/PermissionedDisputeGame.sol
+95
-0
DisputeErrors.sol
packages/contracts-bedrock/src/libraries/DisputeErrors.sol
+7
-0
DisputeTypes.sol
packages/contracts-bedrock/src/libraries/DisputeTypes.sol
+3
-0
DisputeGameFactory.t.sol
...s/contracts-bedrock/test/dispute/DisputeGameFactory.t.sol
+1
-1
PermissionedDisputeGame.t.sol
...tracts-bedrock/test/dispute/PermissionedDisputeGame.t.sol
+173
-0
No files found.
op-bindings/bindings/faultdisputegame.go
View file @
e4e02eb1
...
...
@@ -31,7 +31,7 @@ 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
\"
:
\"
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
\"
:
\"\"
,
\"
type
\"
:
\"
bytes32
\"
,
\"
internalType
\"
:
\"
Hash
\"
}],
\"
stateMutability
\"
:
\"
view
\"
},{
\"
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
:
"0x6101806040523480156200001257600080fd5b5060405162003a8b38038062003a8b83398101604081905262000035916200009b565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b03166101005262000140565b600080600080600080600080610100898b031215620000b957600080fd5b885163ffffffff81168114620000ce57600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200011157600080fd5b60e08a01519092506001600160a01b03811681146200012f57600080fd5b809150509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161384b620002406000396000818161049e0152611f980152600081816103d30152612bee0152600081816101e1015281816111ca01528181611dcc0152611e020152600081816102e6015281816118b60152611bbb01526000818161064001528181610db701526120f601526000818161067301528181610be601528181610caf0152818161171101528181611da2015281816125370152818161277a015281816128a8015281816129b00152612a8c0152600081816106ea01528181610c5201528181611600015261173201526000818161046301526117c8015261384b6000f3fe6080604052600436106101cd5760003560e01c80638d450a95116100f7578063d5d44d8011610095578063f8f43ff611610064578063f8f43ff614610697578063fa24f743146106b7578063fa315aa9146106db578063fdffbb281461070e57600080fd5b8063d5d44d80146105e4578063d8cc1a3c14610611578063e1f0c37614610631578063ec5e63081461066457600080fd5b8063c395e1ca116100d1578063c395e1ca14610505578063c55cd0c714610526578063c6f0308c14610539578063cf09e0d0146105c357600080fd5b80638d450a9514610454578063bbdc02db14610487578063bcef3b55146104c857600080fd5b8063609d33341161016f57806368800abf1161013e57806368800abf146103c45780638129fc1c146103f75780638980e0cc146103ff5780638b85902b1461041457600080fd5b8063609d33341461036657806360e274641461037b578063632247ea1461039b5780636361506d146103ae57600080fd5b80632810e1d6116101ab5780632810e1d61461029557806335fef567146102aa5780633a768463146102bf57806354fd4d501461031057600080fd5b80630356fe3a146101d257806319effeb414610214578063200d2ed21461025a575b600080fd5b3480156101de57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022057600080fd5b506000546102419068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161020b565b34801561026657600080fd5b5060005461028890700100000000000000000000000000000000900460ff1681565b60405161020b9190613285565b3480156102a157600080fd5b50610288610721565b6102bd6102b83660046132c6565b61091e565b005b3480156102cb57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b34801561031c57600080fd5b506103596040518060400160405280600581526020017f302e322e3
0
00000000000000000000000000000000000000000000000000000081525081565b60405161020b9190613353565b34801561037257600080fd5b5061035961092e565b34801561038757600080fd5b506102bd610396366004613388565b610940565b6102bd6103a93660046133c1565b6109f0565b3480156103ba57600080fd5b5061020160015481565b3480156103d057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd611186565b34801561040b57600080fd5b50600254610201565b34801561042057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610201565b34801561046057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b34801561049357600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b3480156104d457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610201565b34801561051157600080fd5b506102016105203660046133f6565b50600090565b6102bd6105343660046132c6565b6114ac565b34801561054557600080fd5b50610559610554366004613428565b6114b8565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161020b565b3480156105cf57600080fd5b506000546102419067ffffffffffffffff1681565b3480156105f057600080fd5b506102016105ff366004613388565b60036020526000908152604090205481565b34801561061d57600080fd5b506102bd61062c36600461348a565b61154f565b34801561063d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610241565b34801561067057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b3480156106a357600080fd5b506102bd6106b2366004613514565b611b2d565b3480156106c357600080fd5b506106cc611f96565b60405161020b93929190613540565b3480156106e757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd61071c366004613428565b611ff3565b600080600054700100000000000000000000000000000000900460ff16600281111561074f5761074f613256565b14610786576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff166107c2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106107ee576107ee61356e565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461082957600161082c565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156108dd576108dd613256565b0217905560028111156108f2576108f2613256565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61092a828260006109f0565b5050565b606061093b602080612454565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260036020526040808220805490839055905190929083908381818185875af1925050503d80600081146109ab576040519150601f19603f3d011682016040523d82523d6000602084013e6109b0565b606091505b50509050806109eb576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a1c57610a1c613256565b14610a53576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610a6857610a6861356e565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b2d90839086906124eb16565b90506000610bcd826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c0f5750610c0c7f000000000000000000000000000000000000000000000000000000000000000060026135cc565b81145b8015610c19575084155b15610c50576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610caa576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd57f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8103610ce757610ce7868885886124f3565b835160009063ffffffff90811614610d47576002856000015163ffffffff1681548110610d1657610d1661356e565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610d6b9067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610d95610d5e856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610da991906135cc565b610db391906135e4565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610e26576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610ea4576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008c8152602001908152602001600020600160028054905061113a91906135e4565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600654610100900460ff16156111c8576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161127f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b60463611156112965763c407e0256000526004601cfd5b6040805160e08101825263ffffffff8152600060208201523291810191909152346fffffffffffffffffffffffffffffffff16606082015260029060808101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff90811690915282546001808201855560009485526020808620855160059094020180549186015163ffffffff9094167fffffffffffffffff0000000000000000000000000000000000000000000000009092169190911764010000000073ffffffffffffffffffffffffffffffffffffffff94851602178155604085015181830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919094161790925560608401516002830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169185169190911790556080840151600383015560a084015160c09094015193831670010000000000000000000000000000000094909316939093029190911760049091015581547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790915561147a90436135e4565b40600155600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61092a828260016109f0565b600281815481106114c857600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561157b5761157b613256565b146115b2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106115c7576115c761356e565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506116267f000000000000000000000000000000000000000000000000000000000000000060016135cc565b6116c2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611703576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156117f2576117567f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135e4565b6001901b611775846fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff16611789919061362a565b156117c6576117bd6117ae60016fffffffffffffffffffffffffffffffff871661363e565b865463ffffffff16600061275a565b600301546117e8565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061181c565b600385015491506118196117ae6fffffffffffffffffffffffffffffffff8616600161366f565b90505b600882901b60088a8a6040516118339291906136a3565b6040518091039020901b14611874576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061187f8c61283e565b9050600061188e836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611908908f908f908f908f908a906004016136fc565b6020604051808303816000875af1158015611927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190613736565b6004850154911491506000906002906119f6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a92896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a9c919061374f565b611aa69190613770565b67ffffffffffffffff161590508115158103611aee576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611b5957611b59613256565b14611b90576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611b9f8661286d565b93509350935093506000611bb585858585612c9a565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c489190613797565b905060018903611d105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846001545b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190613736565b50611f8b565b60028903611d3c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611c74565b60038903611d685773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611c74565b60048903611ee05760006fffffffffffffffffffffffffffffffff861615611e0057611dc66fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612d59565b611df0907f00000000000000000000000000000000000000000000000000000000000000006135cc565b611dfb9060016135cc565b611e22565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190613736565b5050611f8b565b60058903611f59576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611cc7565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611fec61092e565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561201f5761201f613256565b14612056576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061206b5761206b61356e565b6000918252602082206005919091020160048101549092506120ad90700100000000000000000000000000000000900460401c67ffffffffffffffff16610d5e565b60048301549091506000906120df90700100000000000000000000000000000000900467ffffffffffffffff16610d5e565b6120e9904261374f565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661212382846137b4565b67ffffffffffffffff1611612164576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805485158015612184575060065460ff165b156121bb576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156121c857508515155b1561222d578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156121fb5781612217565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506122238188612e0e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561237357600085828154811061225e5761225e61356e565b60009182526020808320909101548083526005909152604090912054909150156122b4576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282815481106122c9576122c961356e565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612322575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612360576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061236c906137d7565b9050612242565b506123bb73ffffffffffffffffffffffffffffffffffffffff83161561239957826123b5565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612e0e565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff84160217875560008881526005602052604081206124179161321c565b8760000361222357600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b6060600061248b84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036135cc565b90508267ffffffffffffffff1667ffffffffffffffff8111156124b0576124b061380f565b6040519080825280601f01601f1916602001820160405280156124da576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006125126fffffffffffffffffffffffffffffffff8416600161366f565b905060006125228286600161275a565b9050600086901a8380612615575061255b60027f000000000000000000000000000000000000000000000000000000000000000061362a565b60048301546002906125ff906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126099190613770565b67ffffffffffffffff16145b1561266d5760ff81166001148061262f575060ff81166002145b612668576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b6126ab565b60ff8116156126ab576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b50505050505050565b600080612741837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826127a35761279e6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612ef9565b6127be565b6127be856fffffffffffffffffffffffffffffffff166130c0565b9050600284815481106127d3576127d361356e565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461283657815460028054909163ffffffff169081106128215761282161356e565b906000526020600020906005020191506127e4565b509392505050565b600080600080600061284f8661286d565b935093509350935061286384848484612c9a565b9695505050505050565b600080600080600085905060006002828154811061288d5761288d61356e565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612964906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116129a5576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612a6c906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612ae857825463ffffffff16612ab27f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8303612abc578391505b60028181548110612acf57612acf61356e565b90600052602060002090600502019350809450506129a9565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612b51612b3c856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612c36576000612b89836fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff161115612bec576000612bc3612bbb60016fffffffffffffffffffffffffffffffff861661363e565b89600161275a565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612c109050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612c8c565b6000612c58612bbb6fffffffffffffffffffffffffffffffff8516600161366f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612d00578282604051602001612ce39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612d51565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612de6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101612e7e576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002820180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054839290612eef9084906135cc565b9091555050505050565b600081612f98846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612fd9576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612fe2836130c0565b905081613081826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116130ba576130b761309e8360016135cc565b6fffffffffffffffffffffffffffffffff83169061316c565b90505b92915050565b60008119600183011681613154827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806131f9847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b508054600082559060005260206000209081019061323a919061323d565b50565b5b80821115613252576000815560010161323e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106132c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156132d957600080fd5b50508035926020909101359150565b6000815180845260005b8181101561330e576020818501810151868301820152016132f2565b81811115613320576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130b760208301846132e8565b73ffffffffffffffffffffffffffffffffffffffff8116811461323a57600080fd5b60006020828403121561339a57600080fd5b81356133a581613366565b9392505050565b803580151581146133bc57600080fd5b919050565b6000806000606084860312156133d657600080fd5b83359250602084013591506133ed604085016133ac565b90509250925092565b60006020828403121561340857600080fd5b81356fffffffffffffffffffffffffffffffff811681146133a557600080fd5b60006020828403121561343a57600080fd5b5035919050565b60008083601f84011261345357600080fd5b50813567ffffffffffffffff81111561346b57600080fd5b60208301915083602082850101111561348357600080fd5b9250929050565b600080600080600080608087890312156134a357600080fd5b863595506134b3602088016133ac565b9450604087013567ffffffffffffffff808211156134d057600080fd5b6134dc8a838b01613441565b909650945060608901359150808211156134f557600080fd5b5061350289828a01613441565b979a9699509497509295939492505050565b60008060006060848603121561352957600080fd5b505081359360208301359350604090920135919050565b63ffffffff8416815282602082015260606040820152600061356560608301846132e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156135df576135df61359d565b500190565b6000828210156135f6576135f661359d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613639576136396135fb565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156136675761366761359d565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561369a5761369a61359d565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006137106060830187896136b3565b82810360208401526137238186886136b3565b9150508260408301529695505050505050565b60006020828403121561374857600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156136675761366761359d565b600067ffffffffffffffff8084168061378b5761378b6135fb565b92169190910692915050565b6000602082840312156137a957600080fd5b81516133a581613366565b600067ffffffffffffffff80831681851680830382111561369a5761369a61359d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138085761380861359d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
,
Bin
:
"0x6101806040523480156200001257600080fd5b5060405162003a8b38038062003a8b83398101604081905262000035916200009b565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b03166101005262000140565b600080600080600080600080610100898b031215620000b957600080fd5b885163ffffffff81168114620000ce57600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200011157600080fd5b60e08a01519092506001600160a01b03811681146200012f57600080fd5b809150509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161384b620002406000396000818161049e0152611f980152600081816103d30152612bee0152600081816101e1015281816111ca01528181611dcc0152611e020152600081816102e6015281816118b60152611bbb01526000818161064001528181610db701526120f601526000818161067301528181610be601528181610caf0152818161171101528181611da2015281816125370152818161277a015281816128a8015281816129b00152612a8c0152600081816106ea01528181610c5201528181611600015261173201526000818161046301526117c8015261384b6000f3fe6080604052600436106101cd5760003560e01c80638d450a95116100f7578063d5d44d8011610095578063f8f43ff611610064578063f8f43ff614610697578063fa24f743146106b7578063fa315aa9146106db578063fdffbb281461070e57600080fd5b8063d5d44d80146105e4578063d8cc1a3c14610611578063e1f0c37614610631578063ec5e63081461066457600080fd5b8063c395e1ca116100d1578063c395e1ca14610505578063c55cd0c714610526578063c6f0308c14610539578063cf09e0d0146105c357600080fd5b80638d450a9514610454578063bbdc02db14610487578063bcef3b55146104c857600080fd5b8063609d33341161016f57806368800abf1161013e57806368800abf146103c45780638129fc1c146103f75780638980e0cc146103ff5780638b85902b1461041457600080fd5b8063609d33341461036657806360e274641461037b578063632247ea1461039b5780636361506d146103ae57600080fd5b80632810e1d6116101ab5780632810e1d61461029557806335fef567146102aa5780633a768463146102bf57806354fd4d501461031057600080fd5b80630356fe3a146101d257806319effeb414610214578063200d2ed21461025a575b600080fd5b3480156101de57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022057600080fd5b506000546102419068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161020b565b34801561026657600080fd5b5060005461028890700100000000000000000000000000000000900460ff1681565b60405161020b9190613285565b3480156102a157600080fd5b50610288610721565b6102bd6102b83660046132c6565b61091e565b005b3480156102cb57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b34801561031c57600080fd5b506103596040518060400160405280600581526020017f302e322e3
1
00000000000000000000000000000000000000000000000000000081525081565b60405161020b9190613353565b34801561037257600080fd5b5061035961092e565b34801561038757600080fd5b506102bd610396366004613388565b610940565b6102bd6103a93660046133c1565b6109f0565b3480156103ba57600080fd5b5061020160015481565b3480156103d057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd611186565b34801561040b57600080fd5b50600254610201565b34801561042057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610201565b34801561046057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b34801561049357600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b3480156104d457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610201565b34801561051157600080fd5b506102016105203660046133f6565b50600090565b6102bd6105343660046132c6565b6114ac565b34801561054557600080fd5b50610559610554366004613428565b6114b8565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161020b565b3480156105cf57600080fd5b506000546102419067ffffffffffffffff1681565b3480156105f057600080fd5b506102016105ff366004613388565b60036020526000908152604090205481565b34801561061d57600080fd5b506102bd61062c36600461348a565b61154f565b34801561063d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610241565b34801561067057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b3480156106a357600080fd5b506102bd6106b2366004613514565b611b2d565b3480156106c357600080fd5b506106cc611f96565b60405161020b93929190613540565b3480156106e757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd61071c366004613428565b611ff3565b600080600054700100000000000000000000000000000000900460ff16600281111561074f5761074f613256565b14610786576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff166107c2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106107ee576107ee61356e565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461082957600161082c565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156108dd576108dd613256565b0217905560028111156108f2576108f2613256565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61092a828260006109f0565b5050565b606061093b602080612454565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260036020526040808220805490839055905190929083908381818185875af1925050503d80600081146109ab576040519150601f19603f3d011682016040523d82523d6000602084013e6109b0565b606091505b50509050806109eb576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a1c57610a1c613256565b14610a53576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610a6857610a6861356e565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b2d90839086906124eb16565b90506000610bcd826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c0f5750610c0c7f000000000000000000000000000000000000000000000000000000000000000060026135cc565b81145b8015610c19575084155b15610c50576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610caa576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd57f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8103610ce757610ce7868885886124f3565b835160009063ffffffff90811614610d47576002856000015163ffffffff1681548110610d1657610d1661356e565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610d6b9067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610d95610d5e856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610da991906135cc565b610db391906135e4565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610e26576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610ea4576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008c8152602001908152602001600020600160028054905061113a91906135e4565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600654610100900460ff16156111c8576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161127f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b60463611156112965763c407e0256000526004601cfd5b6040805160e08101825263ffffffff8152600060208201523291810191909152346fffffffffffffffffffffffffffffffff16606082015260029060808101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff90811690915282546001808201855560009485526020808620855160059094020180549186015163ffffffff9094167fffffffffffffffff0000000000000000000000000000000000000000000000009092169190911764010000000073ffffffffffffffffffffffffffffffffffffffff94851602178155604085015181830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919094161790925560608401516002830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169185169190911790556080840151600383015560a084015160c09094015193831670010000000000000000000000000000000094909316939093029190911760049091015581547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790915561147a90436135e4565b40600155600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61092a828260016109f0565b600281815481106114c857600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561157b5761157b613256565b146115b2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106115c7576115c761356e565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506116267f000000000000000000000000000000000000000000000000000000000000000060016135cc565b6116c2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611703576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156117f2576117567f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135e4565b6001901b611775846fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff16611789919061362a565b156117c6576117bd6117ae60016fffffffffffffffffffffffffffffffff871661363e565b865463ffffffff16600061275a565b600301546117e8565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061181c565b600385015491506118196117ae6fffffffffffffffffffffffffffffffff8616600161366f565b90505b600882901b60088a8a6040516118339291906136a3565b6040518091039020901b14611874576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061187f8c61283e565b9050600061188e836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611908908f908f908f908f908a906004016136fc565b6020604051808303816000875af1158015611927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190613736565b6004850154911491506000906002906119f6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a92896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a9c919061374f565b611aa69190613770565b67ffffffffffffffff161590508115158103611aee576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611b5957611b59613256565b14611b90576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611b9f8661286d565b93509350935093506000611bb585858585612c9a565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c489190613797565b905060018903611d105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846001545b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190613736565b50611f8b565b60028903611d3c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611c74565b60038903611d685773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611c74565b60048903611ee05760006fffffffffffffffffffffffffffffffff861615611e0057611dc66fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612d59565b611df0907f00000000000000000000000000000000000000000000000000000000000000006135cc565b611dfb9060016135cc565b611e22565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190613736565b5050611f8b565b60058903611f59576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611cc7565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611fec61092e565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561201f5761201f613256565b14612056576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061206b5761206b61356e565b6000918252602082206005919091020160048101549092506120ad90700100000000000000000000000000000000900460401c67ffffffffffffffff16610d5e565b60048301549091506000906120df90700100000000000000000000000000000000900467ffffffffffffffff16610d5e565b6120e9904261374f565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661212382846137b4565b67ffffffffffffffff1611612164576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805485158015612184575060065460ff165b156121bb576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156121c857508515155b1561222d578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156121fb5781612217565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506122238188612e0e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561237357600085828154811061225e5761225e61356e565b60009182526020808320909101548083526005909152604090912054909150156122b4576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282815481106122c9576122c961356e565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612322575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612360576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061236c906137d7565b9050612242565b506123bb73ffffffffffffffffffffffffffffffffffffffff83161561239957826123b5565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612e0e565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff84160217875560008881526005602052604081206124179161321c565b8760000361222357600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b6060600061248b84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036135cc565b90508267ffffffffffffffff1667ffffffffffffffff8111156124b0576124b061380f565b6040519080825280601f01601f1916602001820160405280156124da576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006125126fffffffffffffffffffffffffffffffff8416600161366f565b905060006125228286600161275a565b9050600086901a8380612615575061255b60027f000000000000000000000000000000000000000000000000000000000000000061362a565b60048301546002906125ff906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126099190613770565b67ffffffffffffffff16145b1561266d5760ff81166001148061262f575060ff81166002145b612668576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b6126ab565b60ff8116156126ab576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b50505050505050565b600080612741837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826127a35761279e6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612ef9565b6127be565b6127be856fffffffffffffffffffffffffffffffff166130c0565b9050600284815481106127d3576127d361356e565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461283657815460028054909163ffffffff169081106128215761282161356e565b906000526020600020906005020191506127e4565b509392505050565b600080600080600061284f8661286d565b935093509350935061286384848484612c9a565b9695505050505050565b600080600080600085905060006002828154811061288d5761288d61356e565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612964906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116129a5576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612a6c906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612ae857825463ffffffff16612ab27f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8303612abc578391505b60028181548110612acf57612acf61356e565b90600052602060002090600502019350809450506129a9565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612b51612b3c856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612c36576000612b89836fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff161115612bec576000612bc3612bbb60016fffffffffffffffffffffffffffffffff861661363e565b89600161275a565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612c109050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612c8c565b6000612c58612bbb6fffffffffffffffffffffffffffffffff8516600161366f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612d00578282604051602001612ce39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612d51565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612de6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101612e7e576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002820180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054839290612eef9084906135cc565b9091555050505050565b600081612f98846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612fd9576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612fe2836130c0565b905081613081826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116130ba576130b761309e8360016135cc565b6fffffffffffffffffffffffffffffffff83169061316c565b90505b92915050565b60008119600183011681613154827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806131f9847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b508054600082559060005260206000209081019061323a919061323d565b50565b5b80821115613252576000815560010161323e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106132c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156132d957600080fd5b50508035926020909101359150565b6000815180845260005b8181101561330e576020818501810151868301820152016132f2565b81811115613320576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130b760208301846132e8565b73ffffffffffffffffffffffffffffffffffffffff8116811461323a57600080fd5b60006020828403121561339a57600080fd5b81356133a581613366565b9392505050565b803580151581146133bc57600080fd5b919050565b6000806000606084860312156133d657600080fd5b83359250602084013591506133ed604085016133ac565b90509250925092565b60006020828403121561340857600080fd5b81356fffffffffffffffffffffffffffffffff811681146133a557600080fd5b60006020828403121561343a57600080fd5b5035919050565b60008083601f84011261345357600080fd5b50813567ffffffffffffffff81111561346b57600080fd5b60208301915083602082850101111561348357600080fd5b9250929050565b600080600080600080608087890312156134a357600080fd5b863595506134b3602088016133ac565b9450604087013567ffffffffffffffff808211156134d057600080fd5b6134dc8a838b01613441565b909650945060608901359150808211156134f557600080fd5b5061350289828a01613441565b979a9699509497509295939492505050565b60008060006060848603121561352957600080fd5b505081359360208301359350604090920135919050565b63ffffffff8416815282602082015260606040820152600061356560608301846132e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156135df576135df61359d565b500190565b6000828210156135f6576135f661359d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613639576136396135fb565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156136675761366761359d565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561369a5761369a61359d565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006137106060830187896136b3565b82810360208401526137238186886136b3565b9150508260408301529695505050505050565b60006020828403121561374857600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156136675761366761359d565b600067ffffffffffffffff8084168061378b5761378b6135fb565b92169190910692915050565b6000602082840312156137a957600080fd5b81516133a581613366565b600067ffffffffffffffff80831681851680830382111561369a5761369a61359d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138085761380861359d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
,
}
// FaultDisputeGameABI is the input ABI used to generate the binding from.
...
...
op-bindings/bindings/faultdisputegame_more.go
View file @
e4e02eb1
...
...
@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr
var
FaultDisputeGameStorageLayout
=
new
(
solc
.
StorageLayout
)
var
FaultDisputeGameDeployedBin
=
"0x6080604052600436106101cd5760003560e01c80638d450a95116100f7578063d5d44d8011610095578063f8f43ff611610064578063f8f43ff614610697578063fa24f743146106b7578063fa315aa9146106db578063fdffbb281461070e57600080fd5b8063d5d44d80146105e4578063d8cc1a3c14610611578063e1f0c37614610631578063ec5e63081461066457600080fd5b8063c395e1ca116100d1578063c395e1ca14610505578063c55cd0c714610526578063c6f0308c14610539578063cf09e0d0146105c357600080fd5b80638d450a9514610454578063bbdc02db14610487578063bcef3b55146104c857600080fd5b8063609d33341161016f57806368800abf1161013e57806368800abf146103c45780638129fc1c146103f75780638980e0cc146103ff5780638b85902b1461041457600080fd5b8063609d33341461036657806360e274641461037b578063632247ea1461039b5780636361506d146103ae57600080fd5b80632810e1d6116101ab5780632810e1d61461029557806335fef567146102aa5780633a768463146102bf57806354fd4d501461031057600080fd5b80630356fe3a146101d257806319effeb414610214578063200d2ed21461025a575b600080fd5b3480156101de57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022057600080fd5b506000546102419068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161020b565b34801561026657600080fd5b5060005461028890700100000000000000000000000000000000900460ff1681565b60405161020b9190613285565b3480156102a157600080fd5b50610288610721565b6102bd6102b83660046132c6565b61091e565b005b3480156102cb57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b34801561031c57600080fd5b506103596040518060400160405280600581526020017f302e322e3
0
00000000000000000000000000000000000000000000000000000081525081565b60405161020b9190613353565b34801561037257600080fd5b5061035961092e565b34801561038757600080fd5b506102bd610396366004613388565b610940565b6102bd6103a93660046133c1565b6109f0565b3480156103ba57600080fd5b5061020160015481565b3480156103d057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd611186565b34801561040b57600080fd5b50600254610201565b34801561042057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610201565b34801561046057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b34801561049357600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b3480156104d457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610201565b34801561051157600080fd5b506102016105203660046133f6565b50600090565b6102bd6105343660046132c6565b6114ac565b34801561054557600080fd5b50610559610554366004613428565b6114b8565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161020b565b3480156105cf57600080fd5b506000546102419067ffffffffffffffff1681565b3480156105f057600080fd5b506102016105ff366004613388565b60036020526000908152604090205481565b34801561061d57600080fd5b506102bd61062c36600461348a565b61154f565b34801561063d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610241565b34801561067057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b3480156106a357600080fd5b506102bd6106b2366004613514565b611b2d565b3480156106c357600080fd5b506106cc611f96565b60405161020b93929190613540565b3480156106e757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd61071c366004613428565b611ff3565b600080600054700100000000000000000000000000000000900460ff16600281111561074f5761074f613256565b14610786576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff166107c2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106107ee576107ee61356e565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461082957600161082c565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156108dd576108dd613256565b0217905560028111156108f2576108f2613256565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61092a828260006109f0565b5050565b606061093b602080612454565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260036020526040808220805490839055905190929083908381818185875af1925050503d80600081146109ab576040519150601f19603f3d011682016040523d82523d6000602084013e6109b0565b606091505b50509050806109eb576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a1c57610a1c613256565b14610a53576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610a6857610a6861356e565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b2d90839086906124eb16565b90506000610bcd826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c0f5750610c0c7f000000000000000000000000000000000000000000000000000000000000000060026135cc565b81145b8015610c19575084155b15610c50576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610caa576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd57f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8103610ce757610ce7868885886124f3565b835160009063ffffffff90811614610d47576002856000015163ffffffff1681548110610d1657610d1661356e565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610d6b9067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610d95610d5e856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610da991906135cc565b610db391906135e4565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610e26576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610ea4576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008c8152602001908152602001600020600160028054905061113a91906135e4565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600654610100900460ff16156111c8576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161127f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b60463611156112965763c407e0256000526004601cfd5b6040805160e08101825263ffffffff8152600060208201523291810191909152346fffffffffffffffffffffffffffffffff16606082015260029060808101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff90811690915282546001808201855560009485526020808620855160059094020180549186015163ffffffff9094167fffffffffffffffff0000000000000000000000000000000000000000000000009092169190911764010000000073ffffffffffffffffffffffffffffffffffffffff94851602178155604085015181830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919094161790925560608401516002830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169185169190911790556080840151600383015560a084015160c09094015193831670010000000000000000000000000000000094909316939093029190911760049091015581547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790915561147a90436135e4565b40600155600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61092a828260016109f0565b600281815481106114c857600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561157b5761157b613256565b146115b2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106115c7576115c761356e565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506116267f000000000000000000000000000000000000000000000000000000000000000060016135cc565b6116c2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611703576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156117f2576117567f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135e4565b6001901b611775846fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff16611789919061362a565b156117c6576117bd6117ae60016fffffffffffffffffffffffffffffffff871661363e565b865463ffffffff16600061275a565b600301546117e8565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061181c565b600385015491506118196117ae6fffffffffffffffffffffffffffffffff8616600161366f565b90505b600882901b60088a8a6040516118339291906136a3565b6040518091039020901b14611874576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061187f8c61283e565b9050600061188e836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611908908f908f908f908f908a906004016136fc565b6020604051808303816000875af1158015611927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190613736565b6004850154911491506000906002906119f6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a92896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a9c919061374f565b611aa69190613770565b67ffffffffffffffff161590508115158103611aee576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611b5957611b59613256565b14611b90576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611b9f8661286d565b93509350935093506000611bb585858585612c9a565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c489190613797565b905060018903611d105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846001545b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190613736565b50611f8b565b60028903611d3c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611c74565b60038903611d685773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611c74565b60048903611ee05760006fffffffffffffffffffffffffffffffff861615611e0057611dc66fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612d59565b611df0907f00000000000000000000000000000000000000000000000000000000000000006135cc565b611dfb9060016135cc565b611e22565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190613736565b5050611f8b565b60058903611f59576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611cc7565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611fec61092e565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561201f5761201f613256565b14612056576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061206b5761206b61356e565b6000918252602082206005919091020160048101549092506120ad90700100000000000000000000000000000000900460401c67ffffffffffffffff16610d5e565b60048301549091506000906120df90700100000000000000000000000000000000900467ffffffffffffffff16610d5e565b6120e9904261374f565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661212382846137b4565b67ffffffffffffffff1611612164576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805485158015612184575060065460ff165b156121bb576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156121c857508515155b1561222d578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156121fb5781612217565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506122238188612e0e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561237357600085828154811061225e5761225e61356e565b60009182526020808320909101548083526005909152604090912054909150156122b4576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282815481106122c9576122c961356e565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612322575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612360576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061236c906137d7565b9050612242565b506123bb73ffffffffffffffffffffffffffffffffffffffff83161561239957826123b5565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612e0e565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff84160217875560008881526005602052604081206124179161321c565b8760000361222357600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b6060600061248b84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036135cc565b90508267ffffffffffffffff1667ffffffffffffffff8111156124b0576124b061380f565b6040519080825280601f01601f1916602001820160405280156124da576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006125126fffffffffffffffffffffffffffffffff8416600161366f565b905060006125228286600161275a565b9050600086901a8380612615575061255b60027f000000000000000000000000000000000000000000000000000000000000000061362a565b60048301546002906125ff906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126099190613770565b67ffffffffffffffff16145b1561266d5760ff81166001148061262f575060ff81166002145b612668576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b6126ab565b60ff8116156126ab576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b50505050505050565b600080612741837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826127a35761279e6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612ef9565b6127be565b6127be856fffffffffffffffffffffffffffffffff166130c0565b9050600284815481106127d3576127d361356e565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461283657815460028054909163ffffffff169081106128215761282161356e565b906000526020600020906005020191506127e4565b509392505050565b600080600080600061284f8661286d565b935093509350935061286384848484612c9a565b9695505050505050565b600080600080600085905060006002828154811061288d5761288d61356e565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612964906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116129a5576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612a6c906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612ae857825463ffffffff16612ab27f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8303612abc578391505b60028181548110612acf57612acf61356e565b90600052602060002090600502019350809450506129a9565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612b51612b3c856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612c36576000612b89836fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff161115612bec576000612bc3612bbb60016fffffffffffffffffffffffffffffffff861661363e565b89600161275a565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612c109050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612c8c565b6000612c58612bbb6fffffffffffffffffffffffffffffffff8516600161366f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612d00578282604051602001612ce39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612d51565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612de6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101612e7e576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002820180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054839290612eef9084906135cc565b9091555050505050565b600081612f98846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612fd9576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612fe2836130c0565b905081613081826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116130ba576130b761309e8360016135cc565b6fffffffffffffffffffffffffffffffff83169061316c565b90505b92915050565b60008119600183011681613154827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806131f9847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b508054600082559060005260206000209081019061323a919061323d565b50565b5b80821115613252576000815560010161323e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106132c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156132d957600080fd5b50508035926020909101359150565b6000815180845260005b8181101561330e576020818501810151868301820152016132f2565b81811115613320576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130b760208301846132e8565b73ffffffffffffffffffffffffffffffffffffffff8116811461323a57600080fd5b60006020828403121561339a57600080fd5b81356133a581613366565b9392505050565b803580151581146133bc57600080fd5b919050565b6000806000606084860312156133d657600080fd5b83359250602084013591506133ed604085016133ac565b90509250925092565b60006020828403121561340857600080fd5b81356fffffffffffffffffffffffffffffffff811681146133a557600080fd5b60006020828403121561343a57600080fd5b5035919050565b60008083601f84011261345357600080fd5b50813567ffffffffffffffff81111561346b57600080fd5b60208301915083602082850101111561348357600080fd5b9250929050565b600080600080600080608087890312156134a357600080fd5b863595506134b3602088016133ac565b9450604087013567ffffffffffffffff808211156134d057600080fd5b6134dc8a838b01613441565b909650945060608901359150808211156134f557600080fd5b5061350289828a01613441565b979a9699509497509295939492505050565b60008060006060848603121561352957600080fd5b505081359360208301359350604090920135919050565b63ffffffff8416815282602082015260606040820152600061356560608301846132e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156135df576135df61359d565b500190565b6000828210156135f6576135f661359d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613639576136396135fb565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156136675761366761359d565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561369a5761369a61359d565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006137106060830187896136b3565b82810360208401526137238186886136b3565b9150508260408301529695505050505050565b60006020828403121561374857600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156136675761366761359d565b600067ffffffffffffffff8084168061378b5761378b6135fb565b92169190910692915050565b6000602082840312156137a957600080fd5b81516133a581613366565b600067ffffffffffffffff80831681851680830382111561369a5761369a61359d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138085761380861359d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
var
FaultDisputeGameDeployedBin
=
"0x6080604052600436106101cd5760003560e01c80638d450a95116100f7578063d5d44d8011610095578063f8f43ff611610064578063f8f43ff614610697578063fa24f743146106b7578063fa315aa9146106db578063fdffbb281461070e57600080fd5b8063d5d44d80146105e4578063d8cc1a3c14610611578063e1f0c37614610631578063ec5e63081461066457600080fd5b8063c395e1ca116100d1578063c395e1ca14610505578063c55cd0c714610526578063c6f0308c14610539578063cf09e0d0146105c357600080fd5b80638d450a9514610454578063bbdc02db14610487578063bcef3b55146104c857600080fd5b8063609d33341161016f57806368800abf1161013e57806368800abf146103c45780638129fc1c146103f75780638980e0cc146103ff5780638b85902b1461041457600080fd5b8063609d33341461036657806360e274641461037b578063632247ea1461039b5780636361506d146103ae57600080fd5b80632810e1d6116101ab5780632810e1d61461029557806335fef567146102aa5780633a768463146102bf57806354fd4d501461031057600080fd5b80630356fe3a146101d257806319effeb414610214578063200d2ed21461025a575b600080fd5b3480156101de57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561022057600080fd5b506000546102419068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161020b565b34801561026657600080fd5b5060005461028890700100000000000000000000000000000000900460ff1681565b60405161020b9190613285565b3480156102a157600080fd5b50610288610721565b6102bd6102b83660046132c6565b61091e565b005b3480156102cb57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b34801561031c57600080fd5b506103596040518060400160405280600581526020017f302e322e3
1
00000000000000000000000000000000000000000000000000000081525081565b60405161020b9190613353565b34801561037257600080fd5b5061035961092e565b34801561038757600080fd5b506102bd610396366004613388565b610940565b6102bd6103a93660046133c1565b6109f0565b3480156103ba57600080fd5b5061020160015481565b3480156103d057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd611186565b34801561040b57600080fd5b50600254610201565b34801561042057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610201565b34801561046057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b34801561049357600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020b565b3480156104d457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610201565b34801561051157600080fd5b506102016105203660046133f6565b50600090565b6102bd6105343660046132c6565b6114ac565b34801561054557600080fd5b50610559610554366004613428565b6114b8565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161020b565b3480156105cf57600080fd5b506000546102419067ffffffffffffffff1681565b3480156105f057600080fd5b506102016105ff366004613388565b60036020526000908152604090205481565b34801561061d57600080fd5b506102bd61062c36600461348a565b61154f565b34801561063d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610241565b34801561067057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b3480156106a357600080fd5b506102bd6106b2366004613514565b611b2d565b3480156106c357600080fd5b506106cc611f96565b60405161020b93929190613540565b3480156106e757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610201565b6102bd61071c366004613428565b611ff3565b600080600054700100000000000000000000000000000000900460ff16600281111561074f5761074f613256565b14610786576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff166107c2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106107ee576107ee61356e565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461082957600161082c565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156108dd576108dd613256565b0217905560028111156108f2576108f2613256565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b61092a828260006109f0565b5050565b606061093b602080612454565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260036020526040808220805490839055905190929083908381818185875af1925050503d80600081146109ab576040519150601f19603f3d011682016040523d82523d6000602084013e6109b0565b606091505b50509050806109eb576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610a1c57610a1c613256565b14610a53576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610a6857610a6861356e565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610b2d90839086906124eb16565b90506000610bcd826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610c0f5750610c0c7f000000000000000000000000000000000000000000000000000000000000000060026135cc565b81145b8015610c19575084155b15610c50576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610caa576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd57f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8103610ce757610ce7868885886124f3565b835160009063ffffffff90811614610d47576002856000015163ffffffff1681548110610d1657610d1661356e565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610d6b9067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610d95610d5e856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610da991906135cc565b610db391906135e4565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115610e26576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610ea4576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008c8152602001908152602001600020600160028054905061113a91906135e4565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b600654610100900460ff16156111c8576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161127f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b60463611156112965763c407e0256000526004601cfd5b6040805160e08101825263ffffffff8152600060208201523291810191909152346fffffffffffffffffffffffffffffffff16606082015260029060808101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff90811690915282546001808201855560009485526020808620855160059094020180549186015163ffffffff9094167fffffffffffffffff0000000000000000000000000000000000000000000000009092169190911764010000000073ffffffffffffffffffffffffffffffffffffffff94851602178155604085015181830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919094161790925560608401516002830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169185169190911790556080840151600383015560a084015160c09094015193831670010000000000000000000000000000000094909316939093029190911760049091015581547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790915561147a90436135e4565b40600155600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61092a828260016109f0565b600281815481106114c857600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561157b5761157b613256565b146115b2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106115c7576115c761356e565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506116267f000000000000000000000000000000000000000000000000000000000000000060016135cc565b6116c2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611703576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156117f2576117567f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135e4565b6001901b611775846fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff16611789919061362a565b156117c6576117bd6117ae60016fffffffffffffffffffffffffffffffff871661363e565b865463ffffffff16600061275a565b600301546117e8565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061181c565b600385015491506118196117ae6fffffffffffffffffffffffffffffffff8616600161366f565b90505b600882901b60088a8a6040516118339291906136a3565b6040518091039020901b14611874576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061187f8c61283e565b9050600061188e836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611908908f908f908f908f908a906004016136fc565b6020604051808303816000875af1158015611927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190613736565b6004850154911491506000906002906119f6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a92896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611a9c919061374f565b611aa69190613770565b67ffffffffffffffff161590508115158103611aee576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611b5957611b59613256565b14611b90576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611b9f8661286d565b93509350935093506000611bb585858585612c9a565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c489190613797565b905060018903611d105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846001545b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190613736565b50611f8b565b60028903611d3c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611c74565b60038903611d685773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611c74565b60048903611ee05760006fffffffffffffffffffffffffffffffff861615611e0057611dc66fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612d59565b611df0907f00000000000000000000000000000000000000000000000000000000000000006135cc565b611dfb9060016135cc565b611e22565b7f00000000000000000000000000000000000000000000000000000000000000005b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190613736565b5050611f8b565b60058903611f59576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611cc7565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611fec61092e565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561201f5761201f613256565b14612056576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061206b5761206b61356e565b6000918252602082206005919091020160048101549092506120ad90700100000000000000000000000000000000900460401c67ffffffffffffffff16610d5e565b60048301549091506000906120df90700100000000000000000000000000000000900467ffffffffffffffff16610d5e565b6120e9904261374f565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661212382846137b4565b67ffffffffffffffff1611612164576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805485158015612184575060065460ff165b156121bb576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156121c857508515155b1561222d578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156121fb5781612217565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506122238188612e0e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561237357600085828154811061225e5761225e61356e565b60009182526020808320909101548083526005909152604090912054909150156122b4576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282815481106122c9576122c961356e565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612322575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612360576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061236c906137d7565b9050612242565b506123bb73ffffffffffffffffffffffffffffffffffffffff83161561239957826123b5565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88612e0e565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff84160217875560008881526005602052604081206124179161321c565b8760000361222357600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b6060600061248b84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036135cc565b90508267ffffffffffffffff1667ffffffffffffffff8111156124b0576124b061380f565b6040519080825280601f01601f1916602001820160405280156124da576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006125126fffffffffffffffffffffffffffffffff8416600161366f565b905060006125228286600161275a565b9050600086901a8380612615575061255b60027f000000000000000000000000000000000000000000000000000000000000000061362a565b60048301546002906125ff906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126099190613770565b67ffffffffffffffff16145b1561266d5760ff81166001148061262f575060ff81166002145b612668576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b6126ab565b60ff8116156126ab576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611276565b50505050505050565b600080612741837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826127a35761279e6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612ef9565b6127be565b6127be856fffffffffffffffffffffffffffffffff166130c0565b9050600284815481106127d3576127d361356e565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461283657815460028054909163ffffffff169081106128215761282161356e565b906000526020600020906005020191506127e4565b509392505050565b600080600080600061284f8661286d565b935093509350935061286384848484612c9a565b9695505050505050565b600080600080600085905060006002828154811061288d5761288d61356e565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612964906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116129a5576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612a6c906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612ae857825463ffffffff16612ab27f000000000000000000000000000000000000000000000000000000000000000060016135cc565b8303612abc578391505b60028181548110612acf57612acf61356e565b90600052602060002090600502019350809450506129a9565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612b51612b3c856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015612c36576000612b89836fffffffffffffffffffffffffffffffff166126b4565b67ffffffffffffffff161115612bec576000612bc3612bbb60016fffffffffffffffffffffffffffffffff861661363e565b89600161275a565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50612c109050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750612c8c565b6000612c58612bbb6fffffffffffffffffffffffffffffffff8516600161366f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103612d00578282604051602001612ce39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050612d51565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612de6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101612e7e576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002820180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054839290612eef9084906135cc565b9091555050505050565b600081612f98846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612fd9576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612fe2836130c0565b905081613081826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116130ba576130b761309e8360016135cc565b6fffffffffffffffffffffffffffffffff83169061316c565b90505b92915050565b60008119600183011681613154827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806131f9847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b508054600082559060005260206000209081019061323a919061323d565b50565b5b80821115613252576000815560010161323e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106132c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156132d957600080fd5b50508035926020909101359150565b6000815180845260005b8181101561330e576020818501810151868301820152016132f2565b81811115613320576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130b760208301846132e8565b73ffffffffffffffffffffffffffffffffffffffff8116811461323a57600080fd5b60006020828403121561339a57600080fd5b81356133a581613366565b9392505050565b803580151581146133bc57600080fd5b919050565b6000806000606084860312156133d657600080fd5b83359250602084013591506133ed604085016133ac565b90509250925092565b60006020828403121561340857600080fd5b81356fffffffffffffffffffffffffffffffff811681146133a557600080fd5b60006020828403121561343a57600080fd5b5035919050565b60008083601f84011261345357600080fd5b50813567ffffffffffffffff81111561346b57600080fd5b60208301915083602082850101111561348357600080fd5b9250929050565b600080600080600080608087890312156134a357600080fd5b863595506134b3602088016133ac565b9450604087013567ffffffffffffffff808211156134d057600080fd5b6134dc8a838b01613441565b909650945060608901359150808211156134f557600080fd5b5061350289828a01613441565b979a9699509497509295939492505050565b60008060006060848603121561352957600080fd5b505081359360208301359350604090920135919050565b63ffffffff8416815282602082015260606040820152600061356560608301846132e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156135df576135df61359d565b500190565b6000828210156135f6576135f661359d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613639576136396135fb565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156136675761366761359d565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561369a5761369a61359d565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006137106060830187896136b3565b82810360208401526137238186886136b3565b9150508260408301529695505050505050565b60006020828403121561374857600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156136675761366761359d565b600067ffffffffffffffff8084168061378b5761378b6135fb565b92169190910692915050565b6000602082840312156137a957600080fd5b81516133a581613366565b600067ffffffffffffffff80831681851680830382111561369a5761369a61359d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138085761380861359d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
func
init
()
{
...
...
packages/contracts-bedrock/scripts/Deploy.s.sol
View file @
e4e02eb1
...
...
@@ -32,6 +32,7 @@ import { ResourceMetering } from "src/L1/ResourceMetering.sol";
import { Constants } from "src/libraries/Constants.sol";
import { DisputeGameFactory } from "src/dispute/DisputeGameFactory.sol";
import { FaultDisputeGame } from "src/dispute/FaultDisputeGame.sol";
import { PermissionedDisputeGame } from "src/dispute/PermissionedDisputeGame.sol";
import { PreimageOracle } from "src/cannon/PreimageOracle.sol";
import { MIPS } from "src/cannon/MIPS.sol";
import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol";
...
...
@@ -328,6 +329,7 @@ contract Deploy is Deployer {
setAlphabetFaultGameImplementation({ _allowUpgrade: false });
setCannonFaultGameImplementation({ _allowUpgrade: false });
setPermissionedCannonFaultGameImplementation({ _allowUpgrade: false });
transferDisputeGameFactoryOwnership();
}
...
...
@@ -1123,7 +1125,7 @@ contract Deploy is Deployer {
}
}
/// @notice Sets the implementation for the `
FAULT
` game type in the `DisputeGameFactory`
/// @notice Sets the implementation for the `
CANNON
` game type in the `DisputeGameFactory`
function setCannonFaultGameImplementation(bool _allowUpgrade) public broadcast {
console.log("Setting Cannon FaultDisputeGame implementation");
DisputeGameFactory factory = DisputeGameFactory(mustGetAddress("DisputeGameFactoryProxy"));
...
...
@@ -1139,6 +1141,22 @@ contract Deploy is Deployer {
});
}
/// @notice Sets the implementation for the `PERMISSIONED_CANNON` game type in the `DisputeGameFactory`
function setPermissionedCannonFaultGameImplementation(bool _allowUpgrade) public broadcast {
console.log("Setting Cannon PermissionedDisputeGame implementation");
DisputeGameFactory factory = DisputeGameFactory(mustGetAddress("DisputeGameFactoryProxy"));
// Set the Cannon FaultDisputeGame implementation in the factory.
_setFaultGameImplementation({
_factory: factory,
_gameType: GameTypes.PERMISSIONED_CANNON,
_absolutePrestate: loadMipsAbsolutePrestate(),
_faultVm: IBigStepper(mustGetAddress("Mips")),
_maxGameDepth: cfg.faultGameMaxDepth(),
_allowUpgrade: _allowUpgrade
});
}
/// @notice Sets the implementation for the `ALPHABET` game type in the `DisputeGameFactory`
function setAlphabetFaultGameImplementation(bool _allowUpgrade) public onlyDevnet broadcast {
console.log("Setting Alphabet FaultDisputeGame implementation");
...
...
@@ -1175,25 +1193,45 @@ contract Deploy is Deployer {
return;
}
_factory.setImplementation(
_gameType,
new FaultDisputeGame({
_gameType: _gameType,
_absolutePrestate: _absolutePrestate,
_genesisBlockNumber: cfg.faultGameGenesisBlock(),
_genesisOutputRoot: Hash.wrap(cfg.faultGameGenesisOutputRoot()),
_maxGameDepth: _maxGameDepth,
_splitDepth: cfg.faultGameSplitDepth(),
_gameDuration: Duration.wrap(uint64(cfg.faultGameMaxDuration())),
_vm: _faultVm
})
);
uint32 rawGameType = GameType.unwrap(_gameType);
if (rawGameType != GameTypes.PERMISSIONED_CANNON.raw()) {
_factory.setImplementation(
_gameType,
new FaultDisputeGame({
_gameType: _gameType,
_absolutePrestate: _absolutePrestate,
_genesisBlockNumber: cfg.faultGameGenesisBlock(),
_genesisOutputRoot: Hash.wrap(cfg.faultGameGenesisOutputRoot()),
_maxGameDepth: _maxGameDepth,
_splitDepth: cfg.faultGameSplitDepth(),
_gameDuration: Duration.wrap(uint64(cfg.faultGameMaxDuration())),
_vm: _faultVm
})
);
} else {
_factory.setImplementation(
_gameType,
new PermissionedDisputeGame({
_gameType: _gameType,
_absolutePrestate: _absolutePrestate,
_genesisBlockNumber: cfg.faultGameGenesisBlock(),
_genesisOutputRoot: Hash.wrap(cfg.faultGameGenesisOutputRoot()),
_maxGameDepth: _maxGameDepth,
_splitDepth: cfg.faultGameSplitDepth(),
_gameDuration: Duration.wrap(uint64(cfg.faultGameMaxDuration())),
_vm: _faultVm,
_proposer: cfg.l2OutputOracleProposer(),
_challenger: cfg.l2OutputOracleChallenger()
})
);
}
string memory gameTypeString;
if (rawGameType == GameType
.unwrap(GameTypes.CANNON
)) {
if (rawGameType == GameType
s.CANNON.raw(
)) {
gameTypeString = "Cannon";
} else if (rawGameType == GameType.unwrap(GameTypes.ALPHABET)) {
} else if (rawGameType == GameTypes.PERMISSIONED_CANNON.raw()) {
gameTypeString = "PermissionedCannon";
} else if (rawGameType == GameTypes.ALPHABET.raw()) {
gameTypeString = "Alphabet";
} else {
gameTypeString = "Unknown";
...
...
packages/contracts-bedrock/semver-lock.json
View file @
e4e02eb1
...
...
@@ -96,8 +96,8 @@
"sourceCodeHash"
:
"0xe1891e7e6a1928b9a2ddc47d1f010650f1125a0617b8bf32190176a3bb674b4f"
},
"src/dispute/FaultDisputeGame.sol"
:
{
"initCodeHash"
:
"0x
04fc1926f2ccd02a2c065e4dd0e562be7c8c498d76d6d860cc394fd74fffca06
"
,
"sourceCodeHash"
:
"0x
1e539ba88487b2ec1359577dbd82270fddbabc3b8982dc6dc1a4a5169318e479
"
"initCodeHash"
:
"0x
ba582b158027b434b4e7d4d1edc073c7fce8b499c5ce8da03ea98c173c530f5d
"
,
"sourceCodeHash"
:
"0x
d5f0f679c4559b277287f1844fb03ed47c702fcffff3c4aaea0e0ce8fc7d0760
"
},
"src/legacy/DeployerWhitelist.sol"
:
{
"initCodeHash"
:
"0x8de80fb23b26dd9d849f6328e56ea7c173cd9e9ce1f05c9beea559d1720deb3d"
,
...
...
packages/contracts-bedrock/snapshots/abi/PermissionedDisputeGame.json
0 → 100644
View file @
e4e02eb1
[
{
"inputs"
:
[
{
"internalType"
:
"GameType"
,
"name"
:
"_gameType"
,
"type"
:
"uint32"
},
{
"internalType"
:
"Claim"
,
"name"
:
"_absolutePrestate"
,
"type"
:
"bytes32"
},
{
"internalType"
:
"uint256"
,
"name"
:
"_genesisBlockNumber"
,
"type"
:
"uint256"
},
{
"internalType"
:
"Hash"
,
"name"
:
"_genesisOutputRoot"
,
"type"
:
"bytes32"
},
{
"internalType"
:
"uint256"
,
"name"
:
"_maxGameDepth"
,
"type"
:
"uint256"
},
{
"internalType"
:
"uint256"
,
"name"
:
"_splitDepth"
,
"type"
:
"uint256"
},
{
"internalType"
:
"Duration"
,
"name"
:
"_gameDuration"
,
"type"
:
"uint64"
},
{
"internalType"
:
"contract IBigStepper"
,
"name"
:
"_vm"
,
"type"
:
"address"
},
{
"internalType"
:
"address"
,
"name"
:
"_proposer"
,
"type"
:
"address"
},
{
"internalType"
:
"address"
,
"name"
:
"_challenger"
,
"type"
:
"address"
}
],
"stateMutability"
:
"nonpayable"
,
"type"
:
"constructor"
},
{
"inputs"
:
[],
"name"
:
"absolutePrestate"
,
"outputs"
:
[
{
"internalType"
:
"Claim"
,
"name"
:
"absolutePrestate_"
,
"type"
:
"bytes32"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"_ident"
,
"type"
:
"uint256"
},
{
"internalType"
:
"uint256"
,
"name"
:
"_execLeafIdx"
,
"type"
:
"uint256"
},
{
"internalType"
:
"uint256"
,
"name"
:
"_partOffset"
,
"type"
:
"uint256"
}
],
"name"
:
"addLocalData"
,
"outputs"
:
[],
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"_parentIndex"
,
"type"
:
"uint256"
},
{
"internalType"
:
"Claim"
,
"name"
:
"_claim"
,
"type"
:
"bytes32"
}
],
"name"
:
"attack"
,
"outputs"
:
[],
"stateMutability"
:
"payable"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"address"
,
"name"
:
"_recipient"
,
"type"
:
"address"
}
],
"name"
:
"claimCredit"
,
"outputs"
:
[],
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
""
,
"type"
:
"uint256"
}
],
"name"
:
"claimData"
,
"outputs"
:
[
{
"internalType"
:
"uint32"
,
"name"
:
"parentIndex"
,
"type"
:
"uint32"
},
{
"internalType"
:
"address"
,
"name"
:
"counteredBy"
,
"type"
:
"address"
},
{
"internalType"
:
"address"
,
"name"
:
"claimant"
,
"type"
:
"address"
},
{
"internalType"
:
"uint128"
,
"name"
:
"bond"
,
"type"
:
"uint128"
},
{
"internalType"
:
"Claim"
,
"name"
:
"claim"
,
"type"
:
"bytes32"
},
{
"internalType"
:
"Position"
,
"name"
:
"position"
,
"type"
:
"uint128"
},
{
"internalType"
:
"Clock"
,
"name"
:
"clock"
,
"type"
:
"uint128"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"claimDataLen"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"len_"
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"createdAt"
,
"outputs"
:
[
{
"internalType"
:
"Timestamp"
,
"name"
:
""
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"address"
,
"name"
:
""
,
"type"
:
"address"
}
],
"name"
:
"credit"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
""
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"_parentIndex"
,
"type"
:
"uint256"
},
{
"internalType"
:
"Claim"
,
"name"
:
"_claim"
,
"type"
:
"bytes32"
}
],
"name"
:
"defend"
,
"outputs"
:
[],
"stateMutability"
:
"payable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"extraData"
,
"outputs"
:
[
{
"internalType"
:
"bytes"
,
"name"
:
"extraData_"
,
"type"
:
"bytes"
}
],
"stateMutability"
:
"pure"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"gameData"
,
"outputs"
:
[
{
"internalType"
:
"GameType"
,
"name"
:
"gameType_"
,
"type"
:
"uint32"
},
{
"internalType"
:
"Claim"
,
"name"
:
"rootClaim_"
,
"type"
:
"bytes32"
},
{
"internalType"
:
"bytes"
,
"name"
:
"extraData_"
,
"type"
:
"bytes"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"gameDuration"
,
"outputs"
:
[
{
"internalType"
:
"Duration"
,
"name"
:
"gameDuration_"
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"gameType"
,
"outputs"
:
[
{
"internalType"
:
"GameType"
,
"name"
:
"gameType_"
,
"type"
:
"uint32"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"genesisBlockNumber"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"genesisBlockNumber_"
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"genesisOutputRoot"
,
"outputs"
:
[
{
"internalType"
:
"Hash"
,
"name"
:
"genesisOutputRoot_"
,
"type"
:
"bytes32"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"Position"
,
"name"
:
"_position"
,
"type"
:
"uint128"
}
],
"name"
:
"getRequiredBond"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"requiredBond_"
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"pure"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"initialize"
,
"outputs"
:
[],
"stateMutability"
:
"payable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"l1Head"
,
"outputs"
:
[
{
"internalType"
:
"Hash"
,
"name"
:
""
,
"type"
:
"bytes32"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"l2BlockNumber"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"l2BlockNumber_"
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"pure"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"maxGameDepth"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"maxGameDepth_"
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"_challengeIndex"
,
"type"
:
"uint256"
},
{
"internalType"
:
"Claim"
,
"name"
:
"_claim"
,
"type"
:
"bytes32"
},
{
"internalType"
:
"bool"
,
"name"
:
"_isAttack"
,
"type"
:
"bool"
}
],
"name"
:
"move"
,
"outputs"
:
[],
"stateMutability"
:
"payable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"resolve"
,
"outputs"
:
[
{
"internalType"
:
"enum GameStatus"
,
"name"
:
"status_"
,
"type"
:
"uint8"
}
],
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"_claimIndex"
,
"type"
:
"uint256"
}
],
"name"
:
"resolveClaim"
,
"outputs"
:
[],
"stateMutability"
:
"payable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"resolvedAt"
,
"outputs"
:
[
{
"internalType"
:
"Timestamp"
,
"name"
:
""
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"rootClaim"
,
"outputs"
:
[
{
"internalType"
:
"Claim"
,
"name"
:
"rootClaim_"
,
"type"
:
"bytes32"
}
],
"stateMutability"
:
"pure"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"splitDepth"
,
"outputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"splitDepth_"
,
"type"
:
"uint256"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"status"
,
"outputs"
:
[
{
"internalType"
:
"enum GameStatus"
,
"name"
:
""
,
"type"
:
"uint8"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[
{
"internalType"
:
"uint256"
,
"name"
:
"_claimIndex"
,
"type"
:
"uint256"
},
{
"internalType"
:
"bool"
,
"name"
:
"_isAttack"
,
"type"
:
"bool"
},
{
"internalType"
:
"bytes"
,
"name"
:
"_stateData"
,
"type"
:
"bytes"
},
{
"internalType"
:
"bytes"
,
"name"
:
"_proof"
,
"type"
:
"bytes"
}
],
"name"
:
"step"
,
"outputs"
:
[],
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"version"
,
"outputs"
:
[
{
"internalType"
:
"string"
,
"name"
:
""
,
"type"
:
"string"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"vm"
,
"outputs"
:
[
{
"internalType"
:
"contract IBigStepper"
,
"name"
:
"vm_"
,
"type"
:
"address"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"anonymous"
:
false
,
"inputs"
:
[
{
"indexed"
:
true
,
"internalType"
:
"uint256"
,
"name"
:
"parentIndex"
,
"type"
:
"uint256"
},
{
"indexed"
:
true
,
"internalType"
:
"Claim"
,
"name"
:
"claim"
,
"type"
:
"bytes32"
},
{
"indexed"
:
true
,
"internalType"
:
"address"
,
"name"
:
"claimant"
,
"type"
:
"address"
}
],
"name"
:
"Move"
,
"type"
:
"event"
},
{
"anonymous"
:
false
,
"inputs"
:
[
{
"indexed"
:
true
,
"internalType"
:
"enum GameStatus"
,
"name"
:
"status"
,
"type"
:
"uint8"
}
],
"name"
:
"Resolved"
,
"type"
:
"event"
},
{
"inputs"
:
[],
"name"
:
"AlreadyInitialized"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"BadAuth"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"BondTransferFailed"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"CannotDefendRootClaim"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"ClaimAboveSplit"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"ClaimAlreadyExists"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"ClaimAlreadyResolved"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"ClockNotExpired"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"ClockTimeExceeded"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"GameDepthExceeded"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"GameNotInProgress"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"InsufficientBond"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"InvalidLocalIdent"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"InvalidParent"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"InvalidPrestate"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"InvalidSplitDepth"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"OutOfOrderResolution"
,
"type"
:
"error"
},
{
"inputs"
:
[
{
"internalType"
:
"Claim"
,
"name"
:
"rootClaim"
,
"type"
:
"bytes32"
}
],
"name"
:
"UnexpectedRootClaim"
,
"type"
:
"error"
},
{
"inputs"
:
[],
"name"
:
"ValidStep"
,
"type"
:
"error"
}
]
\ No newline at end of file
packages/contracts-bedrock/snapshots/storageLayout/PermissionedDisputeGame.json
0 → 100644
View file @
e4e02eb1
[
{
"bytes"
:
"8"
,
"label"
:
"createdAt"
,
"offset"
:
0
,
"slot"
:
"0"
,
"type"
:
"Timestamp"
},
{
"bytes"
:
"8"
,
"label"
:
"resolvedAt"
,
"offset"
:
8
,
"slot"
:
"0"
,
"type"
:
"Timestamp"
},
{
"bytes"
:
"1"
,
"label"
:
"status"
,
"offset"
:
16
,
"slot"
:
"0"
,
"type"
:
"enum GameStatus"
},
{
"bytes"
:
"32"
,
"label"
:
"l1Head"
,
"offset"
:
0
,
"slot"
:
"1"
,
"type"
:
"Hash"
},
{
"bytes"
:
"32"
,
"label"
:
"claimData"
,
"offset"
:
0
,
"slot"
:
"2"
,
"type"
:
"struct IFaultDisputeGame.ClaimData[]"
},
{
"bytes"
:
"32"
,
"label"
:
"credit"
,
"offset"
:
0
,
"slot"
:
"3"
,
"type"
:
"mapping(address => uint256)"
},
{
"bytes"
:
"32"
,
"label"
:
"claims"
,
"offset"
:
0
,
"slot"
:
"4"
,
"type"
:
"mapping(ClaimHash => bool)"
},
{
"bytes"
:
"32"
,
"label"
:
"subgames"
,
"offset"
:
0
,
"slot"
:
"5"
,
"type"
:
"mapping(uint256 => uint256[])"
},
{
"bytes"
:
"1"
,
"label"
:
"subgameAtRootResolved"
,
"offset"
:
0
,
"slot"
:
"6"
,
"type"
:
"bool"
},
{
"bytes"
:
"1"
,
"label"
:
"initialized"
,
"offset"
:
1
,
"slot"
:
"6"
,
"type"
:
"bool"
}
]
\ No newline at end of file
packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol
View file @
e4e02eb1
...
...
@@ -81,8 +81,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
bool internal initialized;
/// @notice Semantic version.
/// @custom:semver 0.2.
0
string public constant version = "0.2.
0
";
/// @custom:semver 0.2.
1
string public constant version = "0.2.
1
";
/// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace.
...
...
@@ -121,7 +121,15 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
////////////////////////////////////////////////////////////////
/// @inheritdoc IFaultDisputeGame
function step(uint256 _claimIndex, bool _isAttack, bytes calldata _stateData, bytes calldata _proof) external {
function step(
uint256 _claimIndex,
bool _isAttack,
bytes calldata _stateData,
bytes calldata _proof
)
public
virtual
{
// INVARIANT: Steps cannot be made unless the game is currently in progress.
if (status != GameStatus.IN_PROGRESS) revert GameNotInProgress();
...
...
@@ -194,7 +202,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
/// @param _challengeIndex The index of the claim being moved against.
/// @param _claim The claim at the next logical position in the game.
/// @param _isAttack Whether or not the move is an attack or defense.
function move(uint256 _challengeIndex, Claim _claim, bool _isAttack) public payable {
function move(uint256 _challengeIndex, Claim _claim, bool _isAttack) public payable
virtual
{
// INVARIANT: Moves cannot be made unless the game is currently in progress.
if (status != GameStatus.IN_PROGRESS) revert GameNotInProgress();
...
...
@@ -461,7 +469,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
////////////////////////////////////////////////////////////////
/// @inheritdoc IInitializable
function initialize()
external payable
{
function initialize()
public payable virtual
{
// SAFETY: Any revert in this function will bubble up to the DisputeGameFactory and
// prevent the game from being created.
//
...
...
packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol
0 → 100644
View file @
e4e02eb1
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { FaultDisputeGame, IFaultDisputeGame, IBigStepper, IInitializable } from "src/dispute/FaultDisputeGame.sol";
import "src/libraries/DisputeTypes.sol";
import "src/libraries/DisputeErrors.sol";
/// @title PermissionedDisputeGame
/// @notice PermissionedDisputeGame is a contract that inherits from `FaultDisputeGame`, and contains two roles:
/// - The `challenger` role, which is allowed to challenge a dispute.
/// - The `proposer` role, which is allowed to create proposals and participate in their game.
/// This contract exists as a fallback mechanism in case of the failure of the fault proof system in the stage
/// one release. It will not be the default implementation used, and eventually will be deprecated in favor of
/// a fully permissionless system.
contract PermissionedDisputeGame is FaultDisputeGame {
/// @notice The proposer role is allowed to create proposals and participate in the dispute game.
address internal immutable PROPOSER;
/// @notice The challenger role is allowed to participate in the dispute game.
address internal immutable CHALLENGER;
/// @notice Modifier that gates access to the `challenger` and `proposer` roles.
modifier onlyAuthorized() {
if (!(msg.sender == PROPOSER || msg.sender == CHALLENGER)) {
revert BadAuth();
}
_;
}
/// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace.
/// @param _genesisBlockNumber The block number of the genesis block.
/// @param _genesisOutputRoot The output root of the genesis block.
/// @param _maxGameDepth The maximum depth of bisection.
/// @param _splitDepth The final depth of the output bisection portion of the game.
/// @param _gameDuration The duration of the game.
/// @param _vm An onchain VM that performs single instruction steps on a fault proof program
/// trace.
constructor(
GameType _gameType,
Claim _absolutePrestate,
uint256 _genesisBlockNumber,
Hash _genesisOutputRoot,
uint256 _maxGameDepth,
uint256 _splitDepth,
Duration _gameDuration,
IBigStepper _vm,
address _proposer,
address _challenger
)
FaultDisputeGame(
_gameType,
_absolutePrestate,
_genesisBlockNumber,
_genesisOutputRoot,
_maxGameDepth,
_splitDepth,
_gameDuration,
_vm
)
{
PROPOSER = _proposer;
CHALLENGER = _challenger;
}
/// @inheritdoc IFaultDisputeGame
function step(
uint256 _claimIndex,
bool _isAttack,
bytes calldata _stateData,
bytes calldata _proof
)
public
override
onlyAuthorized
{
super.step(_claimIndex, _isAttack, _stateData, _proof);
}
/// @notice Generic move function, used for both `attack` and `defend` moves.
/// @param _challengeIndex The index of the claim being moved against.
/// @param _claim The claim at the next logical position in the game.
/// @param _isAttack Whether or not the move is an attack or defense.
function move(uint256 _challengeIndex, Claim _claim, bool _isAttack) public payable override onlyAuthorized {
super.move(_challengeIndex, _claim, _isAttack);
}
/// @inheritdoc IInitializable
function initialize() public payable override {
// The creator of the dispute game must be the proposer EOA.
if (tx.origin != PROPOSER) revert BadAuth();
// Fallthrough initialization.
super.initialize();
}
}
packages/contracts-bedrock/src/libraries/DisputeErrors.sol
View file @
e4e02eb1
...
...
@@ -87,3 +87,10 @@ error ClaimAboveSplit();
/// @notice Thrown on deployment if the split depth is greater than or equal to the max
/// depth of the game.
error InvalidSplitDepth();
////////////////////////////////////////////////////////////////
// `PermissionedDisputeGame` Errors //
////////////////////////////////////////////////////////////////
/// @notice Thrown when an unauthorized address attempts to interact with the game.
error BadAuth();
packages/contracts-bedrock/src/libraries/DisputeTypes.sol
View file @
e4e02eb1
...
...
@@ -95,6 +95,9 @@ library GameTypes {
/// @dev A dispute game type the uses the cannon vm.
GameType internal constant CANNON = GameType.wrap(0);
/// @dev A permissioned dispute game type the uses the cannon vm.
GameType internal constant PERMISSIONED_CANNON = GameType.wrap(1);
/// @notice A dispute game type that uses an alphabet vm.
/// Not intended for production use.
GameType internal constant ALPHABET = GameType.wrap(255);
...
...
packages/contracts-bedrock/test/dispute/DisputeGameFactory.t.sol
View file @
e4e02eb1
...
...
@@ -101,7 +101,7 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init {
function testFuzz_create_noImpl_reverts(uint32 gameType, Claim rootClaim, bytes calldata extraData) public {
// Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. We skip over
// game type = 0, since the deploy script set the implementation for that game type.
GameType gt = GameType.wrap(uint32(bound(gameType,
1
, type(uint32).max)));
GameType gt = GameType.wrap(uint32(bound(gameType,
2
, type(uint32).max)));
// Ensure the rootClaim has a VMStatus that disagrees with the validity.
rootClaim = changeClaimStatus(rootClaim, VMStatuses.INVALID);
...
...
packages/contracts-bedrock/test/dispute/PermissionedDisputeGame.t.sol
0 → 100644
View file @
e4e02eb1
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
import { Test } from "forge-std/Test.sol";
import { Vm } from "forge-std/Vm.sol";
import { DisputeGameFactory_Init } from "test/dispute/DisputeGameFactory.t.sol";
import { DisputeGameFactory } from "src/dispute/DisputeGameFactory.sol";
import { PermissionedDisputeGame } from "src/dispute/PermissionedDisputeGame.sol";
import { L2OutputOracle } from "src/L1/L2OutputOracle.sol";
import { PreimageOracle } from "src/cannon/PreimageOracle.sol";
import { PreimageKeyLib } from "src/cannon/PreimageKeyLib.sol";
import "src/libraries/DisputeTypes.sol";
import "src/libraries/DisputeErrors.sol";
import { Types } from "src/libraries/Types.sol";
import { LibClock } from "src/dispute/lib/LibUDT.sol";
import { LibPosition } from "src/dispute/lib/LibPosition.sol";
import { IBigStepper, IPreimageOracle } from "src/dispute/interfaces/IBigStepper.sol";
import { AlphabetVM } from "test/mocks/AlphabetVM.sol";
import { DisputeActor, HonestDisputeActor } from "test/actors/FaultDisputeActors.sol";
contract PermissionedDisputeGame_Init is DisputeGameFactory_Init {
/// @dev The type of the game being tested.
GameType internal constant GAME_TYPE = GameType.wrap(1);
/// @dev Mock proposer key
address internal constant PROPOSER = address(0xfacade9);
/// @dev Mock challenger key
address internal constant CHALLENGER = address(0xfacadec);
/// @dev The implementation of the game.
PermissionedDisputeGame internal gameImpl;
/// @dev The `Clone` proxy of the game.
PermissionedDisputeGame internal gameProxy;
/// @dev The extra data passed to the game for initialization.
bytes internal extraData;
event Move(uint256 indexed parentIndex, Claim indexed pivot, address indexed claimant);
function init(
Claim rootClaim,
Claim absolutePrestate,
uint256 l2BlockNumber,
uint256 genesisBlockNumber,
Hash genesisOutputRoot
)
public
{
// Set the time to a realistic date.
vm.warp(1690906994);
// Set the extra data for the game creation
extraData = abi.encode(l2BlockNumber);
AlphabetVM _vm = new AlphabetVM(absolutePrestate, new PreimageOracle(0, 0, 0));
// Deploy an implementation of the fault game
gameImpl = new PermissionedDisputeGame({
_gameType: GAME_TYPE,
_absolutePrestate: absolutePrestate,
_genesisBlockNumber: genesisBlockNumber,
_genesisOutputRoot: genesisOutputRoot,
_maxGameDepth: 2 ** 3,
_splitDepth: 2 ** 2,
_gameDuration: Duration.wrap(7 days),
_vm: _vm,
_proposer: PROPOSER,
_challenger: CHALLENGER
});
// Register the game implementation with the factory.
disputeGameFactory.setImplementation(GAME_TYPE, gameImpl);
// Create a new game.
vm.prank(PROPOSER, PROPOSER);
gameProxy = PermissionedDisputeGame(address(disputeGameFactory.create(GAME_TYPE, rootClaim, extraData)));
// Check immutables
assertEq(gameProxy.gameType().raw(), GAME_TYPE.raw());
assertEq(gameProxy.absolutePrestate().raw(), absolutePrestate.raw());
assertEq(gameProxy.genesisBlockNumber(), genesisBlockNumber);
assertEq(gameProxy.genesisOutputRoot().raw(), genesisOutputRoot.raw());
assertEq(gameProxy.maxGameDepth(), 2 ** 3);
assertEq(gameProxy.splitDepth(), 2 ** 2);
assertEq(gameProxy.gameDuration().raw(), 7 days);
assertEq(address(gameProxy.vm()), address(_vm));
// Label the proxy
vm.label(address(gameProxy), "FaultDisputeGame_Clone");
}
fallback() external payable { }
receive() external payable { }
}
contract PermissionedDisputeGame_Test is PermissionedDisputeGame_Init {
/// @dev The root claim of the game.
Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32((uint256(1) << 248) | uint256(10)));
/// @dev The preimage of the absolute prestate claim
bytes internal absolutePrestateData;
/// @dev The absolute prestate of the trace.
Claim internal absolutePrestate;
function setUp() public override {
absolutePrestateData = abi.encode(0);
absolutePrestate = _changeClaimStatus(Claim.wrap(keccak256(absolutePrestateData)), VMStatuses.UNFINISHED);
super.setUp();
super.init({
rootClaim: ROOT_CLAIM,
absolutePrestate: absolutePrestate,
l2BlockNumber: 0x10,
genesisBlockNumber: 0,
genesisOutputRoot: Hash.wrap(bytes32(0))
});
}
/// @dev Tests that the proposer can create a permissioned dispute game.
function test_createGame_proposer_succeeds() public {
vm.prank(PROPOSER, PROPOSER);
disputeGameFactory.create(GAME_TYPE, ROOT_CLAIM, abi.encode(0x420));
}
/// @dev Tests that the permissioned game cannot be created by any address other than the proposer.
function testFuzz_createGame_notProposer_reverts(address _p) public {
vm.assume(_p != PROPOSER);
vm.prank(_p, _p);
vm.expectRevert(BadAuth.selector);
disputeGameFactory.create(GAME_TYPE, ROOT_CLAIM, abi.encode(0x420));
}
/// @dev Tests that the challenger can participate in a permissioned dispute game.
function test_participateInGame_challenger_succeeds() public {
vm.startPrank(CHALLENGER, CHALLENGER);
gameProxy.attack(0, Claim.wrap(0));
gameProxy.defend(1, Claim.wrap(0));
gameProxy.move(2, Claim.wrap(0), true);
vm.stopPrank();
}
/// @dev Tests that the proposer can participate in a permissioned dispute game.
function test_participateInGame_proposer_succeeds() public {
vm.startPrank(PROPOSER, PROPOSER);
gameProxy.attack(0, Claim.wrap(0));
gameProxy.defend(1, Claim.wrap(0));
gameProxy.move(2, Claim.wrap(0), true);
vm.stopPrank();
}
/// @dev Tests that addresses that are not the proposer or challenger cannot participate in a permissioned dispute
/// game.
function test_participateInGame_notAuthorized_reverts(address _p) public {
vm.assume(_p != PROPOSER && _p != CHALLENGER);
vm.startPrank(_p, _p);
vm.expectRevert(BadAuth.selector);
gameProxy.attack(0, Claim.wrap(0));
vm.expectRevert(BadAuth.selector);
gameProxy.defend(1, Claim.wrap(0));
vm.expectRevert(BadAuth.selector);
gameProxy.move(2, Claim.wrap(0), true);
vm.stopPrank();
}
}
/// @dev Helper to change the VM status byte of a claim.
function _changeClaimStatus(Claim _claim, VMStatus _status) pure returns (Claim out_) {
assembly {
out_ := or(and(not(shl(248, 0xFF)), _claim), shl(248, _status))
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment