0 txs
50 calls
constructor
constructor()
functions
availableBalance
viewfunction availableBalance(address token, address depositor) view returns (uint256)
balanceOf
viewfunction balanceOf(address depositor, uint256 id) view returns (uint256 balance)
balanceOfBatch
viewfunction balanceOfBatch(address[] depositors, uint256[] ids) view returns (uint256[] balances)
denylister
viewfunction denylister() view returns (address)
domain
viewfunction domain() view returns (uint32)
domainSeparator
purefunction domainSeparator() pure returns (bytes32)
EIP712_DOMAIN_TYPE_HASH
viewfunction EIP712_DOMAIN_TYPE_HASH() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
feeRecipient
viewfunction feeRecipient() view returns (address)
getTypedDataHash
viewfunction getTypedDataHash(bytes intent) view returns (bytes32)
isAuthorizedForBalance
viewfunction isAuthorizedForBalance(address token, address depositor, address addr) view returns (bool)
isBurnSigner
viewfunction isBurnSigner(address signer) view returns (bool)
isDenylisted
viewfunction isDenylisted(address addr) view returns (bool)
isTokenSupported
viewfunction isTokenSupported(address token) view returns (bool)
isTransferSpecHashUsed
viewfunction isTransferSpecHashUsed(bytes32 transferSpecHash) view returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pauser
viewfunction pauser() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
totalBalance
viewfunction totalBalance(address token, address depositor) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
withdrawableBalance
viewfunction withdrawableBalance(address token, address depositor) view returns (uint256)
withdrawalBlock
viewfunction withdrawalBlock(address token, address depositor) view returns (uint256)
withdrawalDelay
viewfunction withdrawalDelay() view returns (uint256)
withdrawingBalance
viewfunction withdrawingBalance(address token, address depositor) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addBurnSigner
nonpayablefunction addBurnSigner(address signer)
addDelegate
nonpayablefunction addDelegate(address token, address delegate)
addSupportedToken
nonpayablefunction addSupportedToken(address token)
denylist
nonpayablefunction denylist(address addr)
deposit
nonpayablefunction deposit(address token, uint256 value)
depositFor
nonpayablefunction depositFor(address token, address depositor, uint256 value)
depositWithAuthorization
nonpayablefunction depositWithAuthorization(address token, address from, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, bytes signature)
depositWithAuthorization
nonpayablefunction depositWithAuthorization(address token, address from, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, uint8 v, bytes32 r, bytes32 s)
depositWithPermit
nonpayablefunction depositWithPermit(address token, address owner, uint256 value, uint256 deadline, bytes signature)
depositWithPermit
nonpayablefunction depositWithPermit(address token, address owner, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
gatewayBurn
nonpayablefunction gatewayBurn(bytes calldataBytes, bytes signature)
initialize
nonpayablefunction initialize(address pauser_, address denylister_, address[] supportedTokens_, uint32 domain_, uint256 withdrawalDelay_, address burnSigner_, address feeRecipient_)
initiateWithdrawal
nonpayablefunction initiateWithdrawal(address token, uint256 value)
pause
nonpayablefunction pause()
removeBurnSigner
nonpayablefunction removeBurnSigner(address signer)
removeDelegate
nonpayablefunction removeDelegate(address token, address delegate)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unDenylist
nonpayablefunction unDenylist(address addr)
unpause
nonpayablefunction unpause()
updateDenylister
nonpayablefunction updateDenylister(address newDenylister)
updateFeeRecipient
nonpayablefunction updateFeeRecipient(address newFeeRecipient)
updatePauser
nonpayablefunction updatePauser(address newPauser)
updateWithdrawalDelay
nonpayablefunction updateWithdrawalDelay(uint256 newDelay)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(address token)
events
BurnSignerAdded
event BurnSignerAdded(address indexed signer)
BurnSignerRemoved
event BurnSignerRemoved(address indexed signer)
DelegateAdded
event DelegateAdded(address indexed token, address indexed depositor, address delegate)
DelegateRemoved
event DelegateRemoved(address indexed token, address indexed depositor, address delegate)
Denylisted
event Denylisted(address indexed addr)
DenylisterChanged
event DenylisterChanged(address indexed oldDenylister, address indexed newDenylister)
Deposited
event Deposited(address indexed token, address indexed depositor, address indexed sender, uint256 value)
EIP712DomainChanged
event EIP712DomainChanged()
FeeRecipientChanged
event FeeRecipientChanged(address indexed oldFeeRecipient, address indexed newFeeRecipient)
GatewayBurned
event GatewayBurned(address indexed token, address indexed depositor, bytes32 indexed transferSpecHash, uint32 destinationDomain, bytes32 destinationRecipient, address signer, uint256 value, uint256 fee, uint256 fromAvailable, uint256 fromWithdrawing)
Initialized
event Initialized(uint64 version)
InsufficientBalance
event InsufficientBalance(address indexed token, address indexed depositor, uint256 value, uint256 availableBalance, uint256 withdrawingBalance)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PauserChanged
event PauserChanged(address indexed oldPauser, address indexed newPauser)
TokenSupported
event TokenSupported(address token)
UnDenylisted
event UnDenylisted(address indexed addr)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithdrawalCompleted
event WithdrawalCompleted(address indexed token, address indexed depositor, uint256 value)
WithdrawalDelayChanged
event WithdrawalDelayChanged(uint256 indexed oldDelay, uint256 indexed newDelay)
WithdrawalInitiated
event WithdrawalInitiated(address indexed token, address indexed depositor, uint256 value, uint256 remainingAvailable, uint256 totalWithdrawing, uint256 withdrawalBlock)
errors
AccountDenylisted
error AccountDenylisted(address addr)
AddressEmptyCode
error AddressEmptyCode(address target)
BurnFeeTooHighAtIndex
error BurnFeeTooHighAtIndex(uint32 index, uint256 maxFee, uint256 actualFee)
CannotDelegateToSelf
error CannotDelegateToSelf()
CursorOutOfBounds
error CursorOutOfBounds()
DepositorIsBlacklisted
error DepositorIsBlacklisted(address depositor)
DepositValueMustBePositive
error DepositValueMustBePositive()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InputArrayLengthMismatch
error InputArrayLengthMismatch()
IntentExpiredAtIndex
error IntentExpiredAtIndex(uint32 index, uint256 maxBlockHeight, uint256 currentBlock)
IntentValueMustBePositiveAtIndex
error IntentValueMustBePositiveAtIndex(uint32 index)
InvalidAddress
error InvalidAddress()
InvalidBurnSigner
error InvalidBurnSigner()
InvalidInitialization
error InvalidInitialization()
InvalidIntentSourceContractAtIndex
error InvalidIntentSourceContractAtIndex(uint32 index, address intentContract, address expectedContract)
InvalidIntentSourceSignerAtIndex
error InvalidIntentSourceSignerAtIndex(uint32 index, address intentSigner, address actualSigner)
InvalidTransferPayloadMagic
error InvalidTransferPayloadMagic(bytes4 actualMagic)
InvalidTransferSpecMagic
error InvalidTransferSpecMagic(bytes4 actualMagic)
InvalidTransferSpecVersion
error InvalidTransferSpecVersion(uint32 actualVersion)
MismatchedBurn
error MismatchedBurn()
MustHaveAtLeastOneBurnIntent
error MustHaveAtLeastOneBurnIntent()
NoRelevantBurnIntents
error NoRelevantBurnIntents()
NotAllSameToken
error NotAllSameToken()
NotAuthorized
error NotAuthorized()
NotInitializing
error NotInitializing()
NoWithdrawingBalance
error NoWithdrawingBalance()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TransferPayloadDataTooShort
error TransferPayloadDataTooShort(uint256 expectedMinimumLength, uint256 actualLength)
TransferPayloadHeaderTooShort
error TransferPayloadHeaderTooShort(uint256 expectedMinimumLength, uint256 actualLength)
TransferPayloadOverallLengthMismatch
error TransferPayloadOverallLengthMismatch(uint256 expectedTotalLength, uint256 actualTotalLength)
TransferPayloadSetElementHeaderTooShort
error TransferPayloadSetElementHeaderTooShort(uint32 index, uint256 actualSetLength, uint256 requiredOffset)
TransferPayloadSetElementTooShort
error TransferPayloadSetElementTooShort(uint32 index, uint256 actualSetLength, uint256 requiredOffset)
TransferPayloadSetHeaderTooShort
error TransferPayloadSetHeaderTooShort(uint256 expectedMinimumLength, uint256 actualLength)
TransferPayloadSetInvalidElementMagic
error TransferPayloadSetInvalidElementMagic(uint32 index, bytes4 actualMagic)
TransferPayloadSetOverallLengthMismatch
error TransferPayloadSetOverallLengthMismatch(uint256 expectedTotalLength, uint256 actualTotalLength)
TransferSpecHashUsed
error TransferSpecHashUsed(bytes32 transferSpecHash)
TransferSpecHeaderTooShort
error TransferSpecHeaderTooShort(uint256 expectedMinimumLength, uint256 actualLength)
TransferSpecInvalidHookData
error TransferSpecInvalidHookData(uint256 expectedHookDataLength, uint256 transferSpecLength)
TransferSpecOverallLengthMismatch
error TransferSpecOverallLengthMismatch(uint256 expectedTotalLength, uint256 actualTotalLength)
UnauthorizedDenylister
error UnauthorizedDenylister(address addr)
UnauthorizedPauser
error UnauthorizedPauser(address caller)
UnsupportedToken
error UnsupportedToken(address token)
UnsupportedTokenAtIndex
error UnsupportedTokenAtIndex(uint32 index, address sourceToken)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WithdrawalNotYetAvailable
error WithdrawalNotYetAvailable()
WithdrawalValueExceedsAvailableBalance
error WithdrawalValueExceedsAvailableBalance()
WithdrawalValueMustBePositive
error WithdrawalValueMustBePositive()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610029565b610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516153f56101015f395f8181611fb601528181611fdf01526122c601526153f55ff3fe6080604052600436106102c1575f3560e01c80638456cb5911610176578063b727b579116100d4578063e877a52611610083578063e877a5261461087b578063e909ebfa1461089a578063f160d369146108b9578063f2fde38b146108d8578063f49ebd82146108f7578063f698da2514610916578063fefeec131461092a575f5ffd5b8063b727b57914610793578063bcc76c60146107c6578063c2fb26a6146107da578063c8393ba91461080a578063dc4aa51314610829578063df0c669014610848578063e30c397814610867575f5ffd5b80639cab0c1c116101305780639cab0c1c146106b25780639fd0506d146106d1578063a7ab6961146106e5578063a946de04146106f9578063ad3cb1cc14610718578063b3db428b14610755578063b3f69f8d14610774575f5ffd5b80638456cb591461060657806384b0196e1461061a5780638a94d4fc146106415780638da5cb5b146106605780638ec3dbb9146106745780638ef5973914610693575f5ffd5b80634e1273f4116102235780635c975abb116101dd5780635c975abb1461053f5780636d69fcaf14610562578063715018a61461058157806374392bf31461059557806375151b63146105b457806379ba5097146105d35780637e2acfa3146105e7575f5ffd5b80634e1273f41461048f5780634f1ef286146104bb57806351cff8d9146104ce57806352cd67e9146104ed57806352d1902d1461050c578063554bab3c14610520575f5ffd5b80633660dbd01161027f5780633660dbd0146103bf5780633bbe1ecd146103de5780633ccb64ae146103fd5780633f4ba83a1461041c578063438d483514610430578063469048401461044f57806347e7ef2414610470575f5ffd5b8062fdd58e146102c5578063020d308d146102f75780631453b98714610318578063175801581461033757806326a3fb30146103815780633371bfff146103a0575b5f5ffd5b3480156102d0575f5ffd5b506102e46102df366004614649565b610949565b6040519081526020015b60405180910390f35b348015610302575f5ffd5b50610316610311366004614671565b610a20565b005b348015610323575f5ffd5b506102e4610332366004614671565b610b39565b348015610342575f5ffd5b506103716103513660046146a2565b5f9081525f5160206152e05f395f51905f52602052604090205460ff1690565b60405190151581526020016102ee565b34801561038c575f5ffd5b5061031661039b3660046146fd565b610b95565b3480156103ab575f5ffd5b506103166103ba36600461476f565b610c08565b3480156103ca575f5ffd5b506103716103d936600461476f565b610c88565b3480156103e9575f5ffd5b506102e46103f8366004614671565b610cb2565b348015610408575f5ffd5b506102e4610417366004614671565b610d12565b348015610427575f5ffd5b50610316610d43565b34801561043b575f5ffd5b5061031661044a366004614788565b610d7f565b34801561045a575f5ffd5b50610463610df6565b6040516102ee919061480c565b34801561047b575f5ffd5b5061031661048a366004614649565b610e11565b34801561049a575f5ffd5b506104ae6104a9366004614860565b610e43565b6040516102ee9190614904565b6103166104c93660046149c5565b610f29565b3480156104d9575f5ffd5b506103166104e836600461476f565b610f48565b3480156104f8575f5ffd5b506103166105073660046146a2565b610fd5565b348015610517575f5ffd5b506102e4611029565b34801561052b575f5ffd5b5061031661053a36600461476f565b611044565b34801561054a575f5ffd5b505f5160206153605f395f51905f525460ff16610371565b34801561056d575f5ffd5b5061031661057c36600461476f565b611058565b34801561058c575f5ffd5b506103166110dc565b3480156105a0575f5ffd5b506103716105af366004614a0f565b6110ed565b3480156105bf575f5ffd5b506103716105ce36600461476f565b61116b565b3480156105de575f5ffd5b50610316611192565b3480156105f2575f5ffd5b5061031661060136600461476f565b6111ce565b348015610611575f5ffd5b5061031661123a565b348015610625575f5ffd5b5061062e611274565b6040516102ee9796959493929190614a7d565b34801561064c575f5ffd5b5061031661065b366004614afc565b61131d565b34801561066b575f5ffd5b50610463611383565b34801561067f575f5ffd5b5061031661068e366004614b77565b6113b7565b34801561069e575f5ffd5b506103166106ad366004614bd5565b6113f4565b3480156106bd575f5ffd5b506103166106cc36600461476f565b611456565b3480156106dc575f5ffd5b506104636114cc565b3480156106f0575f5ffd5b506102e46114fe565b348015610704575f5ffd5b5061031661071336600461476f565b611510565b348015610723575f5ffd5b50610748604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102ee9190614c3b565b348015610760575f5ffd5b5061031661076f366004614c4d565b61157d565b34801561077f575f5ffd5b5061031661078e36600461476f565b611645565b34801561079e575f5ffd5b506102e47fb03948446334eb9b2196d5eb166f69b9d49403eb4a12f36de8d3f9f3cb8e15c381565b3480156107d1575f5ffd5b506104636116b2565b3480156107e5575f5ffd5b505f5160206153805f395f51905f525460405163ffffffff90911681526020016102ee565b348015610815575f5ffd5b50610316610824366004614649565b6116bb565b348015610834575f5ffd5b506102e4610843366004614c87565b61179a565b348015610853575f5ffd5b506102e4610862366004614671565b6117d9565b348015610872575f5ffd5b50610463611811565b348015610886575f5ffd5b5061037161089536600461476f565b611826565b3480156108a5575f5ffd5b506103166108b4366004614671565b61182f565b3480156108c4575f5ffd5b506103166108d336600461476f565b61190d565b3480156108e3575f5ffd5b506103166108f236600461476f565b61197c565b348015610902575f5ffd5b50610316610911366004614cc5565b6119ee565b348015610921575f5ffd5b506102e4611ae9565b348015610935575f5ffd5b506102e4610944366004614671565b611bb1565b5f8160a081901c6003811115610963575f92505050610a1a565b5f816001600160601b0316600381111561097f5761097f614d67565b90505f81600381111561099457610994614d67565b036109aa576109a38387610b39565b9350610a16565b60018160038111156109be576109be614d67565b036109cd576109a38387610d12565b60028160038111156109e1576109e1614d67565b036109f0576109a383876117d9565b6003816003811115610a0457610a04614d67565b03610a1657610a138387610cb2565b93505b5050505b92915050565b610a28611bba565b33610a3281611bea565b82610a3c81611c13565b610a4583611c3b565b6001600160a01b038481165f9081525f5160206153205f395f51905f5260208181526040808420338552825280842094881684529390529181205460ff1690816002811115610a9657610a96614d67565b1480610ab357506002816002811115610ab157610ab1614d67565b145b15610abf575050610b33565b6001600160a01b038681165f8181526020858152604080832033808552908352818420958b1684529490915290819020805460ff19166002179055517ff706b3b70da5d5dada9b3c7d9f14e4f6c280183742a82ea2f951653070b0f19590610b2890899061480c565b60405180910390a350505b50505050565b5f5f610b43611c62565b6001600160a01b038086165f8181526001840160209081526040808320948916808452948252808320549383528582528083209483529390529190912054919250610b8d91614d8f565b949350505050565b610b9d611bba565b33610ba781611bea565b85610bb181611bea565b87610bbb81611c13565b610bfd8989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611c8692505050565b505050505050505050565b610c10611d75565b600101546001600160a01b03163314610c475733604051637446939f60e11b8152600401610c3e919061480c565b60405180910390fd5b610c52816001611d99565b6040516001600160a01b038216907ffa4507bc1f9c730e6e95897024f1fe7d576cf2deb53579d55c14f1ac3439e114905f90a250565b5f610c91611dd0565b6001600160a01b039092165f90815260209290925250604090205460ff1690565b5f5f610cbc611c62565b6001600160a01b038086165f9081526001929092016020908152604080842092871684529190529020549050801580610cfd575043610cfb8585611bb1565b115b15610d0b575f915050610a1a565b9392505050565b5f610d1b611c62565b6001600160a01b039384165f9081526020918252604080822094909516815292905250205490565b33610d4c6114cc565b6001600160a01b031614610d75573360405163ae3b56d560e01b8152600401610c3e919061480c565b610d7d611df4565b565b610d87611bba565b33610d9181611bea565b87610d9b81611bea565b89610da581611c13565b610de98b8b8b8b8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e4292505050565b5050505050505050505050565b5f610dff611dd0565b600101546001600160a01b0316919050565b610e19611bba565b33610e2381611bea565b82610e2d81611c13565b3380610e3b86828088611f21565b505050505050565b6060838214610e65576040516343714afd60e01b815260040160405180910390fd5b836001600160401b03811115610e7d57610e7d614916565b604051908082528060200260200182016040528015610ea6578160200160208202803683370190505b5090505f5b84811015610f2057610efb868683818110610ec857610ec8614da2565b9050602002016020810190610edd919061476f565b858584818110610eef57610eef614da2565b90506020020135610949565b828281518110610f0d57610f0d614da2565b6020908102919091010152600101610eab565b50949350505050565b610f31611fab565b610f3a82612039565b610f448282612041565b5050565b610f50611bba565b80610f5a81611c13565b610f6482336120f9565b5f610f6f8333612146565b9050610f7c83335f6121d0565b610f906001600160a01b0384163383612206565b60405181815233906001600160a01b038516907fb00382203b46c3b6ad0a2d7af0268e334bd9406256a7c7ba8f7fc8bc47f8cde99060200160405180910390a3505050565b610fdd612265565b5f610fe6612297565b60010154905081610ff5612297565b60010155604051829082907fab3f1d5eaee409b7067167f77f1fa3f8a863366d6fb2b88559cd4f9b8e03e182905f90a35050565b5f6110326122bb565b505f5160206153005f395f51905f5290565b61104c612265565b61105581612304565b50565b611060612265565b6001600160a01b0381165f9081527f3ba16516a08fb9c5c48fb6662657ad4ffe1c779829969b4c7abdb9287bbf8500602052604090819020805460ff19166001179055517fea3145306a87baeba6bb1a8b5c8d3744f840a81cb436b3509f64fc978600cdfb906110d190839061480c565b60405180910390a150565b6110e4612265565b610d7d5f612374565b5f826001600160a01b0316826001600160a01b03160361110f57506001610d0b565b6001600160a01b038481165f9081525f5160206153205f395f51905f5260209081526040808320878516845282528083209386168352929052205460ff16600181600281111561116157611161614d67565b1495945050505050565b5f7f3ba16516a08fb9c5c48fb6662657ad4ffe1c779829969b4c7abdb9287bbf8500610c91565b338061119c611811565b6001600160a01b0316146111c5578060405163118cdaa760e01b8152600401610c3e919061480c565b61105581612374565b6111d6612265565b6111df81611c3b565b5f6111e8611dd0565b6001600160a01b0383165f8181526020929092526040808320805460ff19169415159490941790935591517f61bf1e503074577bd48a3a903d7b74860236be7560e7324f6614d093a166ff459190a250565b336112436114cc565b6001600160a01b03161461126c573360405163ae3b56d560e01b8152600401610c3e919061480c565b610d7d612399565b5f6060805f5f5f60606040518060400160405280600d81526020016c11d85d195dd85e55d85b1b195d609a1b815250604051806040016040528060018152602001603160f81b8152505f5f5f5f1b5f6001600160401b038111156112da576112da614916565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b50600360f81b9d959c50939a509198509650945092509050565b611325611bba565b3361132f81611bea565b8861133981611bea565b8a61134381611c13565b6113758c8c8c8c8c8c8b8b8e60405160200161136193929190614db6565b604051602081830303815290604052611e42565b505050505050505050505050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6113bf611bba565b6113cb848484846123e1565b5f80806113da86880188614e88565b9250925092506113eb83838361249c565b50505050505050565b6113fc611bba565b3361140681611bea565b8661141081611bea565b8861141a81611c13565b61144a8a8a8a8a89898c60405160200161143693929190614db6565b604051602081830303815290604052611c86565b50505050505050505050565b61145e611d75565b600101546001600160a01b0316331461148c5733604051637446939f60e11b8152600401610c3e919061480c565b611496815f611d99565b6040516001600160a01b038216907fc904e1b03de0c20d7fcf9dbd056daf1bd3815e93f251199de815fd0f0b96e166905f90a250565b5f7f7e0f0117f6f510f2a35b1c8185f303b28ba884334cd776f9d98e2abef24e2f005b546001600160a01b0316919050565b5f611507612297565b60010154905090565b611518612265565b5f611521611d75565b600101546001600160a01b0316905061153982612557565b816001600160a01b0316816001600160a01b03167fe144e84038182cefebda68c192c222085b2c12a85d135d3c938498c0165c01d360405160405180910390a35050565b611585611bba565b3361158f81611bea565b8261159981611bea565b846115a381611c13565b6115ac85611c3b565b60405163fe575a8760e01b81526001600160a01b0387169063fe575a87906115d890889060040161480c565b6020604051808303815f875af11580156115f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116189190614fe8565b15611638578460405163328cf86d60e21b8152600401610c3e919061480c565b336113eb87878388611f21565b61164d612265565b61165681611c3b565b6001611660611dd0565b6001600160a01b0383165f8181526020929092526040808320805460ff19169415159490941790935591517f895cdec14fd06461967f67fd12f3dc81c22b59fe80d1caf6f07b1902a8eaa35e9190a250565b5f610dff611d75565b6116c3611bba565b816116cd81611c13565b815f036116ed57604051636e120c9560e11b815260040160405180910390fd5b6116f78333610d12565b82111561171757604051636b18a64360e01b815260040160405180910390fd5b5f5f611724853386612584565b915091505f6117316114fe565b61173b9043614d8f565b90506117488633836121d0565b60408051868152602081018590529081018390526060810182905233906001600160a01b038816907f5f9a559874d8abe05a98d167b78d2012697505ea3e7bcdba906e7b6084014c6590608001610b28565b5f610d0b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061264092505050565b5f6117e2611c62565b6001600160a01b039384165f908152600191909101602090815260408083209490951682529290925250205490565b5f805f5160206153a05f395f51905f526113a7565b5f610c91611d75565b611837611bba565b3361184181611bea565b8161184b81611bea565b8361185581611c13565b61185e84611c3b565b336001600160a01b0385160361188757604051633be64e5b60e21b815260040160405180910390fd5b6001600160a01b038581165f8181525f5160206153205f395f51905f526020908152604080832033808552908352818420958a1684529490915290819020805460ff19166001179055517fe91cba149cb264c22b997b1a69e785ad1562a07f83318cd0c985ba1be6e66099906118fe90889061480c565b60405180910390a35050505050565b611915612265565b61191e81611c3b565b5f611927611dd0565b6001810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f0bc21fe5c3ab742ff1d15b5c4477ffbacf1167e618228078fa625edebe7f331d905f90a3505050565b611984612265565b5f5160206153a05f395f51905f5280546001600160a01b0319166001600160a01b03831690811782556119b5611383565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611a37575080546001600160401b03808416911610155b15611a555760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611a838a8a8a8a8a61266d565b611a8c8561269a565b611a9684846126ab565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050565b604080518082018252600d81526c11d85d195dd85e55d85b1b195d609a1b6020918201528151808301835260018152603160f81b9082015281517fb03948446334eb9b2196d5eb166f69b9d49403eb4a12f36de8d3f9f3cb8e15c3818301527f7ae6a640f653d0a0ae71fd94200a4797e3e069c3a0320aab3f939b6ae05e50eb818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606080830191909152835180830390910181526080909101909252815191012090565b5f610d1b612297565b5f5160206153605f395f51905f525460ff1615610d7d5760405163d93c066560e01b815260040160405180910390fd5b611bf381611826565b1561105557806040516313f7662b60e11b8152600401610c3e919061480c565b611c1c8161116b565b6110555780604051635f8b555b60e11b8152600401610c3e919061480c565b6001600160a01b0381166110555760405163e6c4247b60e01b815260040160405180910390fd5b7fdd3dca88e892815d13ea80f1982e32e4fe3d0a89f03d14d3565bf56d58c31a0090565b825f03611ca6576040516370e1e43160e01b815260040160405180910390fd5b83611cb28682866126c5565b604051639fd5a6cf60e01b81526001600160a01b03871690639fd5a6cf90611ce69084903090899089908990600401615007565b5f604051808303815f87803b158015611cfd575f5ffd5b505af1158015611d0f573d5f5f3e3d5ffd5b50611d29925050506001600160a01b03871682308761270c565b846001600160a01b0316856001600160a01b0316876001600160a01b03165f5160206153405f395f51905f5287604051611d6591815260200190565b60405180910390a4505050505050565b7f77aee7014301166d8532df7f3d0b1c40d5b12f074d2d69255b43654e0419340090565b80611da2611d75565b6001600160a01b03939093165f9081526020939093526040909220805460ff19169215159290921790915550565b7f931ec06eaaa2cd8a002032d3364041b052af597aa8c169fcc20c959a9f55710090565b611dfc612745565b5f5160206153605f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516110d1919061480c565b845f03611e62576040516370e1e43160e01b815260040160405180910390fd5b85611e6e8882886126c5565b6040516388b7ab6360e01b81526001600160a01b038916906388b7ab6390611ea690849030908b908b908b908b908b9060040161504b565b5f604051808303815f87803b158015611ebd575f5ffd5b505af1158015611ecf573d5f5f3e3d5ffd5b50505050806001600160a01b0316816001600160a01b0316896001600160a01b03165f5160206153405f395f51905f5289604051611f0f91815260200190565b60405180910390a45050505050505050565b805f03611f41576040516370e1e43160e01b815260040160405180910390fd5b611f4c8484836126c5565b611f616001600160a01b03851683308461270c565b816001600160a01b0316836001600160a01b0316856001600160a01b03165f5160206153405f395f51905f5284604051611f9d91815260200190565b60405180910390a450505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061201b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661200f612774565b6001600160a01b031614155b15610d7d5760405163703e46dd60e11b815260040160405180910390fd5b611055612265565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561209b575060408051601f3d908101601f191682019092526120989181019061509f565b60015b6120ba5781604051634c9c8ce360e01b8152600401610c3e919061480c565b5f5160206153005f395f51905f5281146120ea57604051632a87526960e21b815260048101829052602401610c3e565b6120f48383612788565b505050565b43612102612297565b6001600160a01b038085165f908152602092835260408082209286168252919092529020541115610f44576040516327b0bab160e11b815260040160405180910390fd5b5f5f612150611c62565b6001600160a01b038086165f908152600183016020908152604080832093881683529290529081205491925081900361219c57604051631b4e3b4f60e01b815260040160405180910390fd5b6001600160a01b038086165f9081526001909301602090815260408085209287168552919052822091909155905092915050565b806121d9612297565b6001600160a01b039485165f90815260209182526040808220959096168152939052929091209190915550565b6040516001600160a01b038381166024830152604482018390526120f491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506127dd565b3361226e611383565b6001600160a01b031614610d7d573360405163118cdaa760e01b8152600401610c3e919061480c565b7f8f0d2169d60e1d6e8f336adc673aa9b36c7a3956bc915f85e5cfebff815daa0090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d7d5760405163703e46dd60e11b815260040160405180910390fd5b7f7e0f0117f6f510f2a35b1c8185f303b28ba884334cd776f9d98e2abef24e2f0080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a811905f90a35050565b5f5160206153a05f395f51905f5280546001600160a01b0319168155610f4482612840565b6123a1611bba565b5f5160206153605f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e35565b5f61246d61243286866040516123f89291906150b6565b60405180910390207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506128b092505050565b905061247881610c88565b6124955760405163d611d6a560e01b815260040160405180910390fd5b5050505050565b82515f036124bd57604051630483621960e41b815260040160405180910390fd5b825182511415806124d057508251815114155b156124ee576040516336dc648360e21b815260040160405180910390fd5b5f5b8351811015610b335761254f84828151811061250e5761250e614da2565b602002602001015184838151811061252857612528614da2565b602002602001015184848151811061254257612542614da2565b60200260200101516128d8565b6001016124f0565b80612560611d75565b60010180546001600160a01b0319166001600160a01b039290921691909117905550565b5f5f5f61258f611c62565b6001600160a01b038088165f90815260208381526040808320938a16835292905220549091506125c09085906150c5565b6001600160a01b038088165f9081526001840160209081526040808320938a16835292905220549093506125f5908590614d8f565b6001600160a01b039687165f8181526020848152604080832099909a168083529881528982208790559181526001909301815287832096835295909552949094208390559391925050565b5f5f61264b83612965565b905061265681612a47565b1561266457610d0b81612a69565b610d0b81612bf1565b612675612c66565b61267e85612caf565b61268784612cbf565b6126918383612cd0565b61249581612d14565b6126a2612c66565b61105581612d44565b6126b3612c66565b6126bc82611645565b610f448161190d565b806126ce611c62565b6001600160a01b038086165f9081526020928352604080822092871682529190925281208054909190612702908490614d8f565b9091555050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610b339186918216906323b872dd90608401612233565b5f5160206153605f395f51905f525460ff16610d7d57604051638dfc202b60e01b815260040160405180910390fd5b5f5f5160206153005f395f51905f526114ef565b61279182612d55565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156127d5576120f48282612daf565b610f44612e21565b5f5f60205f8451602086015f885af1806127fc576040513d5f823e3d81fd5b50505f513d91508115612813578060011415612820565b6001600160a01b0384163b155b15610b335783604051635274afe760e01b8152600401610c3e919061480c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5f5f5f6128be8686612e40565b9250925092506128ce8282612e89565b5090949350505050565b5f6128e284612f41565b9050806040015163ffffffff165f0361290e57604051630483621960e41b815260040160405180910390fd5b806040015163ffffffff16825114612939576040516336dc648360e21b815260040160405180910390fd5b5f61294b61294686612640565b612fd8565b90505f61295882866128b0565b9050610e3b838286613004565b5f600460ff1682511015612998578151604051631743c8a560e31b81526004808201526024810191909152604401610c3e565b5f6129a383826131ca565b90505f6129b862ffffff1983168260046131e4565b9050637c7a821f60e11b6001600160e01b03198216016129f6576129ef63070afbc25b60d81b6301000000600160d81b0384161790565b9250612a40565b631666dc6560e01b6001600160e01b0319821601612a1b576129ef63e999239b6129db565b60405163319b52eb60e11b81526001600160e01b031982166004820152602401610c3e565b5050919050565b5f63e999239b60e01b612a6262ffffff1984168360046131e4565b1492915050565b5f5f612a748361333a565b905060085f63ffffffff83166001600160401b03811115612a9757612a97614916565b604051908082528060200260200182016040528015612ac0578160200160208202803683370190505b5090505f5b8363ffffffff168163ffffffff161015612b6d575f612af7612ae8604486614d8f565b62ffffff198916906004613349565b90505f612b058260486150d8565b63ffffffff1690505f612b2462ffffff198a16878463070afbc2613378565b9050612b2f81612bf1565b858563ffffffff1681518110612b4757612b47614da2565b6020908102919091010152612b5c8287614d8f565b95505060019092019150612ac59050565b506040517fe30760cf7d79e3521ad1553a73a6c6f8d33226ea613eaa29ceda6de148fbd07a90612ba19083906020016150f4565b60405160208183030381529060405280519060200120604051602001612bd1929190918252602082015260400190565b604051602081830303815290604052805190602001209350505050919050565b5f5f612bfc836133f1565b90505f612c0884613405565b90505f612c1485613419565b90505f612c20826134a0565b604080517f8b99d17a83a2dd1add9fc2a450e22732c7e8564aa110ab99c20485a7a10ba37c81526020810196909652850193909352505060608201526080902092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610d7d57604051631afcd79f60e31b815260040160405180910390fd5b612cb7612c66565b61104c61357c565b612cc7612c66565b61105581611510565b612cd8612c66565b5f5b818110156120f457612d0c838383818110612cf757612cf7614da2565b905060200201602081019061057c919061476f565b600101612cda565b612d1c612c66565b5f5160206153805f395f51905f52805463ffffffff191663ffffffff92909216919091179055565b612d4c612c66565b61105581610fd5565b806001600160a01b03163b5f03612d815780604051634c9c8ce360e01b8152600401610c3e919061480c565b5f5160206153005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612dcb9190615129565b5f60405180830381855af49150503d805f8114612e03576040519150601f19603f3d011682016040523d82523d5f602084013e612e08565b606091505b5091509150612e1885838361358c565b95945050505050565b3415610d7d5760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103612e77576020840151604085015160608601515f1a612e69888285856135df565b955095509550505050612e82565b505081515f91506002905b9250925092565b5f826003811115612e9c57612e9c614d67565b03612ea5575050565b6001826003811115612eb957612eb9614d67565b03612ed75760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612eeb57612eeb614d67565b03612f0c5760405163fce698f760e01b815260048101829052602401610c3e565b6003826003811115612f2057612f20614d67565b03610f44576040516335e2f38360e21b815260048101829052602401610c3e565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810182905290612f748361369d565b62ffffff19811683525f60608401529050612f8e81612a47565b612fac57505f60208201819052600160408301526080820152919050565b5f612fb68261333a565b6008602085015263ffffffff1660408401819052156080840152509092915050565b5f610a1a612fe4611ae9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f808080805b876080015161312e5787606001519250613023886136ce565b93505f61303562ffffff198616613419565b90505f613043828a876137b1565b90508061305157505061300a565b61307b86898763ffffffff168151811061306d5761306d614da2565b602002602001015187613986565b5f61309161308e62ffffff198516613a17565b90565b90506001600160a01b0388166130a9578097506130db565b876001600160a01b0316816001600160a01b0316146130db576040516307897d0f60e31b815260040160405180910390fd5b5f5f613107858d8d8b63ffffffff16815181106130fa576130fa614da2565b6020026020010151613a2b565b90925090506131168287614d8f565b95506131228188614d8f565b9650505050505061300a565b805f0361314e576040516316c45d7f60e01b815260040160405180910390fd5b61316a613159610df6565b6001600160a01b0387169084612206565b6001600160a01b0385166342966c6861318384846150c5565b6040518263ffffffff1660e01b81526004016131a191815260200190565b5f604051808303815f87803b1580156131b8575f5ffd5b505af1158015611375573d5f5f3e3d5ffd5b81515f9060208401612e1864ffffffffff85168284613bf2565b5f8160ff165f036131f657505f610d0b565b6132098460181c6001600160601b031690565b6001600160601b031661321f60ff841685614d8f565b11156132835761326a61323b8560781c6001600160601b031690565b6001600160601b03166132578660181c6001600160601b031690565b6001600160601b0316858560ff16613c36565b60405162461bcd60e51b8152600401610c3e9190614c3b565b60208260ff1611156132fd5760405162461bcd60e51b815260206004820152603a60248201527f54797065644d656d566965772f696e646578202d20417474656d70746564207460448201527f6f20696e646578206d6f7265207468616e2033322062797465730000000000006064820152608401610c3e565b600882025f6133158660781c6001600160601b031690565b6001600160601b031690505f600160ff1b5f1984011d91909501511695945050505050565b5f610a1a62ffffff1983166004805b5f61335582602061513f565b613360906008615158565b60ff1661336e8585856131e4565b901c949350505050565b5f5f61338d8660781c6001600160601b031690565b6001600160601b031690506133a186613ca0565b846133ac8784614d8f565b6133b69190614d8f565b11156133c95762ffffff19915050610b8d565b6133d38582614d8f565b90506133e78364ffffffffff168286613bf2565b9695505050505050565b5f610a1a62ffffff19831660046020613349565b5f610a1a62ffffff19831660246020613349565b5f5f61342483613cd8565b90505f61344462ffffff198516604863ffffffff851663ca85def7613378565b90505f61345962ffffff1983168260046131e4565b90506001600160e01b0319811663ca85def760e01b1461349857604051633c2c863160e11b81526001600160e01b031982166004820152602401610c3e565b509392505050565b5f5f6134ab8361333a565b90505f6134b784613cec565b90505f6134c385613d00565b90505f6134dd6134d287613d14565b62ffffff1916613daf565b90505f6134f8607888901c6001600160601b0316601061517b565b90505f6135076020600a61519a565b90506040517f44409c7ba8872720f5fc290d2788c2d70a3905b7ca1cdb2ffa152791a69e089b81528660208201528560408201528460608201528160808201838560045afa8061356257630f7046f360e41b5f818152600490fd5b506101c081019390935250506101e0902095945050505050565b613584612c66565b610d7d613df6565b6060826135a15761359c82613e16565b610d0b565b81511580156135b857506001600160a01b0384163b155b156135d85783604051639996b31560e01b8152600401610c3e919061480c565b5080610d0b565b5f80806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561360e57505f91506003905082613693565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561365f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661368a57505f925060019150829050613693565b92505f91508190505b9450945094915050565b5f6136a782612965565b90506136b281612a47565b156136c5576136c081613e3f565b919050565b6136c081614083565b5f8160800151156136f257604051631365229760e31b815260040160405180910390fd5b5f61371b604461ffff16846020015161370b9190614d8f565b845162ffffff1916906004613349565b90505f6137298260486150d8565b6020850151855163ffffffff9290921692506137519162ffffff1916908363070afbc2613378565b925080846020018181516137659190614d8f565b90525060608401805190613778826151bc565b63ffffffff1663ffffffff1681525050836040015163ffffffff16846060015163ffffffff1610612a4057600160808501525050919050565b5f806137c262ffffff1986166140a1565b9050805f036137eb57604051620ad61f60eb1b815263ffffffff84166004820152602401610c3e565b5f6137fb62ffffff198716613cec565b5f5160206153805f395f51905f525490915063ffffffff808316911614613826575f92505050610d0b565b5f61383961308e62ffffff1989166140b6565b90506001600160a01b038116301461388157604051635b06a28360e01b815263ffffffff861660048201526001600160a01b0382166024820152306044820152606401610c3e565b5f61389461308e62ffffff198a16613a17565b905061389f8161116b565b6138d35760405163600a901b60e01b815263ffffffff871660048201526001600160a01b0382166024820152604401610c3e565b5f6138e661308e62ffffff198b166140ca565b9050876001600160a01b0316816001600160a01b0316146139395760405163178bd68160e31b815263ffffffff881660048201526001600160a01b03808316602483015289166044820152606401610c3e565b5f61394c61308e62ffffff198c166140de565b905061395983828b6140f2565b6139765760405163ea8e4eb560e01b815260040160405180910390fd5b5060019998505050505050505050565b5f61399662ffffff1985166133f1565b9050438110156139ce5760405163090353d560e11b815263ffffffff8316600482015260248101829052436044820152606401610c3e565b5f6139de62ffffff198616613405565b9050838110156124955760405163195785c960e11b815263ffffffff841660048201526024810182905260448101859052606401610c3e565b5f610a1a62ffffff198316605060206131e4565b5f80613a44613a3f62ffffff198716614172565b614182565b5f613a5761308e62ffffff198816613a17565b90505f613a6c61308e62ffffff1989166140de565b90505f613a7e62ffffff1989166140a1565b90505f80613a968585613a918b87614d8f565b6141b5565b9092509050613aa58183614d8f565b9650613ab18884614d8f565b871015613b10576001600160a01b038085169086167f5fab62745de032ad35a05146c51710fd80871be06cb193722c40f011df352f0c613af18b87614d8f565b6040805191825260208201879052810185905260600160405180910390a35b828711613b1f575f9550613b2c565b613b2983886150c5565b95505b613b3b62ffffff198b16614172565b846001600160a01b0316866001600160a01b03167f12ee2719e7e2dec9f2a0041286b66669153dff0d36719f692b8bbaa4dfe0aa87613b7f8e62ffffff1916613d00565b613b8e8f62ffffff1916614317565b8e613b998d8f6150c5565b6040805163ffffffff95909516855260208501939093526001600160a01b0391909116838301526060830152608082018c905260a0820188905260c08201879052519081900360e00190a450505050505b935093915050565b5f80613bfe8385614d8f565b9050604051811115613c0d57505f5b805f03613c215762ffffff19915050610d0b565b5050606092831b9190911790911b1760181b90565b60605f613c428661432b565b9150505f613c4f8661432b565b9150505f613c5c8661432b565b9150505f613c698661432b565b91505083838383604051602001613c8394939291906151e0565b604051602081830303815290604052945050505050949350505050565b5f613cb48260181c6001600160601b031690565b613cc78360781c6001600160601b031690565b016001600160601b03169050919050565b5f610a1a62ffffff19831660446004613349565b5f610a1a62ffffff19831660086004613349565b5f610a1a62ffffff198316600c6004613349565b5f5f613d1f836143d3565b90505f63ffffffff821615613d5357613d4c62ffffff19851661015463ffffffff808616905f9061337816565b9050613d6a565b613d6762ffffff1985166101545f80613378565b90505b630100000062ffffff19821601610d0b57604051631cbe4a2360e11b815263ffffffff83166004820152601885901c6001600160601b03166024820152604401610c3e565b5f5f613dc48360781c6001600160601b031690565b6001600160601b031690505f613de38460181c6001600160601b031690565b6001600160601b03169091209392505050565b613dfe612c66565b5f5160206153605f395f51905f52805460ff19169055565b805115613e265780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6008601882901c6001600160601b03161015613e8457604051637c087ac560e11b815260086004820152601882901c6001600160601b03166024820152604401610c3e565b5f613e8e8261333a565b905060085f5b8263ffffffff168163ffffffff16101561403f575f613eb4604884614d8f565b9050601885901c6001600160601b0316811115613f0657604051631f7a270f60e31b815263ffffffff83166004820152601886901c6001600160601b0316602482015260448101829052606401610c3e565b5f613f24613f15604486614d8f565b62ffffff198816906004613349565b90505f613f328260486150d8565b63ffffffff1690505f613f458287614d8f565b9050601888901c6001600160601b0316811115613f9757604051631014f32560e31b815263ffffffff86166004820152601889901c6001600160601b0316602482015260448101829052606401610c3e565b5f613fb4613fa58289614d8f565b62ffffff198b169060046131e4565b90506001600160e01b031981166303857de160e11b14613fff576040516312b22cbd60e01b815263ffffffff871660048201526001600160e01b031982166024820152604401610c3e565b5f61401662ffffff198b16898663070afbc2613378565b905061402181614083565b61402b8489614d8f565b97505060019095019450613e949350505050565b50601883901c6001600160601b031681146120f457604051633c99ab2560e21b815260048101829052601884901c6001600160601b03166024820152604401610c3e565b61408c816143e8565b5f61409682613419565b9050610f4481614490565b5f610a1a62ffffff1983166101106020613349565b5f610a1a62ffffff198316601060206131e4565b5f610a1a62ffffff19831660d060206131e4565b5f610a1a62ffffff198316609060206131e4565b5f826001600160a01b0316826001600160a01b03160361411457506001610d0b565b6001600160a01b038481165f9081525f5160206153205f395f51905f52602090815260408083208785168452825280832093861683529290529081205460ff169081600281111561416757614167614d67565b141595945050505050565b5f610a1a62ffffff198316613daf565b61418b81614576565b611055815f9081525f5160206152e05f395f51905f5260205260409020805460ff19166001179055565b5f5f5f6141c0611c62565b6001600160a01b038088165f90815260208381526040808320938a168352929052205490915084808210614235576001600160a01b038089165f90815260208581526040808320938b16835292905290812080548392906142229084906150c5565b909155509094505f9350613bea92505050565b6001600160a01b038089165f90815260208581526040808320938b1683529290529081205561426482826150c5565b6001600160a01b03808a165f9081526001860160209081526040808320938c16835292905220549091508181106142e0576001600160a01b03808a165f9081526001860160209081526040808320938c16835292905290812080548492906142cd9084906150c5565b90915550929550909350613bea92505050565b6001600160a01b039889165f9081526001949094016020908152604080862099909a16855297909752509581205550929391925050565b5f610a1a62ffffff19831660b060206131e4565b5f80601f5b600f8160ff16111561437d575f614348826008615158565b60ff1685901c9050614359816145b4565b61ffff16841793508160ff1660101461437457601084901b93505b505f1901614330565b50600f5b60ff8160ff1610156143cd575f614399826008615158565b60ff1685901c90506143aa816145b4565b61ffff16831792508160ff165f146143c457601083901b92505b505f1901614381565b50915091565b5f610a1a62ffffff1983166101506004613349565b6048601882901c6001600160601b0316101561442d5760405163161e118160e31b815260486004820152601882901c6001600160601b03166024820152604401610c3e565b5f61443782613cd8565b90505f6144458260486150d8565b63ffffffff169050601883901c6001600160601b031681146120f4576040516316279d8b60e21b815260048101829052601884901c6001600160601b03166024820152604401610c3e565b610154601882901c6001600160601b031610156144d757604051631cd8e33f60e11b81526101546004820152601882901c6001600160601b03166024820152604401610c3e565b5f6144e18261333a565b905063ffffffff811660011461451257604051633665681760e11b815263ffffffff82166004820152602401610c3e565b5f61451c836143d3565b90505f61452b826101546150d8565b63ffffffff169050601884901c6001600160601b03168114610b3357604051633df4634560e01b815260048101829052601885901c6001600160601b03166024820152604401610c3e565b5f8181525f5160206152e05f395f51905f52602052604090205460ff161561105557604051630b06514960e11b815260048101829052602401610c3e565b5f6145c560048360ff16901c6145e5565b60ff1661ffff919091161760081b6145dc826145e5565b60ff1617919050565b6040805180820190915260108082526f181899199a1a9b1b9c1cb0b131b232b360811b60208301525f91600f8416918290811061462457614624614da2565b016020015160f81c9392505050565b80356001600160a01b03811681146136c0575f5ffd5b5f5f6040838503121561465a575f5ffd5b61466383614633565b946020939093013593505050565b5f5f60408385031215614682575f5ffd5b61468b83614633565b915061469960208401614633565b90509250929050565b5f602082840312156146b2575f5ffd5b5035919050565b5f5f83601f8401126146c9575f5ffd5b5081356001600160401b038111156146df575f5ffd5b6020830191508360208285010111156146f6575f5ffd5b9250929050565b5f5f5f5f5f5f60a08789031215614712575f5ffd5b61471b87614633565b955061472960208801614633565b9450604087013593506060870135925060808701356001600160401b03811115614751575f5ffd5b61475d89828a016146b9565b979a9699509497509295939492505050565b5f6020828403121561477f575f5ffd5b610d0b82614633565b5f5f5f5f5f5f5f5f60e0898b03121561479f575f5ffd5b6147a889614633565b97506147b660208a01614633565b965060408901359550606089013594506080890135935060a0890135925060c08901356001600160401b038111156147ec575f5ffd5b6147f88b828c016146b9565b999c989b5096995094979396929594505050565b6001600160a01b0391909116815260200190565b5f5f83601f840112614830575f5ffd5b5081356001600160401b03811115614846575f5ffd5b6020830191508360208260051b85010111156146f6575f5ffd5b5f5f5f5f60408587031215614873575f5ffd5b84356001600160401b03811115614888575f5ffd5b61489487828801614820565b90955093505060208501356001600160401b038111156148b2575f5ffd5b6148be87828801614820565b95989497509550505050565b5f8151808452602084019350602083015f5b828110156148fa5781518652602095860195909101906001016148dc565b5093949350505050565b602081525f610d0b60208301846148ca565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561495257614952614916565b604052919050565b5f82601f830112614969575f5ffd5b81356001600160401b0381111561498257614982614916565b614995601f8201601f191660200161492a565b8181528460208386010111156149a9575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156149d6575f5ffd5b6149df83614633565b915060208301356001600160401b038111156149f9575f5ffd5b614a058582860161495a565b9150509250929050565b5f5f5f60608486031215614a21575f5ffd5b614a2a84614633565b9250614a3860208501614633565b9150614a4660408501614633565b90509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b8816815260e060208201525f614a9b60e0830189614a4f565b8281036040840152614aad8189614a4f565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050614ade81856148ca565b9a9950505050505050505050565b803560ff811681146136c0575f5ffd5b5f5f5f5f5f5f5f5f5f6101208a8c031215614b15575f5ffd5b614b1e8a614633565b9850614b2c60208b01614633565b975060408a0135965060608a0135955060808a0135945060a08a01359350614b5660c08b01614aec565b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60408587031215614b8a575f5ffd5b84356001600160401b03811115614b9f575f5ffd5b614bab878288016146b9565b90955093505060208501356001600160401b03811115614bc9575f5ffd5b6148be878288016146b9565b5f5f5f5f5f5f5f60e0888a031215614beb575f5ffd5b614bf488614633565b9650614c0260208901614633565b95506040880135945060608801359350614c1e60808901614aec565b9699959850939692959460a0840135945060c09093013592915050565b602081525f610d0b6020830184614a4f565b5f5f5f60608486031215614c5f575f5ffd5b614c6884614633565b9250614c7660208501614633565b929592945050506040919091013590565b5f5f60208385031215614c98575f5ffd5b82356001600160401b03811115614cad575f5ffd5b614cb9858286016146b9565b90969095509350505050565b5f5f5f5f5f5f5f5f60e0898b031215614cdc575f5ffd5b614ce589614633565b9750614cf360208a01614633565b965060408901356001600160401b03811115614d0d575f5ffd5b614d198b828c01614820565b909750955050606089013563ffffffff81168114614d35575f5ffd5b935060808901359250614d4a60a08a01614633565b9150614d5860c08a01614633565b90509295985092959890939650565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1a57610a1a614d7b565b634e487b7160e01b5f52603260045260245ffd5b928352602083019190915260f81b6001600160f81b031916604082015260410190565b5f6001600160401b03821115614df157614df1614916565b5060051b60200190565b5f82601f830112614e0a575f5ffd5b8135614e1d614e1882614dd9565b61492a565b8082825260208201915060208360051b860101925085831115614e3e575f5ffd5b602085015b83811015614e7e5780356001600160401b03811115614e60575f5ffd5b614e6f886020838a010161495a565b84525060209283019201614e43565b5095945050505050565b5f5f5f60608486031215614e9a575f5ffd5b83356001600160401b03811115614eaf575f5ffd5b614ebb86828701614dfb565b93505060208401356001600160401b03811115614ed6575f5ffd5b614ee286828701614dfb565b92505060408401356001600160401b03811115614efd575f5ffd5b8401601f81018613614f0d575f5ffd5b8035614f1b614e1882614dd9565b8082825260208201915060208360051b850101925088831115614f3c575f5ffd5b602084015b83811015614fd95780356001600160401b03811115614f5e575f5ffd5b8501603f81018b13614f6e575f5ffd5b6020810135614f7f614e1882614dd9565b808282526020820191506020808460051b8601010192508d831115614fa2575f5ffd5b6040840193505b82841015614fc4578335825260209384019390910190614fa9565b86525050602093840193919091019050614f41565b50809450505050509250925092565b5f60208284031215614ff8575f5ffd5b81518015158114610d0b575f5ffd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061504090830184614a4f565b979650505050505050565b6001600160a01b0388811682528716602082015260408101869052606081018590526080810184905260a0810183905260e060c082018190525f9061509290830184614a4f565b9998505050505050505050565b5f602082840312156150af575f5ffd5b5051919050565b818382375f9101908152919050565b81810381811115610a1a57610a1a614d7b565b63ffffffff8181168382160190811115610a1a57610a1a614d7b565b81515f90829060208501835b8281101561511e578151845260209384019390910190600101615100565b509195945050505050565b5f82518060208501845e5f920191825250919050565b60ff8281168282160390811115610a1a57610a1a614d7b565b60ff818116838216029081169081811461517457615174614d7b565b5092915050565b6001600160601b038181168382160190811115610a1a57610a1a614d7b565b6001600160601b03818116838216029081169081811461517457615174614d7b565b5f63ffffffff821663ffffffff81036151d7576151d7614d7b565b60010192915050565b7f54797065644d656d566965772f696e646578202d204f76657272616e20746865815274040ecd2caee5c40a6d8d2c6ca40d2e640c2e84060f605b1b602082015260d085811b6001600160d01b031990811660358401526e040eed2e8d040d8cadccee8d04060f608b1b603b84015285821b8116604a8401527f2e20417474656d7074656420746f20696e646578206174206f666673657420306050840152600f60fb1b60708401529084901b1660718201525f6152b6607783016e040eed2e8d040d8cadccee8d04060f608b1b8152600f0190565b6152cc818560d01b6001600160d01b0319169052565b601760f91b60068201526007810161504056fe20b6f2ac2ef95221991caf3be38efadb0bb1d3093c65d3a8c962def8d652ee00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbcbbce9c37b75586602042f686570dadc3d32ddb14a687daffcfefad2ac57b004174a9435a04d04d274c76779cad136a41fde6937c56241c09ab9d3c7064a1a9cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300fe4c86d7e89d95779292c8077b542f271e850fa895928d0b7b19a0ae50865c00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00a2646970667358221220be1211f232b058b210b5a12f6098e29a3c7e977b0586941ec9fe1771101c1c1264736f6c634300081d0033