0 txs
3.3k calls
constructor
constructor((address delegationManager, address strategyManager, address allocationManager, address pauserRegistry, address permissionController, uint32 CALCULATION_INTERVAL_SECONDS, uint32 MAX_REWARDS_DURATION, uint32 MAX_RETROACTIVE_LENGTH, uint32 MAX_FUTURE_LENGTH, uint32 GENESIS_REWARDS_TIMESTAMP, string version) params)
functions
activationDelay
viewfunction activationDelay() view returns (uint32)
allocationManager
viewfunction allocationManager() view returns (address)
beaconChainETHStrategy
viewfunction beaconChainETHStrategy() view returns (address)
calculateEarnerLeafHash
purefunction calculateEarnerLeafHash(tuple leaf) pure returns (bytes32)
calculateTokenLeafHash
purefunction calculateTokenLeafHash(tuple leaf) pure returns (bytes32)
CALCULATION_INTERVAL_SECONDS
viewfunction CALCULATION_INTERVAL_SECONDS() view returns (uint32)
checkClaim
viewfunction checkClaim(tuple claim) view returns (bool)
claimerFor
viewfunction claimerFor(address earner) view returns (address claimer)
cumulativeClaimed
viewfunction cumulativeClaimed(address earner, address token) view returns (uint256 totalClaimed)
currRewardsCalculationEndTimestamp
viewfunction currRewardsCalculationEndTimestamp() view returns (uint32)
defaultOperatorSplitBips
viewfunction defaultOperatorSplitBips() view returns (uint16)
delegationManager
viewfunction delegationManager() view returns (address)
GENESIS_REWARDS_TIMESTAMP
viewfunction GENESIS_REWARDS_TIMESTAMP() view returns (uint32)
getCurrentClaimableDistributionRoot
viewfunction getCurrentClaimableDistributionRoot() view returns (tuple)
getCurrentDistributionRoot
viewfunction getCurrentDistributionRoot() view returns (tuple)
getDistributionRootAtIndex
viewfunction getDistributionRootAtIndex(uint256 index) view returns (tuple)
getDistributionRootsLength
viewfunction getDistributionRootsLength() view returns (uint256)
getOperatorAVSSplit
viewfunction getOperatorAVSSplit(address operator, address avs) view returns (uint16)
getOperatorPISplit
viewfunction getOperatorPISplit(address operator) view returns (uint16)
getOperatorSetSplit
viewfunction getOperatorSetSplit(address operator, tuple operatorSet) view returns (uint16)
getRootIndexFromHash
viewfunction getRootIndexFromHash(bytes32 rootHash) view returns (uint32)
isAVSRewardsSubmissionHash
viewfunction isAVSRewardsSubmissionHash(address avs, bytes32 hash) view returns (bool valid)
isOperatorDirectedAVSRewardsSubmissionHash
viewfunction isOperatorDirectedAVSRewardsSubmissionHash(address avs, bytes32 hash) view returns (bool valid)
isOperatorDirectedOperatorSetRewardsSubmissionHash
viewfunction isOperatorDirectedOperatorSetRewardsSubmissionHash(address avs, bytes32 hash) view returns (bool valid)
isRewardsForAllSubmitter
viewfunction isRewardsForAllSubmitter(address submitter) view returns (bool valid)
isRewardsSubmissionForAllEarnersHash
viewfunction isRewardsSubmissionForAllEarnersHash(address avs, bytes32 hash) view returns (bool valid)
isRewardsSubmissionForAllHash
viewfunction isRewardsSubmissionForAllHash(address avs, bytes32 hash) view returns (bool valid)
MAX_FUTURE_LENGTH
viewfunction MAX_FUTURE_LENGTH() view returns (uint32)
MAX_RETROACTIVE_LENGTH
viewfunction MAX_RETROACTIVE_LENGTH() view returns (uint32)
MAX_REWARDS_DURATION
viewfunction MAX_REWARDS_DURATION() view returns (uint32)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (uint256)
paused
viewfunction paused(uint8 index) view returns (bool)
pauserRegistry
viewfunction pauserRegistry() view returns (address)
permissionController
viewfunction permissionController() view returns (address)
rewardsUpdater
viewfunction rewardsUpdater() view returns (address)
strategyManager
viewfunction strategyManager() view returns (address)
submissionNonce
viewfunction submissionNonce(address avs) view returns (uint256 nonce)
version
viewfunction version() view returns (string)
createAVSRewardsSubmission
nonpayablefunction createAVSRewardsSubmission(tuple[] rewardsSubmissions)
createOperatorDirectedAVSRewardsSubmission
nonpayablefunction createOperatorDirectedAVSRewardsSubmission(address avs, tuple[] operatorDirectedRewardsSubmissions)
createOperatorDirectedOperatorSetRewardsSubmission
nonpayablefunction createOperatorDirectedOperatorSetRewardsSubmission(tuple operatorSet, tuple[] operatorDirectedRewardsSubmissions)
createRewardsForAllEarners
nonpayablefunction createRewardsForAllEarners(tuple[] rewardsSubmissions)
createRewardsForAllSubmission
nonpayablefunction createRewardsForAllSubmission(tuple[] rewardsSubmissions)
disableRoot
nonpayablefunction disableRoot(uint32 rootIndex)
initialize
nonpayablefunction initialize(address initialOwner, uint256 initialPausedStatus, address _rewardsUpdater, uint32 _activationDelay, uint16 _defaultSplitBips)
pause
nonpayablefunction pause(uint256 newPausedStatus)
pauseAll
nonpayablefunction pauseAll()
processClaim
nonpayablefunction processClaim(tuple claim, address recipient)
processClaims
nonpayablefunction processClaims(tuple[] claims, address recipient)
renounceOwnership
nonpayablefunction renounceOwnership()
setActivationDelay
nonpayablefunction setActivationDelay(uint32 _activationDelay)
setClaimerFor
nonpayablefunction setClaimerFor(address claimer)
setClaimerFor
nonpayablefunction setClaimerFor(address earner, address claimer)
setDefaultOperatorSplit
nonpayablefunction setDefaultOperatorSplit(uint16 split)
setOperatorAVSSplit
nonpayablefunction setOperatorAVSSplit(address operator, address avs, uint16 split)
setOperatorPISplit
nonpayablefunction setOperatorPISplit(address operator, uint16 split)
setOperatorSetSplit
nonpayablefunction setOperatorSetSplit(address operator, tuple operatorSet, uint16 split)
setRewardsForAllSubmitter
nonpayablefunction setRewardsForAllSubmitter(address _submitter, bool _newValue)
setRewardsUpdater
nonpayablefunction setRewardsUpdater(address _rewardsUpdater)
submitRoot
nonpayablefunction submitRoot(bytes32 root, uint32 rewardsCalculationEndTimestamp)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause(uint256 newPausedStatus)
events
ActivationDelaySet
event ActivationDelaySet(uint32 oldActivationDelay, uint32 newActivationDelay)
AVSRewardsSubmissionCreated
event AVSRewardsSubmissionCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address strategy, uint96 multiplier)[] strategiesAndMultipliers, address token, uint256 amount, uint32 startTimestamp, uint32 duration) rewardsSubmission)
ClaimerForSet
event ClaimerForSet(address indexed earner, address indexed oldClaimer, address indexed claimer)
DefaultOperatorSplitBipsSet
event DefaultOperatorSplitBipsSet(uint16 oldDefaultOperatorSplitBips, uint16 newDefaultOperatorSplitBips)
DistributionRootDisabled
event DistributionRootDisabled(uint32 indexed rootIndex)
DistributionRootSubmitted
event DistributionRootSubmitted(uint32 indexed rootIndex, bytes32 indexed root, uint32 indexed rewardsCalculationEndTimestamp, uint32 activatedAt)
Initialized
event Initialized(uint8 version)
OperatorAVSSplitBipsSet
event OperatorAVSSplitBipsSet(address indexed caller, address indexed operator, address indexed avs, uint32 activatedAt, uint16 oldOperatorAVSSplitBips, uint16 newOperatorAVSSplitBips)
OperatorDirectedAVSRewardsSubmissionCreated
event OperatorDirectedAVSRewardsSubmissionCreated(address indexed caller, address indexed avs, bytes32 indexed operatorDirectedRewardsSubmissionHash, uint256 submissionNonce, ((address strategy, uint96 multiplier)[] strategiesAndMultipliers, address token, (address operator, uint256 amount)[] operatorRewards, uint32 startTimestamp, uint32 duration, string description) operatorDirectedRewardsSubmission)
OperatorDirectedOperatorSetRewardsSubmissionCreated
event OperatorDirectedOperatorSetRewardsSubmissionCreated(address indexed caller, bytes32 indexed operatorDirectedRewardsSubmissionHash, (address avs, uint32 id) operatorSet, uint256 submissionNonce, ((address strategy, uint96 multiplier)[] strategiesAndMultipliers, address token, (address operator, uint256 amount)[] operatorRewards, uint32 startTimestamp, uint32 duration, string description) operatorDirectedRewardsSubmission)
OperatorPISplitBipsSet
event OperatorPISplitBipsSet(address indexed caller, address indexed operator, uint32 activatedAt, uint16 oldOperatorPISplitBips, uint16 newOperatorPISplitBips)
OperatorSetSplitBipsSet
event OperatorSetSplitBipsSet(address indexed caller, address indexed operator, (address avs, uint32 id) operatorSet, uint32 activatedAt, uint16 oldOperatorSetSplitBips, uint16 newOperatorSetSplitBips)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address indexed account, uint256 newPausedStatus)
RewardsClaimed
event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount)
RewardsForAllSubmitterSet
event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue)
RewardsSubmissionForAllCreated
event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address strategy, uint96 multiplier)[] strategiesAndMultipliers, address token, uint256 amount, uint32 startTimestamp, uint32 duration) rewardsSubmission)
RewardsSubmissionForAllEarnersCreated
event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address strategy, uint96 multiplier)[] strategiesAndMultipliers, address token, uint256 amount, uint32 startTimestamp, uint32 duration) rewardsSubmission)
RewardsUpdaterSet
event RewardsUpdaterSet(address indexed oldRewardsUpdater, address indexed newRewardsUpdater)
Unpaused
event Unpaused(address indexed account, uint256 newPausedStatus)
errors
AmountExceedsMax
error AmountExceedsMax()
AmountIsZero
error AmountIsZero()
CurrentlyPaused
error CurrentlyPaused()
DurationExceedsMax
error DurationExceedsMax()
DurationIsZero
error DurationIsZero()
EarningsNotGreaterThanClaimed
error EarningsNotGreaterThanClaimed()
InputAddressZero
error InputAddressZero()
InputArrayLengthMismatch
error InputArrayLengthMismatch()
InputArrayLengthZero
error InputArrayLengthZero()
InvalidAddressZero
error InvalidAddressZero()
InvalidCalculationIntervalSecondsRemainder
error InvalidCalculationIntervalSecondsRemainder()
InvalidClaimProof
error InvalidClaimProof()
InvalidDurationRemainder
error InvalidDurationRemainder()
InvalidEarner
error InvalidEarner()
InvalidEarnerLeafIndex
error InvalidEarnerLeafIndex()
InvalidGenesisRewardsTimestampRemainder
error InvalidGenesisRewardsTimestampRemainder()
InvalidNewPausedStatus
error InvalidNewPausedStatus()
InvalidOperatorSet
error InvalidOperatorSet()
InvalidPermissions
error InvalidPermissions()
InvalidProofLength
error InvalidProofLength()
InvalidRoot
error InvalidRoot()
InvalidRootIndex
error InvalidRootIndex()
InvalidShortString
error InvalidShortString()
InvalidStartTimestampRemainder
error InvalidStartTimestampRemainder()
InvalidTokenLeafIndex
error InvalidTokenLeafIndex()
NewRootMustBeForNewCalculatedPeriod
error NewRootMustBeForNewCalculatedPeriod()
OnlyPauser
error OnlyPauser()
OnlyUnpauser
error OnlyUnpauser()
OperatorsNotInAscendingOrder
error OperatorsNotInAscendingOrder()
PreviousSplitPending
error PreviousSplitPending()
RewardsEndTimestampNotElapsed
error RewardsEndTimestampNotElapsed()
RootAlreadyActivated
error RootAlreadyActivated()
RootDisabled
error RootDisabled()
RootNotActivated
error RootNotActivated()
SplitExceedsMax
error SplitExceedsMax()
StartTimestampTooFarInFuture
error StartTimestampTooFarInFuture()
StartTimestampTooFarInPast
error StartTimestampTooFarInPast()
StrategiesNotInAscendingOrder
error StrategiesNotInAscendingOrder()
StrategyNotWhitelisted
error StrategyNotWhitelisted()
StringTooLong
error StringTooLong(string str)
SubmissionNotRetroactive
error SubmissionNotRetroactive()
UnauthorizedCaller
error UnauthorizedCaller()
creation bytecode
0x6101e0604052348015610010575f5ffd5b50604051614d61380380614d6183398101604081905261002f9161034a565b610140810151608082015182516020840151604085015160a086015160c087015160e08801516101008901516101208a015160608b01516001600160a01b03811661008d576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03166080526100a38582610465565b63ffffffff16156100c757604051630e06bd3160e01b815260040160405180910390fd5b6100d46201518086610465565b63ffffffff16156100f85760405163223c7b3960e11b815260040160405180910390fd5b6001600160a01b0397881660a05295871660c05293861660e05263ffffffff9283166101005290821661012052811661014052908116610160521661018052166101a05261014581610158565b6101c0525061015261019e565b506104f3565b5f5f829050601f8151111561018b578260405163305a27a960e01b81526004016101829190610498565b60405180910390fd5b8051610196826104cd565b179392505050565b5f54610100900460ff16156102055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610182565b5f5460ff90811614610254575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b038111828210171561028d5761028d610256565b60405290565b80516001600160a01b03811681146102a9575f5ffd5b919050565b805163ffffffff811681146102a9575f5ffd5b5f82601f8301126102d0575f5ffd5b81516001600160401b038111156102e9576102e9610256565b604051601f8201601f19908116603f011681016001600160401b038111828210171561031757610317610256565b60405281815283820160200185101561032e575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561035a575f5ffd5b81516001600160401b0381111561036f575f5ffd5b82016101608185031215610381575f5ffd5b61038961026a565b61039282610293565b81526103a060208301610293565b60208201526103b160408301610293565b60408201526103c260608301610293565b60608201526103d360808301610293565b60808201526103e460a083016102ae565b60a08201526103f560c083016102ae565b60c082015261040660e083016102ae565b60e082015261041861010083016102ae565b61010082015261042b61012083016102ae565b6101208201526101408201516001600160401b0381111561044a575f5ffd5b610456868285016102c1565b61014083015250949350505050565b5f63ffffffff83168061048657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160691505092915050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156104ed575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c05161478c6105d55f395f6114b901525f81816105f001526127d101525f81816104a401526135db01525f81816103f30152612c1301525f8181610552015261359901525f818161087e015261348301525f81816107bf015281816134d3015261354701525f81816108d201528181610afb01528181611e2601526120d201525f8181610579015261367601525f81816109450152611d9601525f818161075101528181610ed90152818161150b01526123b1015261478c5ff3fe608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613bb9565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613c31565b610a7f565b005b610447610d44565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613c8d565b610e44565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b61043d6104d4366004613cc4565b610ec4565b6104ec6104e7366004613cdb565b610f99565b6040519081526020016103e5565b610522610508366004613bb9565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613cf5565b61100e565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613d44565b61119d565b61043d6105d3366004613d9a565b6111e2565b61043d6105e6366004613dc4565b6113d6565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b610625610620366004613bb9565b611457565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b6106576114b2565b6040516103e59190613e16565b61043d610672366004613e4b565b6114e2565b61043d6114f6565b6103d961068d366004613e64565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613e84565b6115a5565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613eb5565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611630565b60ca546104ec565b61043d61071d366004613bb9565b611641565b6104ec610730366004613edf565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611652565b61043d6107b5366004613f0b565b6116ee565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6106256107ef366004613f42565b611887565b61043d610802366004613bb9565b61190a565b61043d610815366004613f7e565b611915565b6103d9610828366004613eb5565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613f97565b611926565b6104ec610868366004613bb9565b60ce6020525f908152604090205481565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6103d96108ae366004613eb5565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b61043d610902366004613fc1565b611a6f565b610447610915366004613cc4565b611bda565b610625610928366004613edf565b611c6a565b61041561093b366004613cc4565b611ccf565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6103d9610975366004613eb5565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613edf565b611d50565b6103d96109b5366004613eb5565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613bb9565b611eba565b61043d6109f5366004614005565b611f35565b61043d610a08366004614063565b61206a565b6104ec610a1b366004613cdb565b612250565b61043d610a2e366004613e4b565b612260565b61043d610a41366004613cc4565b6123af565b60cb54610522906001600160a01b031681565b61043d610a67366004613cf5565b6124c5565b61043d610a7a366004613cf5565b612614565b60665460099061020090811603610aa95760405163840a48d560e01b815260040160405180910390fd5b610ab66020850185613bb9565b610abf81612793565b610adc5760405163932d94f760e01b815260040160405180910390fd5b610ae461283d565b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610b309088906004016140ce565b602060405180830381865afa158015610b4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6f91906140dc565b610b8c57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d325736858583818110610ba957610ba96140f7565b9050602002810190610bbb919061410b565b90505f60ce81610bce60208b018b613bb9565b6001600160a01b031681526020808201929092526040015f90812054925090610bf9908a018a613bb9565b8284604051602001610c0d93929190614333565b6040516020818303038152906040528051906020012090505f610c2f84612896565b9050600160d75f610c4360208e018e613bb9565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c82836001614376565b60ce5f610c9260208e018e613bb9565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cf393929190614389565b60405180910390a3610d22333083610d116040890160208a01613bb9565b6001600160a01b0316929190612a81565b505060019092019150610b8e9050565b50610d3d6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610e1c575f60ca610d7f6001846143ae565b81548110610d8f57610d8f6140f7565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610dfe5750806040015163ffffffff164210155b15610e095792915050565b5080610e14816143c1565b915050610d6b565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e4c612aec565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610f26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4a91906140dc565b610f6757604051631d77d47760e21b815260040160405180910390fd5b6066548181168114610f8c5760405163c61dca5d60e01b815260040160405180910390fd5b610f9582612b46565b5050565b5f80610fa86020840184613bb9565b8360200135604051602001610ff19392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6066546001906002908116036110375760405163840a48d560e01b815260040160405180910390fd5b335f90815260d1602052604090205460ff1661106657604051635c427cd960e01b815260040160405180910390fd5b61106e61283d565b5f5b8281101561118d573684848381811061108b5761108b6140f7565b905060200281019061109d91906143d6565b335f81815260ce602090815260408083205490519495509391926110c79290918591879101614468565b6040516020818303038152906040528051906020012090506110e883612b83565b335f90815260d0602090815260408083208484529091529020805460ff1916600190811790915561111a908390614376565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061116190889061448e565b60405180910390a4611182333060408601803590610d119060208901613bb9565b505050600101611070565b506111986001609755565b505050565b6066546002906004908116036111c65760405163840a48d560e01b815260040160405180910390fd5b6111ce61283d565b6111d88383612c6e565b6111986001609755565b60665460039060089081160361120b5760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b0316331461123657604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161126957604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061128f576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f906112ae90600160a01b900463ffffffff16426144a0565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6066546002906004908116036113ff5760405163840a48d560e01b815260040160405180910390fd5b61140761283d565b5f5b838110156114465761143e858583818110611426576114266140f7565b905060200281019061143891906144bc565b84612c6e565b600101611409565b506114516001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff16908201526114ac90612ef6565b92915050565b60606114dd7f0000000000000000000000000000000000000000000000000000000000000000612f66565b905090565b6114ea612aec565b6114f381612fa3565b50565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611558573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157c91906140dc565b61159957604051631d77d47760e21b815260040160405180910390fd5b6115a35f19612b46565b565b5f6116288260ca6115b96020830183613e4b565b63ffffffff16815481106115cf576115cf6140f7565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152613014565b506001919050565b611638612aec565b6115a35f6131b7565b611649612aec565b6114f381613208565b604080516080810182525f80825260208201819052918101829052606081019190915260ca8054611685906001906143ae565b81548110611695576116956140f7565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b6066546005906020908116036117175760405163840a48d560e01b815260040160405180910390fd5b8361172181612793565b61173e5760405163932d94f760e01b815260040160405180910390fd5b61174661283d565b5f5b83811015610d325736858583818110611763576117636140f7565b9050602002810190611775919061410b565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926117a6918b918591879101614333565b6040516020818303038152906040528051906020012090505f6117c884612896565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff19166001908117909155909150611806908490614376565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e0906118599088908a906144d0565b60405180910390a4611877333083610d116040890160208a01613bb9565b5050600190920191506117489050565b6001600160a01b0382165f90815260d66020526040812061190390826118ba6118b5368790038701876144e8565b613263565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612ef6565b9392505050565b33610f9581836132c6565b61191d612aec565b6114f381613329565b60665460079060809081160361194f5760405163840a48d560e01b815260040160405180910390fd5b8261195981612793565b6119765760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061199290600160a01b900463ffffffff16426144a0565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906119eb90612ef6565b6001600160a01b0387165f90815260d560205260409020909150611a10908684613394565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b606654600690604090811603611a985760405163840a48d560e01b815260040160405180910390fd5b83611aa281612793565b611abf5760405163932d94f760e01b815260040160405180910390fd5b60cb545f90611adb90600160a01b900463ffffffff16426144a0565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff1692810192909252919250611b4290612ef6565b6001600160a01b038089165f90815260d460209081526040808320938b16835292905220909150611b74908684613394565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca8281548110611c1057611c106140f7565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061190390612ef6565b60ca545f905b63ffffffff811615611d36578260ca611cef600184614550565b63ffffffff1681548110611d0557611d056140f7565b905f5260205f2090600202015f015403611d2457611903600182614550565b80611d2e8161456c565b915050611cd5565b5060405163504570e360e01b815260040160405180910390fd5b81611d5a81612793565b611d775760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611ddb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dff91906140dc565b80611e93575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063ba1a84e590602401602060405180830381865afa158015611e6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e91919061458a565b115b611eb05760405163fb494ea160e01b815260040160405180910390fd5b61119883836132c6565b611ec2612aec565b6001600160a01b038116611f2c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6114f3816131b7565b5f54610100900460ff1615808015611f5357505f54600160ff909116105b80611f6c5750303b158015611f6c57505f5460ff166001145b611fcf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611f23565b5f805460ff191660011790558015611ff0575f805461ff0019166101001790555b611ff985612b46565b612002866131b7565b61200b84613208565b61201483612fa3565b61201d82613329565b8015612062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b606654600890610100908116036120945760405163840a48d560e01b815260040160405180910390fd5b8361209e81612793565b6120bb5760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc758906121079087906004016140ce565b602060405180830381865afa158015612122573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061214691906140dc565b61216357604051631fb1705560e21b815260040160405180910390fd5b60cb545f9061217f90600160a01b900463ffffffff16426144a0565b6001600160a01b0387165f90815260d660205260408120919250906121b190826118ba6118b5368b90038b018b6144e8565b6001600160a01b0388165f90815260d6602052604081209192506121f691906121e26118b5368b90038b018b6144e8565b81526020019081526020015f208684613394565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a60405161223f94939291906145a1565b60405180910390a350505050505050565b5f6001610fa86020840184613bb9565b6066546003906008908116036122895760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146122b457604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff8316106122dc576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff16815481106122f6576122f66140f7565b905f5260205f20906002020190508060010160089054906101000a900460ff161561233457604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061236557604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561240b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061242f91906145d5565b6001600160a01b0316336001600160a01b0316146124605760405163794821ff60e01b815260040160405180910390fd5b606654801982198116146124875760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b6066545f906001908116036124ed5760405163840a48d560e01b815260040160405180910390fd5b6124f561283d565b5f5b8281101561118d5736848483818110612512576125126140f7565b905060200281019061252491906143d6565b335f81815260ce6020908152604080832054905194955093919261254e9290918591879101614468565b60405160208183030381529060405280519060200120905061256f83612b83565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556125a1908390614376565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906125e890889061448e565b60405180910390a4612609333060408601803590610d119060208901613bb9565b5050506001016124f7565b60665460049060109081160361263d5760405163840a48d560e01b815260040160405180910390fd5b335f90815260d1602052604090205460ff1661266c57604051635c427cd960e01b815260040160405180910390fd5b61267461283d565b5f5b8281101561118d5736848483818110612691576126916140f7565b90506020028101906126a391906143d6565b335f81815260ce602090815260408083205490519495509391926126cd9290918591879101614468565b6040516020818303038152906040528051906020012090506126ee83612b83565b335f90815260d2602090815260408083208484529091529020805460ff19166001908117909155612720908390614376565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061276790889061448e565b60405180910390a4612788333060408601803590610d119060208901613bb9565b505050600101612676565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af1158015612819573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ac91906140dc565b60026097540361288f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611f23565b6002609755565b5f6128c96128a483806145f0565b6128b46080860160608701613e4b565b6128c460a0870160808801613e4b565b613463565b5f6128d760408401846145f0565b9050116128f75760405163796cc52560e01b815260040160405180910390fd5b4261290860a0840160808501613e4b565b6129186080850160608601613e4b565b61292291906144a0565b63ffffffff16106129465760405163150358a160e21b815260040160405180910390fd5b5f80805b61295760408601866145f0565b9050811015612a48573661296e60408701876145f0565b8381811061297e5761297e6140f7565b6040029190910191505f90506129976020830183613bb9565b6001600160a01b0316036129be57604051630863a45360e11b815260040160405180910390fd5b6129cb6020820182613bb9565b6001600160a01b0316836001600160a01b0316106129fc576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612a20576040516310eb483f60e21b815260040160405180910390fd5b612a2d6020820182613bb9565b9250612a3d602082013585614376565b93505060010161294a565b506f4b3b4ca85a86c47a098a223fffffffff821115612a7a5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b03808516602483015283166044820152606481018290526114519085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613761565b6033546001600160a01b031633146115a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611f23565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612bb0612b9082806145f0565b612ba06080850160608601613e4b565b6128c460a0860160808701613e4b565b5f816040013511612bd4576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff81604001351115612c095760405163070b5a6f60e21b815260040160405180910390fd5b612c3963ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614376565b612c496080830160608401613e4b565b63ffffffff1611156114f357604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612c7e6020850185613e4b565b63ffffffff1681548110612c9457612c946140f7565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612cf48382613014565b5f612d056080850160608601613bb9565b6001600160a01b038082165f90815260cc60205260409020549192501680612d2a5750805b336001600160a01b03821614612d5357604051635c427cd960e01b815260040160405180910390fd5b5f5b612d6260a0870187614635565b90508110156120625736612d7960e08801886145f0565b83818110612d8957612d896140f7565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612dbd90850185613bb9565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612e035760405163aa385e8160e01b815260040160405180910390fd5b5f612e128260208501356143ae565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612e3f9087613bb9565b6001600160a01b031681526020808201929092526040015f2091909155612e809089908390612e7090870187613bb9565b6001600160a01b03169190613834565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612ec46020890189613bb9565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612d55565b5f816040015163ffffffff165f1480612f285750815161ffff908116148015612f285750816040015163ffffffff1642105b15612f4057505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612f595781516114ac565b506020015190565b919050565b60605f612f7283613864565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b80606001511561303757604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff1642101561306257604051631437a2bb60e31b815260040160405180910390fd5b61306f60c0830183614635565b905061307e60a0840184614635565b90501461309e576040516343714afd60e01b815260040160405180910390fd5b6130ab60e08301836145f0565b90506130ba60c0840184614635565b9050146130da576040516343714afd60e01b815260040160405180910390fd5b8051613106906130f06040850160208601613e4b565b6130fd604086018661467a565b8660600161388b565b5f5b61311560a0840184614635565b9050811015611198576131af608084013561313360a0860186614635565b84818110613143576131436140f7565b90506020020160208101906131589190613e4b565b61316560c0870187614635565b85818110613175576131756140f7565b9050602002810190613187919061467a565b61319460e08901896145f0565b878181106131a4576131a46140f7565b90506040020161392f565b600101613108565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff166040516020016132ae92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526114ac906146bc565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156133bb5760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff1642116133e957604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361341057825461ffff191661ffff178355613427565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b826134815760405163796cc52560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1611156134ce57604051630dd0b9f560e21b815260040160405180910390fd5b6134f87f0000000000000000000000000000000000000000000000000000000000000000826146f3565b63ffffffff161561351c5760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116135425760405163cb3f434d60e01b815260040160405180910390fd5b61356c7f0000000000000000000000000000000000000000000000000000000000000000836146f3565b63ffffffff161561359057604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426135c991906143ae565b1115801561360357508163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6136205760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015612062575f86868381811061363e5761363e6140f7565b6136549260206040909202019081019150613bb9565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa1580156136bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136e191906140dc565b8061370857506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61372557604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106137575760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613623565b5f6137b5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661396d9092919063ffffffff16565b905080515f14806137d55750808060200190518101906137d591906140dc565b6111985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611f23565b6040516001600160a01b03831660248201526044810182905261119890849063a9059cbb60e01b90606401612ab5565b5f60ff8216601f8111156114ac57604051632cd44ac360e21b815260040160405180910390fd5b61389660208361471a565b6001901b8463ffffffff16106138be5760405162c6c39d60e71b815260040160405180910390fd5b5f6138c882610f99565b905061391284848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff8916613983565b612062576040516369ca16c960e01b815260040160405180910390fd5b61393a60208361471a565b6001901b8463ffffffff16106139635760405163054ff4df60e51b815260040160405180910390fd5b5f6138c882612250565b606061397b84845f8561399a565b949350505050565b5f83613990868585613a71565b1495945050505050565b6060824710156139fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611f23565b5f5f866001600160a01b03168587604051613a16919061472d565b5f6040518083038185875af1925050503d805f8114613a50576040519150601f19603f3d011682016040523d82523d5f602084013e613a55565b606091505b5091509150613a6687838387613b08565b979650505050505050565b5f60208451613a809190614743565b15613a9e576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613aff57613ab5600285614743565b5f03613ad657815f528086015160205260405f209150600284049350613aed565b808601515f528160205260405f2091506002840493505b613af8602082614376565b9050613aa2565b50949350505050565b60608315613b765782515f03613b6f576001600160a01b0385163b613b6f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611f23565b508161397b565b61397b8383815115613b8b5781518083602001fd5b8060405162461bcd60e51b8152600401611f239190613e16565b6001600160a01b03811681146114f3575f5ffd5b5f60208284031215613bc9575f5ffd5b813561190381613ba5565b5f60408284031215613be4575f5ffd5b50919050565b5f5f83601f840112613bfa575f5ffd5b5081356001600160401b03811115613c10575f5ffd5b6020830191508360208260051b8501011115613c2a575f5ffd5b9250929050565b5f5f5f60608486031215613c43575f5ffd5b613c4d8585613bd4565b925060408401356001600160401b03811115613c67575f5ffd5b613c7386828701613bea565b9497909650939450505050565b80151581146114f3575f5ffd5b5f5f60408385031215613c9e575f5ffd5b8235613ca981613ba5565b91506020830135613cb981613c80565b809150509250929050565b5f60208284031215613cd4575f5ffd5b5035919050565b5f60408284031215613ceb575f5ffd5b6119038383613bd4565b5f5f60208385031215613d06575f5ffd5b82356001600160401b03811115613d1b575f5ffd5b613d2785828601613bea565b90969095509350505050565b5f6101008284031215613be4575f5ffd5b5f5f60408385031215613d55575f5ffd5b82356001600160401b03811115613d6a575f5ffd5b613d7685828601613d33565b9250506020830135613cb981613ba5565b803563ffffffff81168114612f61575f5ffd5b5f5f60408385031215613dab575f5ffd5b82359150613dbb60208401613d87565b90509250929050565b5f5f5f60408486031215613dd6575f5ffd5b83356001600160401b03811115613deb575f5ffd5b613df786828701613bea565b9094509250506020840135613e0b81613ba5565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613e5b575f5ffd5b61190382613d87565b5f60208284031215613e74575f5ffd5b813560ff81168114611903575f5ffd5b5f60208284031215613e94575f5ffd5b81356001600160401b03811115613ea9575f5ffd5b61397b84828501613d33565b5f5f60408385031215613ec6575f5ffd5b8235613ed181613ba5565b946020939093013593505050565b5f5f60408385031215613ef0575f5ffd5b8235613efb81613ba5565b91506020830135613cb981613ba5565b5f5f5f60408486031215613f1d575f5ffd5b8335613f2881613ba5565b925060208401356001600160401b03811115613c67575f5ffd5b5f5f60608385031215613f53575f5ffd5b8235613f5e81613ba5565b9150613dbb8460208501613bd4565b803561ffff81168114612f61575f5ffd5b5f60208284031215613f8e575f5ffd5b61190382613f6d565b5f5f60408385031215613fa8575f5ffd5b8235613fb381613ba5565b9150613dbb60208401613f6d565b5f5f5f60608486031215613fd3575f5ffd5b8335613fde81613ba5565b92506020840135613fee81613ba5565b9150613ffc60408501613f6d565b90509250925092565b5f5f5f5f5f60a08688031215614019575f5ffd5b853561402481613ba5565b945060208601359350604086013561403b81613ba5565b925061404960608701613d87565b915061405760808701613f6d565b90509295509295909350565b5f5f5f60808486031215614075575f5ffd5b833561408081613ba5565b925061408f8560208601613bd4565b9150613ffc60608501613f6d565b80356140a881613ba5565b6001600160a01b0316825263ffffffff6140c460208301613d87565b1660208301525050565b604081016114ac828461409d565b5f602082840312156140ec575f5ffd5b815161190381613c80565b634e487b7160e01b5f52603260045260245ffd5b5f823560be1983360301811261411f575f5ffd5b9190910192915050565b5f5f8335601e1984360301811261413e575f5ffd5b83016020810192503590506001600160401b0381111561415c575f5ffd5b8060061b3603821315613c2a575f5ffd5b8183526020830192505f815f5b848110156141d057813561418d81613ba5565b6001600160a01b0316865260208201356bffffffffffffffffffffffff81168082146141b7575f5ffd5b602088015250604095860195919091019060010161417a565b5093949350505050565b5f5f8335601e198436030181126141ef575f5ffd5b83016020810192503590506001600160401b0381111561420d575f5ffd5b803603821315613c2a575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f61424e8283614129565b60c0855261426060c08601828461416d565b915050602083013561427181613ba5565b6001600160a01b0316602085015261428c6040840184614129565b858303604087015280835290915f91906020015b818310156142db5783356142b381613ba5565b6001600160a01b031681526020848101359082015260409384019360019390930192016142a0565b6142e760608701613d87565b63ffffffff81166060890152935061430160808701613d87565b63ffffffff81166080890152935061431c60a08701876141da565b9450925086810360a0880152613a6681858561421b565b60018060a01b0384168152826020820152606060408201525f6143596060830184614243565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156114ac576114ac614362565b614393818561409d565b826040820152608060608201525f6143596080830184614243565b818103818111156114ac576114ac614362565b5f816143cf576143cf614362565b505f190190565b5f8235609e1983360301811261411f575f5ffd5b5f6143f58283614129565b60a0855261440760a08601828461416d565b915050602083013561441881613ba5565b6001600160a01b031660208501526040838101359085015263ffffffff61444160608501613d87565b16606085015263ffffffff61445860808501613d87565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f61435960608301846143ea565b602081525f61190360208301846143ea565b63ffffffff81811683821601908111156114ac576114ac614362565b5f823560fe1983360301811261411f575f5ffd5b828152604060208201525f61397b6040830184614243565b5f60408284031280156144f9575f5ffd5b50604080519081016001600160401b038111828210171561452857634e487b7160e01b5f52604160045260245ffd5b604052823561453681613ba5565b815261454460208401613d87565b60208201529392505050565b63ffffffff82811682821603908111156114ac576114ac614362565b5f63ffffffff82168061458157614581614362565b5f190192915050565b5f6020828403121561459a575f5ffd5b5051919050565b60a081016145af828761409d565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f602082840312156145e5575f5ffd5b815161190381613ba5565b5f5f8335601e19843603018112614605575f5ffd5b8301803591506001600160401b0382111561461e575f5ffd5b6020019150600681901b3603821315613c2a575f5ffd5b5f5f8335601e1984360301811261464a575f5ffd5b8301803591506001600160401b03821115614663575f5ffd5b6020019150600581901b3603821315613c2a575f5ffd5b5f5f8335601e1984360301811261468f575f5ffd5b8301803591506001600160401b038211156146a8575f5ffd5b602001915036819003821315613c2a575f5ffd5b80516020808301519190811015613be4575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff831680614708576147086146df565b8063ffffffff84160691505092915050565b5f82614728576147286146df565b500490565b5f82518060208501845e5f920191825250919050565b5f82614751576147516146df565b50069056fea2646970667358221220d63b7f01ef92bde201fe23e3565d12efb900ef9e9ff3c2279a81e717dcb1668064736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039053d51b77dc0d36036fc1fcc8cb819df8ef37a000000000000000000000000858646372cc42e1a627fce94aa7a7033e7cf075a000000000000000000000000948a420b8cc1d6bfd0b6087c2e7c344a2cd0bc39000000000000000000000000b8765ed72235d279c3fb53936e4606db0ef1280600000000000000000000000025e5f8b1e7adf44518d35d5b2271f114e081f0e5000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000005c49000000000000000000000000000000000000000000000000000000000000dd7c000000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000065fb788000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000005312e332e30000000000000000000000000000000000000000000000000000000