0 txs
26.3k calls
constructor
constructor(address _ethPOS, address _eigenPodManager, uint64 _GENESIS_TIME, string _version)
functions
activeValidatorCount
viewfunction activeValidatorCount() view returns (uint256)
checkpointBalanceExitedGwei
viewfunction checkpointBalanceExitedGwei(uint64) view returns (uint64)
currentCheckpoint
viewfunction currentCheckpoint() view returns (tuple)
currentCheckpointTimestamp
viewfunction currentCheckpointTimestamp() view returns (uint64)
eigenPodManager
viewfunction eigenPodManager() view returns (address)
ethPOS
viewfunction ethPOS() view returns (address)
GENESIS_TIME
viewfunction GENESIS_TIME() view returns (uint64)
getParentBlockRoot
viewfunction getParentBlockRoot(uint64 timestamp) view returns (bytes32)
lastCheckpointTimestamp
viewfunction lastCheckpointTimestamp() view returns (uint64)
podOwner
viewfunction podOwner() view returns (address)
proofSubmitter
viewfunction proofSubmitter() view returns (address)
validatorPubkeyHashToInfo
viewfunction validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns (tuple)
validatorPubkeyToInfo
viewfunction validatorPubkeyToInfo(bytes validatorPubkey) view returns (tuple)
validatorStatus
viewfunction validatorStatus(bytes validatorPubkey) view returns (uint8)
validatorStatus
viewfunction validatorStatus(bytes32 pubkeyHash) view returns (uint8)
version
viewfunction version() view returns (string)
withdrawableRestakedExecutionLayerGwei
viewfunction withdrawableRestakedExecutionLayerGwei() view returns (uint64)
initialize
nonpayablefunction initialize(address _podOwner)
recoverTokens
nonpayablefunction recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient)
setProofSubmitter
nonpayablefunction setProofSubmitter(address newProofSubmitter)
stake
payablefunction stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable
startCheckpoint
nonpayablefunction startCheckpoint(bool revertIfNoBalance)
verifyCheckpointProofs
nonpayablefunction verifyCheckpointProofs(tuple balanceContainerProof, tuple[] proofs)
verifyStaleBalance
nonpayablefunction verifyStaleBalance(uint64 beaconTimestamp, tuple stateRootProof, tuple proof)
verifyWithdrawalCredentials
nonpayablefunction verifyWithdrawalCredentials(uint64 beaconTimestamp, tuple stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields)
withdrawRestakedBeaconChainETH
nonpayablefunction withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei)
events
CheckpointCreated
event CheckpointCreated(uint64 indexed checkpointTimestamp, bytes32 indexed beaconBlockRoot, uint256 validatorCount)
CheckpointFinalized
event CheckpointFinalized(uint64 indexed checkpointTimestamp, int256 totalShareDeltaWei)
EigenPodStaked
event EigenPodStaked(bytes pubkey)
Initialized
event Initialized(uint8 version)
NonBeaconChainETHReceived
event NonBeaconChainETHReceived(uint256 amountReceived)
ProofSubmitterUpdated
event ProofSubmitterUpdated(address prevProofSubmitter, address newProofSubmitter)
RestakedBeaconChainETHWithdrawn
event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount)
ValidatorBalanceUpdated
event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei)
ValidatorCheckpointed
event ValidatorCheckpointed(uint64 indexed checkpointTimestamp, uint40 indexed validatorIndex)
ValidatorRestaked
event ValidatorRestaked(uint40 validatorIndex)
ValidatorWithdrawn
event ValidatorWithdrawn(uint64 indexed checkpointTimestamp, uint40 indexed validatorIndex)
errors
BeaconTimestampTooFarInPast
error BeaconTimestampTooFarInPast()
CannotCheckpointTwiceInSingleBlock
error CannotCheckpointTwiceInSingleBlock()
CheckpointAlreadyActive
error CheckpointAlreadyActive()
CredentialsAlreadyVerified
error CredentialsAlreadyVerified()
CurrentlyPaused
error CurrentlyPaused()
InputAddressZero
error InputAddressZero()
InputArrayLengthMismatch
error InputArrayLengthMismatch()
InsufficientWithdrawableBalance
error InsufficientWithdrawableBalance()
InvalidEIP4788Response
error InvalidEIP4788Response()
InvalidProof
error InvalidProof()
InvalidProofLength
error InvalidProofLength()
InvalidProofLength
error InvalidProofLength()
InvalidPubKeyLength
error InvalidPubKeyLength()
InvalidShortString
error InvalidShortString()
InvalidValidatorFieldsLength
error InvalidValidatorFieldsLength()
MsgValueNot32ETH
error MsgValueNot32ETH()
NoActiveCheckpoint
error NoActiveCheckpoint()
NoBalanceToCheckpoint
error NoBalanceToCheckpoint()
OnlyEigenPodManager
error OnlyEigenPodManager()
OnlyEigenPodOwner
error OnlyEigenPodOwner()
OnlyEigenPodOwnerOrProofSubmitter
error OnlyEigenPodOwnerOrProofSubmitter()
StringTooLong
error StringTooLong(string str)
TimestampOutOfRange
error TimestampOutOfRange()
ValidatorInactiveOnBeaconChain
error ValidatorInactiveOnBeaconChain()
ValidatorIsExitingBeaconChain
error ValidatorIsExitingBeaconChain()
ValidatorNotActiveInPod
error ValidatorNotActiveInPod()
ValidatorNotSlashedOnBeaconChain
error ValidatorNotSlashedOnBeaconChain()
WithdrawalCredentialsNotForEigenPod
error WithdrawalCredentialsNotForEigenPod()
creation bytecode
0x610100604052348015610010575f5ffd5b50604051613eb5380380613eb583398101604081905261002f91610197565b806100398161006e565b608052506001600160a01b0380851660a052831660c0526001600160401b03821660e0526100656100b4565b505050506102e7565b5f5f829050601f815111156100a1578260405163305a27a960e01b8152600401610098919061028c565b60405180910390fd5b80516100ac826102c1565b179392505050565b5f54610100900460ff161561011b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610098565b5f5460ff9081161461016a575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610180575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101aa575f5ffd5b84516101b58161016c565b60208601519094506101c68161016c565b60408601519093506001600160401b03811681146101e2575f5ffd5b60608601519092506001600160401b038111156101fd575f5ffd5b8501601f8101871361020d575f5ffd5b80516001600160401b0381111561022657610226610183565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025457610254610183565b60405281815282820160200189101561026b575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e1575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051613b4e6103675f395f61063f01525f81816102c30152818161067a01528181610722015281816109e601528181610bb001528181610eb901528181610f6001528181611196015281816114e401528181611618015261286301525f81816105010152610fc901525f610c1c0152613b4e5ff3fe60806040526004361061017e575f3560e01c80636fcd0e53116100cd578063c490744211610087578063dda3346c11610062578063dda3346c146105d1578063ee94d67c146105f0578063f074ba621461060f578063f28824611461062e575f5ffd5b8063c490744214610574578063c4d66de814610593578063d06d5587146105b2575f5ffd5b80636fcd0e531461048f5780637439841f146104bb57806374cdd798146104f057806388676cad146105235780639b4e463414610542578063b522538a14610555575f5ffd5b80634665bcda1161013857806354fd4d501161011357806354fd4d5014610404578063587533571461042557806358eaee79146104445780636c0d2d5a14610470575f5ffd5b80634665bcda146102b257806347d28372146102e557806352396a59146103d0575f5ffd5b8063039157d2146101bc5780630b18ff66146101dd5780632340e8d3146102195780633474aa161461023c5780633f65cf191461026d57806342ecff2a1461028c575f5ffd5b366101b8576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b3480156101c7575f5ffd5b506101db6101d63660046130c2565b610661565b005b3480156101e8575f5ffd5b506033546101fc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610224575f5ffd5b5061022e60395481565b604051908152602001610210565b348015610247575f5ffd5b506034546001600160401b03165b6040516001600160401b039091168152602001610210565b348015610278575f5ffd5b506101db61028736600461317b565b61098d565b348015610297575f5ffd5b50603a5461025590600160401b90046001600160401b031681565b3480156102bd575f5ffd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f0575f5ffd5b506103756040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161021091905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b3480156103db575f5ffd5b506102556103ea366004613250565b603b6020525f90815260409020546001600160401b031681565b34801561040f575f5ffd5b50610418610c15565b604051610210919061329e565b348015610430575f5ffd5b50603e546101fc906001600160a01b031681565b34801561044f575f5ffd5b5061046361045e3660046132ed565b610c45565b604051610210919061335f565b34801561047b575f5ffd5b5061022e61048a366004613250565b610ca7565b34801561049a575f5ffd5b506104ae6104a936600461336d565b610db5565b6040516102109190613384565b3480156104c6575f5ffd5b506104636104d536600461336d565b5f90815260366020526040902054600160c01b900460ff1690565b3480156104fb575f5ffd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052e575f5ffd5b506101db61053d3660046133e7565b610e60565b6101db610550366004613402565b610f55565b348015610560575f5ffd5b506104ae61056f3660046132ed565b61109c565b34801561057f575f5ffd5b506101db61058e366004613492565b61118b565b34801561059e575f5ffd5b506101db6105ad3660046134bc565b6112c2565b3480156105bd575f5ffd5b506101db6105cc3660046134bc565b61140c565b3480156105dc575f5ffd5b506101db6105eb3660046135a7565b6114a0565b3480156105fb575f5ffd5b50603a54610255906001600160401b031681565b34801561061a575f5ffd5b506101db610629366004613679565b6115ff565b348015610639575f5ffd5b506102557f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156106c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106eb91906136e0565b156107095760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561076f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079391906136e0565b156107b15760405163840a48d560e01b815260040160405180910390fd5b5f6107f56107bf85806136fb565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506119fc92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156108635761086361332b565b60028111156108745761087461332b565b81525050905080604001516001600160401b0316876001600160401b0316116108b0576040516337e07ffd60e01b815260040160405180910390fd5b6001816060015160028111156108c8576108c861332b565b146108e65760405163d49e19a760e01b815260040160405180910390fd5b6109296108f386806136fb565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a1e92505050565b6109465760405163161ce5ed60e31b815260040160405180910390fd5b61095861095288610ca7565b87611a46565b61097b863561096787806136fb565b61097460208a018a613740565b8651611aeb565b6109845f611c12565b50505050505050565b6033546001600160a01b03163314806109b05750603e546001600160a01b031633145b6109cd5760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5791906136e0565b15610a755760405163840a48d560e01b815260040160405180910390fd5b8584148015610a8357508382145b610aa0576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610ad6576040516337e07ffd60e01b815260040160405180910390fd5b610ae8610ae28a610ca7565b89611a46565b5f805b87811015610b8057610b6c8a358a8a84818110610b0a57610b0a613782565b9050602002016020810190610b1f9190613796565b898985818110610b3157610b31613782565b9050602002810190610b439190613740565b898987818110610b5557610b55613782565b9050602002810190610b6791906136fb565b611d92565b610b7690836137ce565b9150600101610aeb565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015610bf3575f5ffd5b505af1158015610c05573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610c407f0000000000000000000000000000000000000000000000000000000000000000612247565b905090565b5f5f610c8584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061228492505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b5f610cb5611fff600c6137e1565b610cc86001600160401b038416426137f8565b10610ce657604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610d2d91613822565b5f60405180830381855afa9150503d805f8114610d65576040519150601f19603f3d011682016040523d82523d5f602084013e610d6a565b606091505b5091509150818015610d7c57505f8151115b610d995760405163558ad0a360e01b815260040160405180910390fd5b80806020019051810190610dad919061382d565b949350505050565b610ddc604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610e4657610e4661332b565b6002811115610e5757610e5761332b565b90525092915050565b6033546001600160a01b0316331480610e835750603e546001600160a01b031633145b610ea05760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2a91906136e0565b15610f485760405163840a48d560e01b815260040160405180910390fd5b610f5182611c12565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f9e57604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610fc75760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec800000878761100a612315565b8888886040518863ffffffff1660e01b815260040161102e9695949392919061386c565b5f604051808303818588803b158015611045575f5ffd5b505af1158015611057573d5f5f3e3d5ffd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23858560405161108d9291906138ba565b60405180910390a15050505050565b6110c3604080516080810182525f8082526020820181905291810182905290606082015290565b60365f61110485858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061228492505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff1660028111156111705761117061332b565b60028111156111815761118161332b565b9052509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111d457604051633213a66160e21b815260040160405180910390fd5b5f6111e3633b9aca00836138e1565b90506111fc633b9aca006001600160401b0383166137e1565b6034549092506001600160401b03908116908216111561122f576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f9061124c9084906001600160401b03166138f4565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516112ab91815260200190565b60405180910390a26112bd8383612359565b505050565b5f54610100900460ff16158080156112e057505f54600160ff909116105b806112f95750303b1580156112f957505f5460ff166001145b6113615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611382575f805461ff0019166101001790555b6001600160a01b0382166113a9576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610f51575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114375760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114cb5760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611531573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155591906136e0565b156115735760405163840a48d560e01b815260040160405180910390fd5b8251845114611595576040516343714afd60e01b815260040160405180910390fd5b5f5b84518110156115f8576115f0838583815181106115b6576115b6613782565b60200260200101518784815181106115d0576115d0613782565b60200260200101516001600160a01b031661246e9092919063ffffffff16565b600101611597565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611665573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168991906136e0565b156116a75760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f8190036116db57604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c54808252603d5462ffffff811660208401526001600160401b0363010000008204811694840194909452600160581b810460070b6060840152600160981b900490921660808201529061173a90876124c0565b5f805b858110156119a3573687878381811061175857611758613782565b905060200281019061176a9190613913565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156117da576117da61332b565b60028111156117eb576117eb61332b565b90525090506001816060015160028111156118085761180861332b565b1461181457505061199b565b856001600160401b031681604001516001600160401b03161061183857505061199b565b5f8080611848848a8f3588612571565b60208b018051939650919450925061185f82613931565b62ffffff1690525060808801805184919061187b90839061394e565b6001600160401b031690525060608801805183919061189b90839061396d565b60070b9052506118ab818861394e565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b83600281111561194f5761194f61332b565b021790555050845160405164ffffffffff90911691506001600160401b038b16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f905f90a350505050505b60010161173d565b506001600160401b038084165f908152603b60205260408120805484939192916119cf9185911661394e565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061098482612694565b5f815f81518110611a0f57611a0f613782565b60200260200101519050919050565b5f81600381518110611a3257611a32613782565b60200260200101515f5f1b14159050919050565b611a52600360206137e1565b611a5f6020830183613740565b905014611a7f576040516313717da960e21b815260040160405180910390fd5b611ace611a8f6020830183613740565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250869250508435905060036128c3565b610f51576040516309bde33960e01b815260040160405180910390fd5b60088414611b0c5760405163200591bd60e01b815260040160405180910390fd5b6005611b1a602860016137ce565b611b2491906137ce565b611b2f9060206137e1565b8214611b4e576040516313717da960e21b815260040160405180910390fd5b5f611b8a8686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506128da92505050565b90505f64ffffffffff8316611ba1602860016137ce565b600b901b179050611beb85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508691508590506128c3565b611c08576040516309bde33960e01b815260040160405180910390fd5b5050505050505050565b603a54600160401b90046001600160401b031615611c425760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603611c70576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b0316611c8c633b9aca00476138e1565b611c9691906138f4565b9050818015611cac57506001600160401b038116155b15611cca576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a00160405280611cdf42610ca7565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff0000000000000000199092169190911790559050611d4381612694565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f611dcf8484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506119fc92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611e3d57611e3d61332b565b6002811115611e4e57611e4e61332b565b90525090505f81606001516002811115611e6a57611e6a61332b565b14611e88576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b038016611ecd8686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b6a92505050565b6001600160401b031603611ef457604051631958236d60e21b815260040160405180910390fd5b6001600160401b038016611f398686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8e92505050565b6001600160401b031614611f6057604051632eade63760e01b815260040160405180910390fd5b611f68612315565b611f719061399c565b611fac8686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612ba592505050565b14611fca57604051633772dd5360e11b815260040160405180910390fd5b5f6120068686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612bb992505050565b90506120168a87878b8b8e611aeb565b60398054905f612025836139bf565b9091555050603a545f90600160401b90046001600160401b03161561205c57603a54600160401b90046001600160401b0316612069565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b83600281111561213e5761213e61332b565b021790555050603d8054849250601390612169908490600160981b90046001600160401b031661394e565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c104414498a6040516121c9919064ffffffffff91909116815260200190565b60405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612238633b9aca006001600160401b0384166137e1565b9b9a5050505050505050505050565b60605f61225383612bd0565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f81516030146122a757604051634f88323960e11b815260040160405180910390fd5b6040516002906122bd9084905f906020016139d7565b60408051601f19818403018152908290526122d791613822565b602060405180830381855afa1580156122f2573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ca1919061382d565b60408051600160f81b60208201525f602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b804710156123a95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611358565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146123f2576040519150601f19603f3d011682016040523d82523d5f602084013e6123f7565b606091505b50509050806112bd5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611358565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112bd908490612bf7565b6124cc600560036137ce565b6124d79060206137e1565b6124e46020830183613740565b905014612504576040516313717da960e21b815260040160405180910390fd5b606c6125546125166020840184613740565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792505085359050846128c3565b6112bd576040516309bde33960e01b815260040160405180910390fd5b83516020850151905f90819081612589878388612cca565b9050846001600160401b0316816001600160401b031614612603576125ae85826139fb565b6040805164ffffffffff851681526001600160401b038b8116602083015284168183015290519195507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01525f036126885760398054905f61263283613a2a565b9091555050600260608a015261264784613a3f565b92508164ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50509450945094915050565b602081015162ffffff1615612734578051603c556020810151603d80546040840151606085015160809095015162ffffff9094166affffffffffffffffffffff199092169190911763010000006001600160401b0392831602176fffffffffffffffffffffffffffffffff60581b1916600160581b9482169490940267ffffffffffffffff60981b191693909317600160981b9390921692909202179055565b60808101516034545f91612750916001600160401b031661394e565b90505f82606001518360400151612767919061396d565b60408401516034805492935090915f9061278b9084906001600160401b031661394e565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f91506127db90633b9aca009085166137e1565b90505f6127f0633b9aca00600785900b613a64565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b1580156128a6575f5ffd5b505af11580156128b8573d5f5f3e3d5ffd5b505050505050505050565b5f836128d0868585612da8565b1495945050505050565b5f5f600283516128ea91906138e1565b90505f816001600160401b03811115612905576129056134d7565b60405190808252806020026020018201604052801561292e578160200160208202803683370190505b5090505f5b82811015612a285760028561294883836137e1565b8151811061295857612958613782565b60200260200101518683600261296e91906137e1565b6129799060016137ce565b8151811061298957612989613782565b60200260200101516040516020016129ab929190918252602082015260400190565b60408051601f19818403018152908290526129c591613822565b602060405180830381855afa1580156129e0573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612a03919061382d565b828281518110612a1557612a15613782565b6020908102919091010152600101612933565b50612a346002836138e1565b91505b8115612b47575f5b82811015612b3457600282612a5483836137e1565b81518110612a6457612a64613782565b602002602001015183836002612a7a91906137e1565b612a859060016137ce565b81518110612a9557612a95613782565b6020026020010151604051602001612ab7929190918252602082015260400190565b60408051601f1981840301815290829052612ad191613822565b602060405180830381855afa158015612aec573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612b0f919061382d565b828281518110612b2157612b21613782565b6020908102919091010152600101612a3f565b50612b406002836138e1565b9150612a37565b805f81518110612b5957612b59613782565b602002602001015192505050919050565b5f610ca182600581518110612b8157612b81613782565b6020026020010151612e7c565b5f610ca182600681518110612b8157612b81613782565b5f81600181518110611a0f57611a0f613782565b5f610ca182600281518110612b8157612b81613782565b5f60ff8216601f811115610ca157604051632cd44ac360e21b815260040160405180910390fd5b5f612c4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ee39092919063ffffffff16565b905080515f1480612c6b575080806020019051810190612c6b91906136e0565b6112bd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611358565b5f612cd7602660016137ce565b612ce29060206137e1565b612cef6040840184613740565b905014612d0f576040516313717da960e21b815260040160405180910390fd5b5f612d1b600485613a93565b64ffffffffff169050612d74612d346040850185613740565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525089925050506020860135846128c3565b612d91576040516309bde33960e01b815260040160405180910390fd5b612d9f836020013585612ef1565b95945050505050565b5f83515f14158015612dc5575060208451612dc39190613abc565b155b612de2576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b85518111612e7257612e06600285613abc565b5f03612e385781515f528086015160205260208260405f60026107d05a03fa612e2d575f5ffd5b600284049350612e60565b808601515f52815160205260208260405f60026107d05a03fa612e59575f5ffd5b6002840493505b612e6b6020826137ce565b9050612df3565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610dad84845f85612f1d565b5f80612efe600484613acf565b612f09906040613af8565b64ffffffffff169050610dad84821b612e7c565b606082471015612f7e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611358565b5f5f866001600160a01b03168587604051612f999190613822565b5f6040518083038185875af1925050503d805f8114612fd3576040519150601f19603f3d011682016040523d82523d5f602084013e612fd8565b606091505b5091509150612fe987838387612ff4565b979650505050505050565b606083156130625782515f0361305b576001600160a01b0385163b61305b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611358565b5081610dad565b610dad83838151156130775781518083602001fd5b8060405162461bcd60e51b8152600401611358919061329e565b80356001600160401b03811681146130a7575f5ffd5b919050565b5f604082840312156130bc575f5ffd5b50919050565b5f5f5f606084860312156130d4575f5ffd5b6130dd84613091565b925060208401356001600160401b038111156130f7575f5ffd5b613103868287016130ac565b92505060408401356001600160401b0381111561311e575f5ffd5b61312a868287016130ac565b9150509250925092565b5f5f83601f840112613144575f5ffd5b5081356001600160401b0381111561315a575f5ffd5b6020830191508360208260051b8501011115613174575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60a0898b031215613192575f5ffd5b61319b89613091565b975060208901356001600160401b038111156131b5575f5ffd5b6131c18b828c016130ac565b97505060408901356001600160401b038111156131dc575f5ffd5b6131e88b828c01613134565b90975095505060608901356001600160401b03811115613206575f5ffd5b6132128b828c01613134565b90955093505060808901356001600160401b03811115613230575f5ffd5b61323c8b828c01613134565b999c989b5096995094979396929594505050565b5f60208284031215613260575f5ffd5b61326982613091565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6132696020830184613270565b5f5f83601f8401126132c0575f5ffd5b5081356001600160401b038111156132d6575f5ffd5b602083019150836020828501011115613174575f5ffd5b5f5f602083850312156132fe575f5ffd5b82356001600160401b03811115613313575f5ffd5b61331f858286016132b0565b90969095509350505050565b634e487b7160e01b5f52602160045260245ffd5b6003811061335b57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610ca1828461333f565b5f6020828403121561337d575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b03604084015116604083015260608301516133d0606084018261333f565b5092915050565b80151581146133e4575f5ffd5b50565b5f602082840312156133f7575f5ffd5b8135613269816133d7565b5f5f5f5f5f60608688031215613416575f5ffd5b85356001600160401b0381111561342b575f5ffd5b613437888289016132b0565b90965094505060208601356001600160401b03811115613455575f5ffd5b613461888289016132b0565b96999598509660400135949350505050565b6001600160a01b03811681146133e4575f5ffd5b80356130a781613473565b5f5f604083850312156134a3575f5ffd5b82356134ae81613473565b946020939093013593505050565b5f602082840312156134cc575f5ffd5b813561326981613473565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613513576135136134d7565b604052919050565b5f6001600160401b03821115613533576135336134d7565b5060051b60200190565b5f82601f83011261354c575f5ffd5b813561355f61355a8261351b565b6134eb565b8082825260208201915060208360051b860101925085831115613580575f5ffd5b602085015b8381101561359d578035835260209283019201613585565b5095945050505050565b5f5f5f606084860312156135b9575f5ffd5b83356001600160401b038111156135ce575f5ffd5b8401601f810186136135de575f5ffd5b80356135ec61355a8261351b565b8082825260208201915060208360051b85010192508883111561360d575f5ffd5b6020840193505b8284101561363857833561362781613473565b825260209384019390910190613614565b955050505060208401356001600160401b03811115613655575f5ffd5b6136618682870161353d565b92505061367060408501613487565b90509250925092565b5f5f5f6040848603121561368b575f5ffd5b83356001600160401b038111156136a0575f5ffd5b6136ac868287016130ac565b93505060208401356001600160401b038111156136c7575f5ffd5b6136d386828701613134565b9497909650939450505050565b5f602082840312156136f0575f5ffd5b8151613269816133d7565b5f5f8335601e19843603018112613710575f5ffd5b8301803591506001600160401b03821115613729575f5ffd5b6020019150600581901b3603821315613174575f5ffd5b5f5f8335601e19843603018112613755575f5ffd5b8301803591506001600160401b0382111561376e575f5ffd5b602001915036819003821315613174575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156137a6575f5ffd5b813564ffffffffff81168114613269575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ca157610ca16137ba565b8082028115828204841417610ca157610ca16137ba565b81810381811115610ca157610ca16137ba565b5f81518060208401855e5f93019283525090919050565b5f613269828461380b565b5f6020828403121561383d575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f61387f60808301888a613844565b82810360208401526138918188613270565b905082810360408401526138a6818688613844565b915050826060830152979650505050505050565b602081525f610dad602083018486613844565b634e487b7160e01b5f52601260045260245ffd5b5f826138ef576138ef6138cd565b500490565b6001600160401b038281168282160390811115610ca157610ca16137ba565b5f8235605e19833603018112613927575f5ffd5b9190910192915050565b5f62ffffff821680613945576139456137ba565b5f190192915050565b6001600160401b038181168382160190811115610ca157610ca16137ba565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff1982121715610ca157610ca16137ba565b805160208083015191908110156130bc575f1960209190910360031b1b16919050565b5f600182016139d0576139d06137ba565b5060010190565b5f6139e2828561380b565b6001600160801b03199390931683525050601001919050565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff82131715610ca157610ca16137ba565b5f81613a3857613a386137ba565b505f190190565b5f8160070b677fffffffffffffff198103613a5c57613a5c6137ba565b5f0392915050565b8082025f8212600160ff1b84141615613a7f57613a7f6137ba565b8181058314821517610ca157610ca16137ba565b5f64ffffffffff831680613aa957613aa96138cd565b8064ffffffffff84160491505092915050565b5f82613aca57613aca6138cd565b500690565b5f64ffffffffff831680613ae557613ae56138cd565b8064ffffffffff84160691505092915050565b64ffffffffff81811683821602908116908181146133d0576133d06137ba56fea2646970667358221220ee8944e7c6eeceaf312bcc5ef6ae6ca9651a38d06a553df7177cd8b7b1cb273264736f6c634300081b003300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa00000000000000000000000091e677b07f7af907ec9a428aafa9fc14a0d3a338000000000000000000000000000000000000000000000000000000005fc6305700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005312e332e30000000000000000000000000000000000000000000000000000000