56 txs
152 calls
constructor
constructor(address _owner, address _vault, address _accountant, address _mailbox)
functions
accountant
viewfunction accountant() view returns (address)
authority
viewfunction authority() view returns (address)
beforeTransfer
viewfunction beforeTransfer(address from) view
depositNonce
viewfunction depositNonce() view returns (uint96)
hook
viewfunction hook() view returns (address)
interchainSecurityModule
viewfunction interchainSecurityModule() view returns (address)
isPaused
viewfunction isPaused() view returns (bool)
isSupported
viewfunction isSupported(address) view returns (bool)
mailbox
viewfunction mailbox() view returns (address)
nonce
viewfunction nonce() view returns (uint128)
owner
viewfunction owner() view returns (address)
previewFee
viewfunction previewFee(uint256 shareAmount, tuple data) view returns (uint256 fee)
publicDepositHistory
viewfunction publicDepositHistory(uint256) view returns (bytes32)
selectorToChains
viewfunction selectorToChains(uint32) view returns (bool allowMessagesFrom, bool allowMessagesTo, address targetTeller, uint64 messageGasLimit, uint64 minimumMessageGas)
shareLockPeriod
viewfunction shareLockPeriod() view returns (uint64)
shareUnlockTime
viewfunction shareUnlockTime(address) view returns (uint256)
vault
viewfunction vault() view returns (address)
addAsset
nonpayablefunction addAsset(address asset)
addChain
nonpayablefunction addChain(uint32 chainSelector, bool allowMessagesFrom, bool allowMessagesTo, address targetTeller, uint64 messageGasLimit, uint64 messageGasMin)
allowMessagesFromChain
nonpayablefunction allowMessagesFromChain(uint32 chainSelector, address targetTeller)
allowMessagesToChain
nonpayablefunction allowMessagesToChain(uint32 chainSelector, address targetTeller, uint64 messageGasLimit)
bridge
payablefunction bridge(uint256 shareAmount, tuple data) payable returns (bytes32 messageId)
bulkDeposit
nonpayablefunction bulkDeposit(address depositAsset, uint256 depositAmount, uint256 minimumMint, address to) returns (uint256 shares)
bulkWithdraw
nonpayablefunction bulkWithdraw(address withdrawAsset, uint256 shareAmount, uint256 minimumAssets, address to) returns (uint256 assetsOut)
deposit
nonpayablefunction deposit(address depositAsset, uint256 depositAmount, uint256 minimumMint) returns (uint256 shares)
depositAndBridge
payablefunction depositAndBridge(address depositAsset, uint256 depositAmount, uint256 minimumMint, tuple data) payable
depositWithPermit
nonpayablefunction depositWithPermit(address depositAsset, uint256 depositAmount, uint256 minimumMint, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns (uint256 shares)
handle
payablefunction handle(uint32 origin, bytes32 sender, bytes payload) payable
pause
nonpayablefunction pause()
refundDeposit
nonpayablefunction refundDeposit(uint256 nonce, address receiver, address depositAsset, uint256 depositAmount, uint256 shareAmount, uint256 depositTimestamp, uint256 shareLockUpPeriodAtTimeOfDeposit)
removeAsset
nonpayablefunction removeAsset(address asset)
removeChain
nonpayablefunction removeChain(uint32 chainSelector)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setChainGasLimit
nonpayablefunction setChainGasLimit(uint32 chainSelector, uint64 messageGasLimit)
setHook
nonpayablefunction setHook(address _hook)
setInterchainSecurityModule
nonpayablefunction setInterchainSecurityModule(address _interchainSecurityModule)
setShareLockPeriod
nonpayablefunction setShareLockPeriod(uint64 _shareLockPeriod)
stopMessagesFromChain
nonpayablefunction stopMessagesFromChain(uint32 chainSelector)
stopMessagesToChain
nonpayablefunction stopMessagesToChain(uint32 chainSelector)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
AssetAdded
event AssetAdded(address indexed asset)
AssetRemoved
event AssetRemoved(address indexed asset)
AuthorityUpdated
event AuthorityUpdated(address indexed user, address indexed newAuthority)
BulkDeposit
event BulkDeposit(address indexed asset, uint256 depositAmount)
BulkWithdraw
event BulkWithdraw(address indexed asset, uint256 shareAmount)
ChainAdded
event ChainAdded(uint256 chainSelector, bool allowMessagesFrom, bool allowMessagesTo, address targetTeller, uint64 messageGasLimit, uint64 messageGasMin)
ChainAllowMessagesFrom
event ChainAllowMessagesFrom(uint256 chainSelector, address targetTeller)
ChainAllowMessagesTo
event ChainAllowMessagesTo(uint256 chainSelector, address targetTeller)
ChainRemoved
event ChainRemoved(uint256 chainSelector)
ChainSetGasLimit
event ChainSetGasLimit(uint256 chainSelector, uint64 messageGasLimit)
ChainStopMessagesFrom
event ChainStopMessagesFrom(uint256 chainSelector)
ChainStopMessagesTo
event ChainStopMessagesTo(uint256 chainSelector)
Deposit
event Deposit(uint256 indexed nonce, address indexed receiver, address indexed depositAsset, uint256 depositAmount, uint256 shareAmount, uint256 depositTimestamp, uint256 shareLockPeriodAtTimeOfDeposit)
DepositRefunded
event DepositRefunded(uint256 indexed nonce, bytes32 depositHash, address indexed user)
MessageReceived
event MessageReceived(bytes32 messageId, uint256 shareAmount, address to)
MessageSent
event MessageSent(bytes32 messageId, uint256 shareAmount, address to)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
Paused
event Paused()
SetInterChainSecurityModule
event SetInterChainSecurityModule(address _interchainSecurityModule)
SetPostDispatchHook
event SetPostDispatchHook(address _hook)
Unpaused
event Unpaused()
errors
MultiChainHyperlaneTellerWithMultiAssetSupport_CallerMustBeMailbox
error MultiChainHyperlaneTellerWithMultiAssetSupport_CallerMustBeMailbox(address caller)
MultiChainHyperlaneTellerWithMultiAssetSupport_InvalidBridgeFeeToken
error MultiChainHyperlaneTellerWithMultiAssetSupport_InvalidBridgeFeeToken()
MultiChainHyperlaneTellerWithMultiAssetSupport_InvalidBytes32Address
error MultiChainHyperlaneTellerWithMultiAssetSupport_InvalidBytes32Address(bytes32 _address)
MultiChainHyperlaneTellerWithMultiAssetSupport_ZeroAddressDestinationReceiver
error MultiChainHyperlaneTellerWithMultiAssetSupport_ZeroAddressDestinationReceiver()
MultiChainTellerBase_DestinationChainReceiverIsZeroAddress
error MultiChainTellerBase_DestinationChainReceiverIsZeroAddress()
MultiChainTellerBase_GasLimitExceeded
error MultiChainTellerBase_GasLimitExceeded()
MultiChainTellerBase_GasTooLow
error MultiChainTellerBase_GasTooLow()
MultiChainTellerBase_MessagesNotAllowedFrom
error MultiChainTellerBase_MessagesNotAllowedFrom(uint32 chainSelector)
MultiChainTellerBase_MessagesNotAllowedFromSender
error MultiChainTellerBase_MessagesNotAllowedFromSender(uint256 chainSelector, address sender)
MultiChainTellerBase_MessagesNotAllowedTo
error MultiChainTellerBase_MessagesNotAllowedTo(uint256 chainSelector)
MultiChainTellerBase_TargetTellerIsZeroAddress
error MultiChainTellerBase_TargetTellerIsZeroAddress()
MultiChainTellerBase_ZeroMessageGasLimit
error MultiChainTellerBase_ZeroMessageGasLimit()
TellerWithMultiAssetSupport__AssetNotSupported
error TellerWithMultiAssetSupport__AssetNotSupported()
TellerWithMultiAssetSupport__BadDepositHash
error TellerWithMultiAssetSupport__BadDepositHash()
TellerWithMultiAssetSupport__MinimumAssetsNotMet
error TellerWithMultiAssetSupport__MinimumAssetsNotMet()
TellerWithMultiAssetSupport__MinimumMintNotMet
error TellerWithMultiAssetSupport__MinimumMintNotMet()
TellerWithMultiAssetSupport__Paused
error TellerWithMultiAssetSupport__Paused()
TellerWithMultiAssetSupport__PermitFailedAndAllowanceTooLow
error TellerWithMultiAssetSupport__PermitFailedAndAllowanceTooLow()
TellerWithMultiAssetSupport__ShareLockPeriodTooLong
error TellerWithMultiAssetSupport__ShareLockPeriodTooLong()
TellerWithMultiAssetSupport__SharesAreLocked
error TellerWithMultiAssetSupport__SharesAreLocked()
TellerWithMultiAssetSupport__SharesAreUnLocked
error TellerWithMultiAssetSupport__SharesAreUnLocked()
TellerWithMultiAssetSupport__ZeroAssets
error TellerWithMultiAssetSupport__ZeroAssets()
TellerWithMultiAssetSupport__ZeroShares
error TellerWithMultiAssetSupport__ZeroShares()
creation bytecode
0x61010060405260016002819055600480546001600160601b03191690911790553480156200002b575f80fd5b5060405162003509380380620035098339810160408190526200004e91620001aa565b5f80546001600160a01b0386166001600160a01b031991821681178355600180549092169091556040518692869286928592859285928592859285928592919033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908490a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350506001600160a01b03821660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000135573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200015b91906200020f565b6200016890600a62000347565b60c0526001600160a01b0390811660a0529890981660e05250620003579950505050505050505050565b6001600160a01b0381168114620001a7575f80fd5b50565b5f805f8060808587031215620001be575f80fd5b8451620001cb8162000192565b6020860151909450620001de8162000192565b6040860151909350620001f18162000192565b6060860151909250620002048162000192565b939692955090935050565b5f6020828403121562000220575f80fd5b815160ff8116811462000231575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200028c57815f190482111562000270576200027062000238565b808516156200027e57918102915b93841c939080029062000251565b509250929050565b5f82620002a45750600162000341565b81620002b257505f62000341565b8160018114620002cb5760028114620002d657620002f6565b600191505062000341565b60ff841115620002ea57620002ea62000238565b50506001821b62000341565b5060208310610133831016604e8410600b84101617156200031b575081810a62000341565b6200032783836200024c565b805f19048211156200033d576200033d62000238565b0290505b92915050565b5f6200023160ff84168362000294565b60805160a05160c05160e051613123620003e65f395f818161072f015281816115de01528181612706015261291101525f818161108c015261208401525f81816104ff0152818161101d01526120a601525f818161083401528181610d7501528181610e15015281816110ea01528181611396015281816116e901528181611bf3015261215101526131235ff3fe60806040526004361061023e575f3560e01c80637bb4122e11610134578063bf7e214f116100b3578063de523cf311610078578063de523cf3146107a7578063e3298208146107c6578063e83931af146107e5578063f2fde38b14610804578063fbfa77cf14610823578063ffc19a0114610856575f80fd5b8063bf7e214f146106ec578063bfe1a0f21461070b578063d5438eae1461071e578063d555f36814610751578063de35f5cb14610770575f80fd5b80639d574420116100f95780639d574420146106255780639fdb11b614610644578063a69559d114610682578063affed0e014610695578063b187bd26146106cc575f80fd5b80637bb4122e1461058a5780637f5a7c7b146105a95780638456cb59146105c85780638da5cb5b146105dc5780639a94d3d0146105fa575f80fd5b80633e64ce99116101c05780634f129c53116101855780634f129c53146104b05780634fb3ccc5146104ee57806355a2d64d1461053957806356d5d475146105585780637a9e5e4b1461056b575f80fd5b80633e64ce99146104205780633f4ba83a1461043f57806345ad60631461045357806346b563f4146104725780634a5e42b114610491575f80fd5b80632264e930116102065780632264e930146102fe578063298410e51461031d5780633d4bd6fe1461033c5780633d935d9e146103e25780633dfd387314610401575f80fd5b80630e72cc06146102425780630efe6a8b1461026357806312056e2d146102955780631899ea81146102b4578063202eac57146102df575b5f80fd5b34801561024d575f80fd5b5061026161025c366004612a33565b610875565b005b34801561026e575f80fd5b5061028261027d366004612a4e565b610904565b6040519081526020015b60405180910390f35b3480156102a0575f80fd5b506102616102af366004612a9b565b610a04565b3480156102bf575f80fd5b506102826102ce366004612a33565b60066020525f908152604090205481565b3480156102ea575f80fd5b506102616102f9366004612ac7565b610a8f565b348015610309575f80fd5b50610261610318366004612afc565b610b52565b348015610328575f80fd5b50610261610337366004612a33565b610c21565b348015610347575f80fd5b506103a1610356366004612b2d565b60076020525f90815260409020805460019091015460ff808316926101008104909116916001600160a01b0362010000830416916001600160401b03600160b01b9091048116911685565b60408051951515865293151560208601526001600160a01b03909216928401929092526001600160401b03918216606084015216608082015260a00161028c565b3480156103ed575f80fd5b506102826103fc366004612b46565b610c9d565b34801561040c575f80fd5b5061026161041b366004612a33565b610ef1565b34801561042b575f80fd5b5061028261043a366004612bae565b610f70565b34801561044a575f80fd5b5061026161119f565b34801561045e575f80fd5b5061026161046d366004612b2d565b611207565b34801561047d575f80fd5b5061026161048c366004612bf5565b611290565b34801561049c575f80fd5b506102616104ab366004612a33565b61144e565b3480156104bb575f80fd5b506104de6104ca366004612a33565b60036020525f908152604090205460ff1681565b604051901515815260200161028c565b3480156104f9575f80fd5b506105217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028c565b348015610544575f80fd5b50610261610553366004612b2d565b6114c7565b610261610566366004612c55565b61155d565b348015610576575f80fd5b50610261610585366004612a33565b611768565b348015610595575f80fd5b506102616105a4366004612ce1565b61184c565b3480156105b4575f80fd5b50600954610521906001600160a01b031681565b3480156105d3575f80fd5b50610261611a11565b3480156105e7575f80fd5b505f54610521906001600160a01b031681565b348015610605575f80fd5b50610282610614366004612d57565b60056020525f908152604090205481565b348015610630575f80fd5b5061028261063f366004612bae565b611a7f565b34801561064f575f80fd5b5060045461066a90600160601b90046001600160401b031681565b6040516001600160401b03909116815260200161028c565b610282610690366004612d84565b611b6d565b3480156106a0575f80fd5b50600a546106b4906001600160801b031681565b6040516001600160801b03909116815260200161028c565b3480156106d7575f80fd5b506004546104de90600160a01b900460ff1681565b3480156106f7575f80fd5b50600154610521906001600160a01b031681565b610261610719366004612dc7565b611c7a565b348015610729575f80fd5b506105217f000000000000000000000000000000000000000000000000000000000000000081565b34801561075c575f80fd5b5061026161076b366004612b2d565b611d5a565b34801561077b575f80fd5b5060045461078f906001600160601b031681565b6040516001600160601b03909116815260200161028c565b3480156107b2575f80fd5b50600854610521906001600160a01b031681565b3480156107d1575f80fd5b506102616107e0366004612e25565b611dda565b3480156107f0575f80fd5b506102616107ff366004612a33565b611ed2565b34801561080f575f80fd5b5061026161081e366004612a33565b611f0d565b34801561082e575f80fd5b506105217f000000000000000000000000000000000000000000000000000000000000000081565b348015610861575f80fd5b50610282610870366004612d84565b611f88565b61088a335f356001600160e01b031916611f9a565b6108af5760405162461bcd60e51b81526004016108a690612e67565b60405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527ffdf87cb4494520b7a03532c602aa857e92c0f3fa7ee819170c20dc74ffb5d077906020015b60405180910390a150565b5f61091a335f356001600160e01b031916611f9a565b6109365760405162461bcd60e51b81526004016108a690612e67565b6002546001146109585760405162461bcd60e51b81526004016108a690612e8d565b60028055600454600160a01b900460ff16156109875760405163e0f9e71d60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526003602052604090205460ff166109bf5760405163645fd19f60e11b815260040160405180910390fd5b6109cb84848433612040565b90506109f8338585846004600c9054906101000a90046001600160401b03166001600160401b03166121c3565b60016002559392505050565b610a19335f356001600160e01b031916611f9a565b610a355760405162461bcd60e51b81526004016108a690612e67565b6203f480816001600160401b03161115610a6257604051631fac010160e21b815260040160405180910390fd5b600480546001600160401b03909216600160601b0267ffffffffffffffff60601b19909216919091179055565b610aa4335f356001600160e01b031916611f9a565b610ac05760405162461bcd60e51b81526004016108a690612e67565b63ffffffff82165f908152600760205260409081902080546001600160a01b038416620100000261ff01600160b01b031990911617600117815590517fe925de263dcdbdc20307c9ab92758ed8cc0edf3d173dad4a3aa54c070f27a54390610b45908590859063ffffffff9290921682526001600160a01b0316602082015260400190565b60405180910390a1505050565b610b67335f356001600160e01b031916611f9a565b610b835760405162461bcd60e51b81526004016108a690612e67565b806001600160401b03165f03610bac576040516323f0e08b60e11b815260040160405180910390fd5b63ffffffff82165f81815260076020908152604091829020805467ffffffffffffffff60b01b1916600160b01b6001600160401b038716908102919091178255835194855291840191909152917f53d0cf6aa4c6d5098568da88caa5cbffc1601722f79a7a01d6611d19d6046d2b9101610b45565b610c36335f356001600160e01b031916611f9a565b610c525760405162461bcd60e51b81526004016108a690612e67565b6001600160a01b0381165f81815260036020526040808220805460ff19166001179055517f0e3c58ebfb2e7465fbb1c32e6b4f40c3c4f5ca77e8218a386aff8617831260d79190a250565b5f610cb3335f356001600160e01b031916611f9a565b610ccf5760405162461bcd60e51b81526004016108a690612e67565b600254600114610cf15760405162461bcd60e51b81526004016108a690612e8d565b60028055600454600160a01b900460ff1615610d205760405163e0f9e71d60e01b815260040160405180910390fd5b6001600160a01b0388165f9081526003602052604090205460ff16610d585760405163645fd19f60e11b815260040160405180910390fd5b60405163d505accf60e01b81523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018990526064820187905260ff8616608483015260a4820185905260c4820184905289169063d505accf9060e4015f604051808303815f87803b158015610de3575f80fd5b505af1925050508015610df4575060015b610ea857604051636eb1769f60e11b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301528891908a169063dd62ed3e90604401602060405180830381865afa158015610e65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e899190612eb1565b1015610ea8576040516301b8851f60e41b815260040160405180910390fd5b610eb488888833612040565b9050610ee1338989846004600c9054906101000a90046001600160401b03166001600160401b03166121c3565b6001600255979650505050505050565b610f06335f356001600160e01b031916611f9a565b610f225760405162461bcd60e51b81526004016108a690612e67565b600980546001600160a01b0319166001600160a01b0383169081179091556040519081527f3a82c60c259b807daf7ec941557360f47bc3360ba8cc7ae1b6a9dd27043fdfab906020016108f9565b5f610f86335f356001600160e01b031916611f9a565b610fa25760405162461bcd60e51b81526004016108a690612e67565b6001600160a01b0385165f9081526003602052604090205460ff16610fda5760405163645fd19f60e11b815260040160405180910390fd5b835f03610ffa57604051630ea3153160e21b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b0386811660048301526110b0917f00000000000000000000000000000000000000000000000000000000000000009091169063820973da90602401602060405180830381865afa158015611064573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110889190612eb1565b85907f00000000000000000000000000000000000000000000000000000000000000006122fc565b9050828110156110d3576040516302620f6160e61b815260040160405180910390fd5b6040516318457e6160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318457e61906111279085908990869033908b90600401612ec8565b5f604051808303815f87803b15801561113e575f80fd5b505af1158015611150573d5f803e3d5ffd5b50505050846001600160a01b03167fdcc60b41ff1c604459e6aa4a7299817416b19fc586a392f111646e26597c4af98560405161118f91815260200190565b60405180910390a2949350505050565b6111b4335f356001600160e01b031916611f9a565b6111d05760405162461bcd60e51b81526004016108a690612e67565b6004805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933905f90a1565b61121c335f356001600160e01b031916611f9a565b6112385760405162461bcd60e51b81526004016108a690612e67565b63ffffffff81165f81815260076020908152604091829020805461ff0019168155915192835290917fc45af64a13a09ef916a1114c59589294ec9c3095f2bfbbb093a7a96656858ded91015b60405180910390a15050565b6112a5335f356001600160e01b031916611f9a565b6112c15760405162461bcd60e51b81526004016108a690612e67565b806112cc8342612f0f565b11156112eb57604051634c1eef1760e11b815260040160405180910390fd5b604080516001600160a01b038089166020830152871691810191909152606081018590526080810184905260a0810183905260c081018290525f9060e00160408051601f1981840301815291815281516020928301205f8b81526005909352912054909150811461136f5760405163fa174ecb60e01b815260040160405180910390fd5b5f8881526005602052604080822091909155516318457e6160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318457e61906113d3908a908a908a9083908b90600401612ec8565b5f604051808303815f87803b1580156113ea575f80fd5b505af11580156113fc573d5f803e3d5ffd5b50505050866001600160a01b0316887faf98ea774275cadfa3e477a7b52cba03e01197445a76bd5d0d561608708c36248360405161143c91815260200190565b60405180910390a35050505050505050565b611463335f356001600160e01b031916611f9a565b61147f5760405162461bcd60e51b81526004016108a690612e67565b6001600160a01b0381165f81815260036020526040808220805460ff19169055517f37803e2125c48ee96c38ddf04e826daf335b0e1603579040fd275aba6d06b6fc9190a250565b6114dc335f356001600160e01b031916611f9a565b6114f85760405162461bcd60e51b81526004016108a690612e67565b63ffffffff81165f8181526007602090815260409182902080546001600160f01b0319168155600101805467ffffffffffffffff1916905590519182527f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d591016108f9565b611565612317565b63ffffffff84165f90815260076020908152604091829020825160a081018452815460ff808216151583526101008204161515938201939093526201000083046001600160a01b0390811694820194909452600160b01b9092046001600160401b039081166060840152600190910154166080820152907f000000000000000000000000000000000000000000000000000000000000000016331461161f576040516310ae975b60e21b81523360048201526024016108a6565b60408101516001600160a01b0316841461166e578463ffffffff1661164385612344565b60405163eee37e6760e01b815260048101929092526001600160a01b031660248201526044016108a6565b805161169557604051635408978f60e11b815263ffffffff861660048201526024016108a6565b5f80806116a485870187612f22565b919450925090506001600160a01b0382166116d257604051632fe8a26160e11b815260040160405180910390fd5b604051631ceb5d1960e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906339d6ba3290611726905f908190819088908a90600401612ec8565b5f604051808303815f87803b15801561173d575f80fd5b505af115801561174f573d5f803e3d5ffd5b5050505061175e838383612374565b5050505050505050565b5f546001600160a01b03163314806117f9575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906117ba90339030906001600160e01b03195f351690600401612f57565b602060405180830381865afa1580156117d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f99190612f84565b611801575f80fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350565b611861335f356001600160e01b031916611f9a565b61187d5760405162461bcd60e51b81526004016108a690612e67565b83801561189157506001600160401b038216155b156118af576040516323f0e08b60e11b815260040160405180910390fd5b6040805160a081018252861515815285151560208083019182526001600160a01b038088168486019081526001600160401b03808916606087019081528882166080880190815263ffffffff8f165f908152600790965294889020965187549651935191518316600160b01b0267ffffffffffffffff60b01b199290951662010000029190911662010000600160f01b03199315156101000261ff00199215159290921661ffff199097169690961717919091169390931717835551600190920180549290911667ffffffffffffffff19909216919091179055517f92ca48f4323e5539c637c7a03bd3e43941aa078e4f165e1d02c7e309317c429c90611a019088908890889088908890889063ffffffff969096168652931515602086015291151560408501526001600160a01b031660608401526001600160401b0390811660808401521660a082015260c00190565b60405180910390a1505050505050565b611a26335f356001600160e01b031916611f9a565b611a425760405162461bcd60e51b81526004016108a690612e67565b6004805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752905f90a1565b5f611a95335f356001600160e01b031916611f9a565b611ab15760405162461bcd60e51b81526004016108a690612e67565b600254600114611ad35760405162461bcd60e51b81526004016108a690612e8d565b600280556001600160a01b0385165f9081526003602052604090205460ff16611b0f5760405163645fd19f60e11b815260040160405180910390fd5b611b1b85858585612040565b9050846001600160a01b03167f6f9b974223f85a1ae805c33b8b519039e2435481d949db1110de151a94d587af85604051611b5891815260200190565b60405180910390a26001600255949350505050565b5f611b83335f356001600160e01b031916611f9a565b611b9f5760405162461bcd60e51b81526004016108a690612e67565b600454600160a01b900460ff1615611bca5760405163e0f9e71d60e01b815260040160405180910390fd5b611bd3826123bd565b611bdc33611ed2565b6040516318457e6160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318457e6190611c30905f908190819033908a90600401612ec8565b5f604051808303815f87803b158015611c47575f80fd5b505af1158015611c59573d5f803e3d5ffd5b50505050611c67838361256d565b9050611c748383836127d7565b92915050565b611c8f335f356001600160e01b031916611f9a565b611cab5760405162461bcd60e51b81526004016108a690612e67565b600254600114611ccd5760405162461bcd60e51b81526004016108a690612e8d565b600280556001600160a01b0384165f9081526003602052604090205460ff16611d095760405163645fd19f60e11b815260040160405180910390fd5b5f611d1685858533612040565b9050611d43338686846004600c9054906101000a90046001600160401b03166001600160401b03166121c3565b611d4d8183611b6d565b5050600160025550505050565b611d6f335f356001600160e01b031916611f9a565b611d8b5760405162461bcd60e51b81526004016108a690612e67565b63ffffffff81165f81815260076020908152604091829020805460ff19168155915192835290917f1cb867ed6a020e020ea220d4f48bb8e36552abf9095e093e377d33933f2b31e49101611284565b611def335f356001600160e01b031916611f9a565b611e0b5760405162461bcd60e51b81526004016108a690612e67565b806001600160401b03165f03611e34576040516323f0e08b60e11b815260040160405180910390fd5b63ffffffff83165f8181526007602090815260409182902080546001600160401b038616600160b01b0267ffffffffffffffff60b01b196001600160a01b038916620100008102610100600160b01b0319909416939093176101001716178255835194855291840191909152917f34fe916485e02ec88e487b0e611e5c9bacabba9e3eaae7a900aa08be8197d419910160405180910390a150505050565b6001600160a01b0381165f90815260066020526040902054421015611f0a5760405163f64059db60e01b815260040160405180910390fd5b50565b611f22335f356001600160e01b031916611f9a565b611f3e5760405162461bcd60e51b81526004016108a690612e67565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f611f93838361282e565b9392505050565b6001545f906001600160a01b03168015801590612021575060405163b700961360e01b81526001600160a01b0382169063b700961390611fe290879030908890600401612f57565b602060405180830381865afa158015611ffd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120219190612f84565b8061203857505f546001600160a01b038581169116145b949350505050565b5f835f036120615760405163259be69560e11b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b038681166004830152612117917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000169063820973da90602401602060405180830381865afa1580156120eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061210f9190612eb1565b8691906122fc565b90508281101561213a5760405163097b2ad560e31b815260040160405180910390fd5b604051631ceb5d1960e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906339d6ba329061218e9033908990899088908890600401612ec8565b5f604051808303815f87803b1580156121a5575f80fd5b505af11580156121b7573d5f803e3d5ffd5b50505050949350505050565b6121cd8142612f9f565b6001600160a01b038681165f81815260066020908152604091829020949094556004548151948501929092529187169183019190915260608201859052608082018490524260a083015260c082018390526001600160601b03169060e00160408051601f1981840301815291815281516020928301205f848152600590935290822055600480546001600160601b03169161226783612fb2565b91906101000a8154816001600160601b0302191690836001600160601b0316021790555050846001600160a01b0316866001600160a01b0316827fe96d7872363f475d18b2f5390caaa5eaa96b2d38e42c62afe4ac08ebd2b13c3a878742886040516122ec949392919093845260208401929092526040830152606082015260800190565b60405180910390a4505050505050565b5f825f190484118302158202612310575f80fd5b5091020490565b600454600160a01b900460ff16156123425760405163e0f9e71d60e01b815260040160405180910390fd5b565b5f6001600160a01b0382111561237057604051630e51639160e41b8152600481018390526024016108a6565b5090565b60408051828152602081018590526001600160a01b038416918101919091527fb944fddc61d7fedb8b736790454ba972000703b0d21c7481d6dbf95b7c2cc2f190606001610b45565b5f6007816123ce6020850185612b2d565b63ffffffff16815260208082019290925260409081015f20815160a081018352815460ff8082161515835261010082041615159482018590526201000081046001600160a01b031693820193909352600160b01b9092046001600160401b0390811660608401526001909101541660808201529150612476576124546020830183612b2d565b604051630a8acb5760e21b815263ffffffff90911660048201526024016108a6565b60408101516001600160a01b03166124a15760405163098a923160e41b815260040160405180910390fd5b5f6124b26040840160208501612a33565b6001600160a01b0316036124d95760405163f4a986cb60e01b815260040160405180910390fd5b80606001516001600160401b03168260600160208101906124fa9190612a9b565b6001600160401b0316111561252257604051636e33764360e11b815260040160405180910390fd5b6080808201516001600160401b03169061254190840160608501612a9b565b6001600160401b0316101561256957604051637abded0b60e11b815260040160405180910390fd5b5050565b600a80546001600160801b038082166001019081166fffffffffffffffffffffffffffffffff199283161790925560405160809290921b1660208201523060601b6bffffffffffffffffffffffff191660308201524660448201525f9060640160405160208183030381529060405280519060200120905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168260400160208101906126169190612a33565b6001600160a01b03161461263d57604051631c4792a560e11b815260040160405180910390fd5b5f61264e6040840160208501612a33565b6001600160a01b03160361267557604051632fe8a26160e11b815260040160405180910390fd5b5f836126876040850160208601612a33565b6040805160208101939093526001600160a01b03909116908201526060810183905260800160408051601f1981840301815291905290505f6126fa6007826126d26020880188612b2d565b63ffffffff16815260208101919091526040015f20546201000090046001600160a01b031690565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166310b83dc0346127396020880188612b2d565b848661275c61274e60808c0160608d01612a9b565b6001600160401b03166129d3565b6009546040516001600160e01b031960e089901b16815261278d95949392916001600160a01b031690600401613024565b60206040518083038185885af11580156127a9573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127ce9190612eb1565b50505092915050565b7fe0ec62d39b054dc2fd626dbc271483735df6e6fa1ef8389754bf8ab27a75eab2818461280a6040860160208701612a33565b6040805193845260208401929092526001600160a01b031690820152606001610b45565b600a545f908190612849906001600160801b03166001613075565b6001600160801b031690505f81304660405160200161288d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012090505f858560200160208101906128ba9190612a33565b6040805160208101939093526001600160a01b03909116908201526060810183905260800160408051601f1981840301815291905290505f6129056007826126d260208a018a612b2d565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166381d2ea956129436020890189612b2d565b838561295861274e60808d0160608e01612a9b565b6009546040516001600160e01b031960e088901b16815261298995949392916001600160a01b031690600401613024565b602060405180830381865afa1580156129a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c89190612eb1565b979650505050505050565b6060611c745f833360405180602001604052805f8152506060600185858585604051602001612a0695949392919061309c565b6040516020818303038152906040529050949350505050565b6001600160a01b0381168114611f0a575f80fd5b5f60208284031215612a43575f80fd5b8135611f9381612a1f565b5f805f60608486031215612a60575f80fd5b8335612a6b81612a1f565b95602085013595506040909401359392505050565b80356001600160401b0381168114612a96575f80fd5b919050565b5f60208284031215612aab575f80fd5b611f9382612a80565b803563ffffffff81168114612a96575f80fd5b5f8060408385031215612ad8575f80fd5b612ae183612ab4565b91506020830135612af181612a1f565b809150509250929050565b5f8060408385031215612b0d575f80fd5b612b1683612ab4565b9150612b2460208401612a80565b90509250929050565b5f60208284031215612b3d575f80fd5b611f9382612ab4565b5f805f805f805f60e0888a031215612b5c575f80fd5b8735612b6781612a1f565b9650602088013595506040880135945060608801359350608088013560ff81168114612b91575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f805f8060808587031215612bc1575f80fd5b8435612bcc81612a1f565b935060208501359250604085013591506060850135612bea81612a1f565b939692955090935050565b5f805f805f805f60e0888a031215612c0b575f80fd5b873596506020880135612c1d81612a1f565b95506040880135612c2d81612a1f565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b5f805f8060608587031215612c68575f80fd5b612c7185612ab4565b93506020850135925060408501356001600160401b0380821115612c93575f80fd5b818701915087601f830112612ca6575f80fd5b813581811115612cb4575f80fd5b886020828501011115612cc5575f80fd5b95989497505060200194505050565b8015158114611f0a575f80fd5b5f805f805f8060c08789031215612cf6575f80fd5b612cff87612ab4565b95506020870135612d0f81612cd4565b94506040870135612d1f81612cd4565b93506060870135612d2f81612a1f565b9250612d3d60808801612a80565b9150612d4b60a08801612a80565b90509295509295509295565b5f60208284031215612d67575f80fd5b5035919050565b5f60a08284031215612d7e575f80fd5b50919050565b5f8060408385031215612d95575f80fd5b8235915060208301356001600160401b03811115612db1575f80fd5b612dbd85828601612d6e565b9150509250929050565b5f805f8060808587031215612dda575f80fd5b8435612de581612a1f565b9350602085013592506040850135915060608501356001600160401b03811115612e0d575f80fd5b612e1987828801612d6e565b91505092959194509250565b5f805f60608486031215612e37575f80fd5b612e4084612ab4565b92506020840135612e5081612a1f565b9150612e5e60408501612a80565b90509250925092565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b5f60208284031215612ec1575f80fd5b5051919050565b6001600160a01b039586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611c7457611c74612efb565b5f805f60608486031215612f34575f80fd5b833592506020840135612f4681612a1f565b929592945050506040919091013590565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b5f60208284031215612f94575f80fd5b8151611f9381612cd4565b80820180821115611c7457611c74612efb565b5f6001600160601b03808316818103612fcd57612fcd612efb565b6001019392505050565b5f5b83811015612ff1578181015183820152602001612fd9565b50505f910152565b5f8151808452613010816020860160208601612fd7565b601f01601f19169290920160200192915050565b63ffffffff8616815284602082015260a060408201525f61304860a0830186612ff9565b828103606084015261305a8186612ff9565b91505060018060a01b03831660808301529695505050505050565b6001600160801b0381811683821601908082111561309557613095612efb565b5092915050565b61ffff60f01b8660f01b1681528460028201528360228201526001600160601b03198360601b1660428201525f82516130dc816056850160208701612fd7565b91909101605601969550505050505056fea26469706673582212205d8692379ad961971e818182af10e88b923e5cfedd63d48e72225ceb49e991c764736f6c6343000815003300000000000000000000000004354e44ed31022716e77ec6320c04eda153010c00000000000000000000000052e4d8989fa8b3e1c06696e7b16def5d7707a0d100000000000000000000000078cba912751db70cbd77c1111a4d1add077ad99a000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239