89 txs
90 calls
constructor
constructor(address[] _assets, address[] _tellers, address _etherFiDataProvider, address _weth)
functions
CANCEL_BRIDGE_SIG
viewfunction CANCEL_BRIDGE_SIG() view returns (bytes32)
cashModule
viewfunction cashModule() view returns (address)
DEPOSIT_SIG
viewfunction DEPOSIT_SIG() view returns (bytes32)
ETH
viewfunction ETH() view returns (address)
ETHERFI_LIQUID_MODULE_ADMIN
viewfunction ETHERFI_LIQUID_MODULE_ADMIN() view returns (bytes32)
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getBridgeFee
viewfunction getBridgeFee(address liquidAsset, uint32 destEid, address destRecipient, uint256 amount) view returns (uint256)
getBridgeFeeForSafe
viewfunction getBridgeFeeForSafe(address safe) view returns (uint256)
getLiquidAssetWithdrawQueue
viewfunction getLiquidAssetWithdrawQueue(address asset) view returns (address)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
getPendingBridge
viewfunction getPendingBridge(address safe) view returns (tuple)
liquidAssetToTeller
viewfunction liquidAssetToTeller(address asset) view returns (address teller)
liquidWithdrawQueue
viewfunction liquidWithdrawQueue(address liquidToken) view returns (address boringQueue)
REQUEST_BRIDGE_SIG
viewfunction REQUEST_BRIDGE_SIG() view returns (bytes32)
weth
viewfunction weth() view returns (address)
WITHDRAW_SIG
viewfunction WITHDRAW_SIG() view returns (bytes32)
addLiquidAssets
nonpayablefunction addLiquidAssets(address[] liquidAssets, address[] tellers)
cancelBridge
nonpayablefunction cancelBridge(address safe, address[] signers, bytes[] signatures)
cancelBridgeByCashModule
nonpayablefunction cancelBridgeByCashModule(address safe)
deposit
nonpayablefunction deposit(address safe, address assetToDeposit, address liquidAsset, uint256 amountToDeposit, uint256 minReturn, address signer, bytes signature)
executeBridge
payablefunction executeBridge(address safe) payable
removeLiquidAsset
nonpayablefunction removeLiquidAsset(address[] liquidAssets)
requestBridge
payablefunction requestBridge(address safe, uint32 destEid, address asset, uint256 amount, address destRecipient, address[] signers, bytes[] signatures) payable
setLiquidAssetWithdrawQueue
nonpayablefunction setLiquidAssetWithdrawQueue(address asset, address boringQueue)
setupModule
nonpayablefunction setupModule(bytes data)
withdraw
nonpayablefunction withdraw(address safe, address liquidAsset, address assetOut, uint128 amountToWithdraw, uint128 minReturn, uint16 discount, uint24 secondsToDeadline, address signer, bytes signature)
events
LiquidAssetsAdded
event LiquidAssetsAdded(address[] liquidAssets, address[] tellers)
LiquidAssetsRemoved
event LiquidAssetsRemoved(address[] liquidAssets)
LiquidBridgeCancelled
event LiquidBridgeCancelled(address indexed safe, address indexed liquidAsset, uint32 destEid, address indexed destRecipient, uint256 amount)
LiquidBridgeExecuted
event LiquidBridgeExecuted(address indexed safe, address indexed liquidAsset, address indexed destRecipient, uint32 destEid, uint256 amount, uint256 bridgeFee)
LiquidBridgeRequested
event LiquidBridgeRequested(address indexed safe, address indexed liquidAsset, uint32 destEid, address indexed destRecipient, uint256 amount)
LiquidDeposit
event LiquidDeposit(address indexed safe, address indexed inputToken, address indexed outputToken, uint256 inputAmount, uint256 outputAmount)
LiquidWithdrawal
event LiquidWithdrawal(address indexed safe, address indexed liquidAsset, uint256 amountToWithdraw, uint256 amountOut)
LiquidWithdrawQueueSet
event LiquidWithdrawQueueSet(address indexed token, address indexed boringQueue)
errors
AmountNotAvailable
error AmountNotAvailable()
ArrayLengthMismatch
error ArrayLengthMismatch()
AssetNotSupportedForDeposit
error AssetNotSupportedForDeposit()
CannotFindMatchingWithdrawalForSafe
error CannotFindMatchingWithdrawalForSafe()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InsufficientAvailableBalanceOnSafe
error InsufficientAvailableBalanceOnSafe()
InsufficientNativeFee
error InsufficientNativeFee()
InsufficientReturnAmount
error InsufficientReturnAmount()
InvalidBoringQueue
error InvalidBoringQueue()
InvalidConfiguration
error InvalidConfiguration()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
InvalidValue
error InvalidValue()
LiquidWithdrawConfigNotSet
error LiquidWithdrawConfigNotSet()
NativeTransferFailed
error NativeTransferFailed()
NoWithdrawalQueuedForLiquid
error NoWithdrawalQueuedForLiquid()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlySafeAdmin
error OnlySafeAdmin()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
Unauthorized
error Unauthorized()
UnsupportedLiquidAsset
error UnsupportedLiquidAsset()
creation bytecode
0x60e060405234801561000f575f5ffd5b5060405161496f38038061496f83398101604081905261002e91610404565b81806001600160a01b0381166100575760405163b4fa3fb360e01b815260040160405180910390fd5b806001600160a01b03166080816001600160a01b03168152505050806001600160a01b031663882d16986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d2919061048e565b6001600160a01b031660a052508351835181146101025760405163512509d360e11b815260040160405180910390fd5b6001600160a01b038316158061011f57506001600160a01b038216155b1561013d5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b03821660c0525f5b8181101561031b575f6001600160a01b0316868281518110610170576101706104b0565b60200260200101516001600160a01b031614806101b757505f6001600160a01b03168582815181106101a4576101a46104b0565b60200260200101516001600160a01b0316145b156101d55760405163b4fa3fb360e01b815260040160405180910390fd5b8581815181106101e7576101e76104b0565b60200260200101516001600160a01b031685828151811061020a5761020a6104b0565b60200260200101516001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610271919061048e565b6001600160a01b0316146102985760405163c52a9bd360e01b815260040160405180910390fd5b8481815181106102aa576102aa6104b0565b60200260200101515f5f8884815181106102c6576102c66104b0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600101905061014c565b5050505050506104c4565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b038116811461034e575f5ffd5b50565b805161035c8161033a565b919050565b5f82601f830112610370575f5ffd5b81516001600160401b0381111561038957610389610326565b604051600582901b90603f8201601f191681016001600160401b03811182821017156103b7576103b7610326565b6040529182526020818501810192908101868411156103d4575f5ffd5b6020860192505b838310156103fa576103ec83610351565b8152602092830192016103db565b5095945050505050565b5f5f5f5f60808587031215610417575f5ffd5b84516001600160401b0381111561042c575f5ffd5b61043887828801610361565b602087015190955090506001600160401b03811115610455575f5ffd5b61046187828801610361565b93505060408501516104728161033a565b60608601519092506104838161033a565b939692955090935050565b5f6020828403121561049e575f5ffd5b81516104a98161033a565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c0516143f561057a5f395f81816102950152818161214401528181612239015281816122e701526123dc01525f818161024201528181610b7201528181610cac01528181610ec301528181610f7301528181612efb01528181612fa7015261324e01525f81816105eb0152818161060f0152818161086d01528181610a5301528181610d97015281816110dd01528181611248015281816113a2015281816117350152611a2101526143f55ff3fe60806040526004361061013f575f3560e01c806371e5dc81116100af57806371e5dc811461035b5780637c0691b31461037a5780638322fff2146103995780638a2e5c3d146103c0578063909030d5146103f35780639e673bc314610411578063a66e9d0a14610444578063b176806514610463578063c760e2ff14610496578063ceb5724714610575578063d17a613114610588578063d41f1771146105a7578063f9fba81b146105da575f5ffd5b80630a44077a146101435780631eb2b17e1461018d5780632b03a50c146101c45780632d0335ab146101e55780632db274c8146102125780633575f0de1461023157806339f1bc2c146102645780633fc8cef31461028457806343832054146102b75780635988e7a1146102eb57806360b72616146102fe57806363baa2601461031d578063709b0f511461033c575b5f5ffd5b34801561014e575f5ffd5b5061017761015d366004613566565b5f602081905290815260409020546001600160a01b031681565b6040516101849190613581565b60405180910390f35b348015610198575f5ffd5b506101776101a7366004613566565b6001600160a01b039081165f908152600160205260409020541690565b3480156101cf575f5ffd5b506101e36101de366004613595565b61060d565b005b3480156101f0575f5ffd5b506102046101ff366004613566565b610844565b604051908152602001610184565b34801561021d575f5ffd5b506101e361022c366004613566565b61086b565b34801561023c575f5ffd5b506101777f000000000000000000000000000000000000000000000000000000000000000081565b34801561026f575f5ffd5b506102045f5160206143a95f395f51905f5281565b34801561028f575f5ffd5b506101777f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c2575f5ffd5b506101776102d1366004613566565b60016020525f90815260409020546001600160a01b031681565b6101e36102f9366004613566565b610a32565b348015610309575f5ffd5b506101e3610318366004613613565b610d76565b348015610328575f5ffd5b506101e36103373660046136d0565b6110c4565b348015610347575f5ffd5b506101e361035636600461379f565b61122f565b348015610366575f5ffd5b506101e3610375366004613870565b6113a0565b348015610385575f5ffd5b506101e36103943660046138da565b611733565b3480156103a4575f5ffd5b5061017773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156103cb575f5ffd5b506102047f6aa129b587db2f56b32662e4af4556cdc69b6228434cb2791c6377894b40bf2c81565b3480156103fe575f5ffd5b506101e361040d366004613918565b5050565b34801561041c575f5ffd5b506102047f7360ecb005ef445b1cb2b3a294f2c499b088f258b4531fffbc4c244d8cf7732381565b34801561044f575f5ffd5b5061020461045e36600461395d565b61190a565b34801561046e575f5ffd5b506102047f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156104a1575f5ffd5b5061052d6104b0366004613566565b604080516080810182525f808252602082018190529181018290526060810191909152506001600160a01b039081165f908152600260208181526040928390208351608081018552815463ffffffff81168252600160201b9004861692810192909252600181015493820193909352910154909116606082015290565b6040516101849190815163ffffffff1681526020808301516001600160a01b039081169183019190915260408084015190830152606092830151169181019190915260800190565b6101e36105833660046139a9565b611a00565b348015610593575f5ffd5b506102046105a2366004613566565b611ae4565b3480156105b2575f5ffd5b506102047f48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be0181565b3480156105e5575f5ffd5b506101777f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610669573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068d9190613a68565b6001600160a01b03166391d148545f5160206143a95f395f51905f52336040518363ffffffff1660e01b81526004016106c7929190613a83565b602060405180830381865afa1580156106e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107069190613aa9565b610722576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038216158061073f57506001600160a01b038116155b1561075d57604051632a9ffab760e21b815260040160405180910390fd5b806001600160a01b031663f3b977846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610799573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bd9190613a68565b6001600160a01b0316826001600160a01b0316146107ee576040516335c66c9960e01b815260040160405180910390fd5b6001600160a01b038281165f8181526001602052604080822080546001600160a01b0319169486169485179055517fdd001770b3f22fb8a32aee0705976d01646098f9c1254e8064d2ee09184490189190a35050565b5f61084d611b7e565b6001600160a01b039092165f90815260209290925250604090205490565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663882d16986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108eb9190613a68565b6001600160a01b0316336001600160a01b03161461091b576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038082165f908152600260208181526040928390208351608081018552815463ffffffff81168252600160201b90048616928101929092526001810154938201939093529101549091166060820181905261097b575050565b80606001516001600160a01b031681602001516001600160a01b0316836001600160a01b03167f2e3c65d07c4fc7496e4f35bdc83c653debda281afe443cf6f2d2b0e4d02d6783845f015185604001516040516109ea92919063ffffffff929092168252602082015260400190565b60405180910390a4506001600160a01b03165f908152600260208190526040822080546001600160c01b031916815560018101929092550180546001600160a01b0319169055565b610a3a611ba2565b60405163b7ca418b60e01b815281906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90610a88908490600401613581565b602060405180830381865afa158015610aa3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac79190613aa9565b610ae4576040516334d0b49960e01b815260040160405180910390fd5b6001600160a01b038083165f908152600260208181526040928390208351608081018552815463ffffffff81168252600160201b900486169281019290925260018101549382019390935291015490911660608201819052610b5957604051638a88784960e01b815260040160405180910390fd5b604051631c13359160e11b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338266b2290610ba7908790600401613581565b5f60405180830381865afa158015610bc1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610be89190810190613de0565b6020015160408101519091506001600160a01b031630141580610c0e5750805151600114155b80610c4b575081602001516001600160a01b0316815f01515f81518110610c3757610c37613e98565b60200260200101516001600160a01b031614155b80610c775750816040015181602001515f81518110610c6c57610c6c613e98565b602002602001015114155b15610c955760405163a78fbb5f60e01b815260040160405180910390fd5b604051631e0d280960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633c1a501290610ce1908790600401613581565b5f604051808303815f87803b158015610cf8575f5ffd5b505af1158015610d0a573d5f5f3e3d5ffd5b50505050610d2a848360200151845f015185606001518660400151611beb565b5050506001600160a01b0381165f908152600260208190526040822080546001600160c01b031916815560018101929092550180546001600160a01b0319169055610d73611ddb565b50565b610d7e611ba2565b60405163b7ca418b60e01b815285906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90610dcc908490600401613581565b602060405180830381865afa158015610de7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0b9190613aa9565b610e28576040516334d0b49960e01b815260040160405180910390fd5b610e358686868686611df2565b6001600160a01b038087165f908152600260208181526040928390208351608081018552815463ffffffff81168252600160201b900486169281019290925260018101549382019390935291015490911660608201819052610eaa57604051638a88784960e01b815260040160405180910390fd5b604051631c13359160e11b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338266b2290610ef8908b90600401613581565b5f60405180830381865afa158015610f12573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f399190810190613de0565b9050306001600160a01b03168160200151604001516001600160a01b031603610fd65760405163526cd20560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a4d9a40a90610fa8908b90600401613581565b5f604051808303815f87803b158015610fbf575f5ffd5b505af1158015610fd1573d5f5f3e3d5ffd5b505050505b6001600160a01b038881165f90815260026020526040902054600160201b900416156110b25781606001516001600160a01b031682602001516001600160a01b0316896001600160a01b03167f2e3c65d07c4fc7496e4f35bdc83c653debda281afe443cf6f2d2b0e4d02d6783855f0151866040015160405161106b92919063ffffffff929092168252602082015260400190565b60405180910390a46001600160a01b0388165f908152600260208190526040822080546001600160c01b031916815560018101929092550180546001600160a01b03191690555b5050506110bd611ddb565b5050505050565b60405163b7ca418b60e01b815288906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90611112908490600401613581565b602060405180830381865afa15801561112d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111519190613aa9565b61116e576040516334d0b49960e01b815260040160405180910390fd5b8884816001600160a01b03166324d7806c826040518263ffffffff1660e01b815260040161119c9190613581565b602060405180830381865afa1580156111b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111db9190613aa9565b6111f857604051632afafb8760e21b815260040160405180910390fd5b5f6112068c8c8c8c8c611f98565b905061121481888888612025565b6112218c8c8c8c8c61208b565b505050505050505050505050565b60405163b7ca418b60e01b81528a906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b9061127d908490600401613581565b602060405180830381865afa158015611298573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bc9190613aa9565b6112d9576040516334d0b49960e01b815260040160405180910390fd5b8a84816001600160a01b03166324d7806c826040518263ffffffff1660e01b81526004016113079190613581565b602060405180830381865afa158015611322573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113469190613aa9565b61136357604051632afafb8760e21b815260040160405180910390fd5b5f6113738e8e8e8e8e8e8e61285b565b905061138181888888612025565b6113908e8e8e8e8e8e8e6128ea565b5050505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114209190613a68565b6001600160a01b03166391d148545f5160206143a95f395f51905f52336040518363ffffffff1660e01b815260040161145a929190613a83565b602060405180830381865afa158015611475573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114999190613aa9565b6114b5576040516282b42960e81b815260040160405180910390fd5b828181146114d65760405163512509d360e11b815260040160405180910390fd5b805f036114f65760405163b4fa3fb360e01b815260040160405180910390fd5b5f5b818110156116ee575f86868381811061151357611513613e98565b90506020020160208101906115289190613566565b6001600160a01b0316148061156b57505f84848381811061154b5761154b613e98565b90506020020160208101906115609190613566565b6001600160a01b0316145b156115895760405163b4fa3fb360e01b815260040160405180910390fd5b85858281811061159b5761159b613e98565b90506020020160208101906115b09190613566565b6001600160a01b03168484838181106115cb576115cb613e98565b90506020020160208101906115e09190613566565b6001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163f9190613a68565b6001600160a01b0316146116665760405163c52a9bd360e01b815260040160405180910390fd5b83838281811061167857611678613e98565b905060200201602081019061168d9190613566565b5f5f8888858181106116a1576116a1613e98565b90506020020160208101906116b69190613566565b6001600160a01b03908116825260208201929092526040015f2080546001600160a01b031916929091169190911790556001016114f8565b507feb3d2ee89a264650a8a29fb1c1be99f36ba69e616861cd44feb7cc77dca9fd53858585856040516117249493929190613ef4565b60405180910390a15050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b39190613a68565b6001600160a01b03166391d148545f5160206143a95f395f51905f52336040518363ffffffff1660e01b81526004016117ed929190613a83565b602060405180830381865afa158015611808573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182c9190613aa9565b611848576040516282b42960e81b815260040160405180910390fd5b805f81900361186a5760405163b4fa3fb360e01b815260040160405180910390fd5b5f5b818110156118cb575f5f85858481811061188857611888613e98565b905060200201602081019061189d9190613566565b6001600160a01b0316815260208101919091526040015f2080546001600160a01b031916905560010161186c565b507f367cb6a9904bc3ce17bcf0727db772a2c5533312a93548f9714612928a9feeb483836040516118fd929190613f1a565b60405180910390a1505050565b6001600160a01b038085165f90815260208190526040812054909116806119445760405163f66d0cc960e01b815260040160405180910390fd5b6040805163ffffffff871660208201525f91016040516020818303038152906040529050816001600160a01b031663d7424e3361198086612cab565b878473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040518563ffffffff1660e01b81526004016119b69493929190613f63565b602060405180830381865afa1580156119d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f59190613fae565b979650505050505050565b611a08611ba2565b60405163b7ca418b60e01b815289906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90611a56908490600401613581565b602060405180830381865afa158015611a71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a959190613aa9565b611ab2576040516334d0b49960e01b815260040160405180910390fd5b611ac38a898b898b8a8a8a8a612ce7565b611ad08a898b898b612e51565b50611ad9611ddb565b505050505050505050565b6001600160a01b038082165f9081526002602081815260408084208151608081018352815463ffffffff81168252600160201b90048716938101939093526001810154918301919091529091015490921660608301819052909190611b5c57604051638a88784960e01b815260040160405180910390fd5b611b778160200151825f01518360600151846040015161190a565b9392505050565b7f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d0090565b5f5160206143c95f395f51905f525c15611bcf57604051633ee5aeb560e01b815260040160405180910390fd5b611be960015f5160206143c95f395f51905f525b906130e3565b565b6001600160a01b038085165f908152602081905260409020541680611c235760405163f66d0cc960e01b815260040160405180910390fd5b6040805163ffffffff861660208201525f910160405160208183030381529060405290505f826001600160a01b031663d7424e33611c6086612cab565b878573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040518563ffffffff1660e01b8152600401611c969493929190613f63565b602060405180830381865afa158015611cb1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd59190613fae565b905080471015611cf857604051639c92bdfb60e01b815260040160405180910390fd5b826001600160a01b0316630592174082611d1187612cab565b888673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee876040518763ffffffff1660e01b8152600401611d49959493929190613fc5565b5f604051808303818588803b158015611d60575f5ffd5b505af1158015611d72573d5f5f3e3d5ffd5b50506040805163ffffffff8b168152602081018990529081018590526001600160a01b03808a1694508b811693508c1691507f089e0f7208f8fc06b9f41edffa576cac33d3135cb9f438dbb23abeebc96ea1949060600160405180910390a45050505050505050565b611be95f5f5160206143c95f395f51905f52611be3565b5f611efd7f6aa129b587db2f56b32662e4af4556cdc69b6228434cb2791c6377894b40bf2c4630896001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611e56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7a9190613fae565b6040805160208101959095528401929092526001600160601b0319606091821b811682850152607484019290925289901b16609482015260a8015b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b60405163a732422d60e01b81529091506001600160a01b0387169063a732422d90611f34908490899089908990899060040161403c565b602060405180830381865afa158015611f4f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f739190613aa9565b611f905760405163274cf40160e01b815260040160405180910390fd5b505050505050565b5f61201b7f48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be014630611fc88a6130ea565b604080516001600160a01b03808d1660208301528b169181019190915260608101899052608081018890528b9060a0015b60408051601f1981840301815290829052611eb59695949392916020016140f7565b9695505050505050565b6120688383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525089949392505061311b9050565b61208557604051638baa579f60e01b815260040160405180910390fd5b50505050565b6001600160a01b038084165f9081526020819052604090205416806120c35760405163f66d0cc960e01b815260040160405180910390fd5b8215806120ce575081155b156120ec5760405163b4fa3fb360e01b815260040160405180910390fd5b6120f78686856131ca565b6060808073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b0389160161245e576040516320ff722560e11b81526001600160a01b038516906341fee44a9061216c907f000000000000000000000000000000000000000000000000000000000000000090600401613581565b606060405180830381865afa158015612187573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ab9190614148565b516121c9576040516308148def60e11b815260040160405180910390fd5b6040805160038082526080820190925290602082016060803683370190505060408051600380825260808201909252919450816020015b606081526020019060019003908161220057505060408051600380825260808201909252919350602082016060803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000835f8151811061226a5761226a613e98565b6001600160a01b0390921660209283029190910182015260408051600481526024810190915290810180516001600160e01b0316630d0e30db60e41b179052825183905f906122bb576122bb613e98565b602002602001018190525085815f815181106122d9576122d9613e98565b6020026020010181815250507f00000000000000000000000000000000000000000000000000000000000000008360018151811061231957612319613e98565b6001600160a01b039092166020928302919091019091015260405163095ea7b360e01b9061234d90899089906024016141b5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508260018151811061239357612393613e98565b602002602001018190525083836002815181106123b2576123b2613e98565b6001600160a01b0390921660209283029190910190910152604051630efe6a8b60e01b90612408907f000000000000000000000000000000000000000000000000000000000000000090899089906024016141ce565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508260028151811061244e5761244e613e98565b6020026020010181905250612687565b6040516320ff722560e11b81526001600160a01b038516906341fee44a9061248a908b90600401613581565b606060405180830381865afa1580156124a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c99190614148565b516124e7576040516308148def60e11b815260040160405180910390fd5b60408051600280825260608201835290916020830190803683370190505060408051600280825260608201909252919450816020015b606081526020019060019003908161251d575050604080516002808252606082018352929450919060208301908036833701905050905087835f8151811061256757612567613e98565b6001600160a01b039092166020928302919091019091015260405163095ea7b360e01b9061259b90899089906024016141b5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050825f815181106125e0576125e0613e98565b602002602001018190525083836001815181106125ff576125ff613e98565b6001600160a01b0390921660209283029190910190910152604051630efe6a8b60e01b90612635908a90899089906024016141ce565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508260018151811061267b5761267b613e98565b60200260200101819052505b6040516370a0823160e01b81525f906001600160a01b038916906370a08231906126b5908d90600401613581565b602060405180830381865afa1580156126d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f49190613fae565b604051632f378c5f60e21b81529091506001600160a01b038b169063bcde317c9061272790879086908890600401614249565b5f604051808303815f87803b15801561273e575f5ffd5b505af1158015612750573d5f5f3e3d5ffd5b505050505f81896001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016127829190613581565b602060405180830381865afa15801561279d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c19190613fae565b6127cb91906142db565b9050868110156127ee5760405163cea9e31d60e01b815260040160405180910390fd5b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167f9f98725972b4a57ffe3d55d47002c227624652f061fa0498dc1aeb46e47e6cd68b85604051612846929190918252602082015260400190565b60405180910390a45050505050505050505050565b5f6128de7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77463061288b8c6130ea565b604080516001600160a01b03808f1660208301528d16918101919091526001600160801b03808c1660608301528a16608082015261ffff891660a082015262ffffff881660c08201528d9060e001611ff9565b98975050505050505050565b6001600160a01b038087165f90815260016020526040902054168061292257604051631d08fca760e11b815260040160405180910390fd5b846001600160801b03165f0361294b5760405163b4fa3fb360e01b815260040160405180910390fd5b61295f8888876001600160801b03166131ca565b60405163734d18e160e11b81526001600160a01b0387811660048301526001600160801b038716602483015261ffff851660448301525f919083169063e69a31c290606401602060405180830381865afa1580156129bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e391906142fa565b9050846001600160801b0316816001600160801b03161015612a185760405163cea9e31d60e01b815260040160405180910390fd5b6040805160028082526060820183525f926020830190803683375050604080516002808252606082019092529293505f929150602082015b6060815260200190600190039081612a505750506040805160028082526060820183529293505f9290916020830190803683370190505090508a835f81518110612a9c57612a9c613e98565b6001600160a01b03928316602091820292909201015260405190861660248201526001600160801b038a16604482015263095ea7b360e01b90606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050825f81518110612b1d57612b1d613e98565b60200260200101819052508483600181518110612b3c57612b3c613e98565b6001600160a01b039283166020918202929092010152604051908b1660248201526001600160801b038a16604482015261ffff8816606482015262ffffff871660848201526335d9da3b60e11b9060a401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505082600181518110612bd357612bd3613e98565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b038d169063bcde317c90612c0e90869085908790600401614249565b5f604051808303815f87803b158015612c25575f5ffd5b505af1158015612c37573d5f5f3e3d5ffd5b505050508a6001600160a01b03168c6001600160a01b03167fcb39f8bb1228be3c7badb0539f9fa2f31dcdb4a60a5e83d8c4bcf543341d8dd68b87604051612c959291906001600160801b0392831681529116602082015260400190565b60405180910390a3505050505050505050505050565b5f6001600160601b03821115612ce3576040516306dfcc6560e41b815260606004820152602481018390526044015b60405180910390fd5b5090565b5f612db27f7360ecb005ef445b1cb2b3a294f2c499b088f258b4531fffbc4c244d8cf7732346308d6001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015612d4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6f9190613fae565b8e8e8e8e8e604051602001611ff994939291906001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405163a732422d60e01b81529091506001600160a01b038b169063a732422d90612de9908490899089908990899060040161403c565b602060405180830381865afa158015612e04573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e289190613aa9565b612e455760405163274cf40160e01b815260040160405180910390fd5b50505050505050505050565b6001600160a01b0384161580612e65575080155b80612e7757506001600160a01b038216155b15612e955760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b038085165f908152602081905260409020541680612ecd5760405163f66d0cc960e01b815260040160405180910390fd5b604051635c463eed60e11b81526001600160a01b0387811660048301528681166024830152604482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b88c7dda906064015f604051808303815f87803b158015612f3c575f5ffd5b505af1158015612f4e573d5f5f3e3d5ffd5b50506040805163ffffffff88168152602081018690526001600160a01b03808816945089811693508a16917f24e6075c9cd2aa1789761b7a7160092f3d7fabdd9acc044929f56009b2431ce2910160405180910390a45f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636bc07b2b6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613001573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130259190614315565b50509050806001600160401b03165f0361304b576130468787878787611beb565b6130da565b6040805160808101825263ffffffff80881682526001600160a01b03808a1660208085019182528486018981528a8416606087019081528e85165f908152600293849052979097209551865493518516600160201b026001600160c01b031990941695169490941791909117845591516001840155925191018054919092166001600160a01b03199091161790555b50505050505050565b80825d5050565b5f5f6130f4611b7e565b6001600160a01b039093165f90815260209390935250506040902080546001810190915590565b5f823b156131a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906131539088908790600401614355565b602060405180830381865afa15801561316e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613192919061436d565b6001600160e01b031916149050611b77565b826001600160a01b03166131b885846131f9565b6001600160a01b031614949350505050565b6131d48383613223565b8111156131f45760405163fe6beeaf60e01b815260040160405180910390fd5b505050565b5f5f5f5f6132078686613383565b92509250925061321782826133cc565b50909150505b92915050565b6040516364698e8360e11b81526001600160a01b03838116600483015282811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063c8d31d0690604401602060405180830381865afa158015613293573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132b79190613fae565b90505f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038516016132f057506001600160a01b0384163161335e565b6040516370a0823160e01b81526001600160a01b038516906370a082319061331c908890600401613581565b602060405180830381865afa158015613337573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335b9190613fae565b90505b80821115613370575f9250505061321d565b61337a82826142db565b95945050505050565b5f5f5f83516041036133ba576020840151604085015160608601515f1a6133ac88828585613484565b9550955095505050506133c5565b505081515f91506002905b9250925092565b5f8260038111156133df576133df614394565b036133e8575050565b60018260038111156133fc576133fc614394565b0361341a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561342e5761342e614394565b0361344f5760405163fce698f760e01b815260048101829052602401612cda565b600382600381111561346357613463614394565b0361040d576040516335e2f38360e21b815260048101829052602401612cda565b5f80806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156134b357505f91506003905082613538565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613504573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661352f57505f925060019150829050613538565b92505f91508190505b9450945094915050565b6001600160a01b0381168114610d73575f5ffd5b803561356181613542565b919050565b5f60208284031215613576575f5ffd5b8135611b7781613542565b6001600160a01b0391909116815260200190565b5f5f604083850312156135a6575f5ffd5b82356135b181613542565b915060208301356135c181613542565b809150509250929050565b5f5f83601f8401126135dc575f5ffd5b5081356001600160401b038111156135f2575f5ffd5b6020830191508360208260051b850101111561360c575f5ffd5b9250929050565b5f5f5f5f5f60608688031215613627575f5ffd5b853561363281613542565b945060208601356001600160401b0381111561364c575f5ffd5b613658888289016135cc565b90955093505060408601356001600160401b03811115613676575f5ffd5b613682888289016135cc565b969995985093965092949392505050565b5f5f83601f8401126136a3575f5ffd5b5081356001600160401b038111156136b9575f5ffd5b60208301915083602082850101111561360c575f5ffd5b5f5f5f5f5f5f5f5f60e0898b0312156136e7575f5ffd5b88356136f281613542565b9750602089013561370281613542565b9650604089013561371281613542565b9550606089013594506080890135935060a089013561373081613542565b925060c08901356001600160401b0381111561374a575f5ffd5b6137568b828c01613693565b999c989b5096995094979396929594505050565b6001600160801b0381168114610d73575f5ffd5b61ffff81168114610d73575f5ffd5b803562ffffff81168114613561575f5ffd5b5f5f5f5f5f5f5f5f5f5f6101208b8d0312156137b9575f5ffd5b8a356137c481613542565b995060208b01356137d481613542565b985060408b01356137e481613542565b975060608b01356137f48161376a565b965060808b01356138048161376a565b955060a08b01356138148161377e565b945061382260c08c0161378d565b935061383060e08c01613556565b92506101008b01356001600160401b0381111561384b575f5ffd5b6138578d828e01613693565b915080935050809150509295989b9194979a5092959850565b5f5f5f5f60408587031215613883575f5ffd5b84356001600160401b03811115613898575f5ffd5b6138a4878288016135cc565b90955093505060208501356001600160401b038111156138c2575f5ffd5b6138ce878288016135cc565b95989497509550505050565b5f5f602083850312156138eb575f5ffd5b82356001600160401b03811115613900575f5ffd5b61390c858286016135cc565b90969095509350505050565b5f5f60208385031215613929575f5ffd5b82356001600160401b0381111561393e575f5ffd5b61390c85828601613693565b803563ffffffff81168114613561575f5ffd5b5f5f5f5f60808587031215613970575f5ffd5b843561397b81613542565b93506139896020860161394a565b9250604085013561399981613542565b9396929550929360600135925050565b5f5f5f5f5f5f5f5f5f60e08a8c0312156139c1575f5ffd5b89356139cc81613542565b98506139da60208b0161394a565b975060408a01356139ea81613542565b965060608a0135955060808a0135613a0181613542565b945060a08a01356001600160401b03811115613a1b575f5ffd5b613a278c828d016135cc565b90955093505060c08a01356001600160401b03811115613a45575f5ffd5b613a518c828d016135cc565b915080935050809150509295985092959850929598565b5f60208284031215613a78575f5ffd5b8151611b7781613542565b9182526001600160a01b0316602082015260400190565b80518015158114613561575f5ffd5b5f60208284031215613ab9575f5ffd5b611b7782613a9a565b805161356181613542565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b0381118282101715613b0457613b04613acd565b60405290565b604051608081016001600160401b0381118282101715613b0457613b04613acd565b60405160c081016001600160401b0381118282101715613b0457613b04613acd565b604051601f8201601f191681016001600160401b0381118282101715613b7657613b76613acd565b604052919050565b80516001600160401b0381168114613561575f5ffd5b5f6101608284031215613ba5575f5ffd5b613bad613ae1565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a080840151908201529050613bf160c08301613b7e565b60c0820152613c0260e08301613b7e565b60e0820152613c146101008301613b7e565b610100820152613c276101208301613b7e565b6101208201526101409182015191810191909152919050565b5f6001600160401b03821115613c5857613c58613acd565b5060051b60200190565b5f82601f830112613c71575f5ffd5b8151613c84613c7f82613c40565b613b4e565b8082825260208201915060208360051b860101925085831115613ca5575f5ffd5b602085015b83811015613cc2578051835260209283019201613caa565b5095945050505050565b80516001600160601b0381168114613561575f5ffd5b5f60808284031215613cf2575f5ffd5b613cfa613b0a565b905081516001600160401b03811115613d11575f5ffd5b8201601f81018413613d21575f5ffd5b8051613d2f613c7f82613c40565b8082825260208201915060208360051b850101925086831115613d50575f5ffd5b6020840193505b82841015613d7b578351613d6a81613542565b825260209384019390910190613d57565b845250505060208201516001600160401b03811115613d98575f5ffd5b613da484828501613c62565b602083015250613db660408301613ac2565b6040820152613dc760608301613ccc565b606082015292915050565b805160028110613561575f5ffd5b5f60208284031215613df0575f5ffd5b81516001600160401b03811115613e05575f5ffd5b82016102008185031215613e17575f5ffd5b613e1f613b2c565b613e298583613b94565b81526101608201516001600160401b03811115613e44575f5ffd5b613e5086828501613ce2565b602083015250613e636101808301613dd2565b60408201526101a082015160608201526101c08201516080820152613e8b6101e08301613dd2565b60a0820152949350505050565b634e487b7160e01b5f52603260045260245ffd5b8183526020830192505f815f5b84811015613eea578135613ecc81613542565b6001600160a01b031686526020958601959190910190600101613eb9565b5093949350505050565b604081525f613f07604083018688613eac565b82810360208401526119f5818587613eac565b602081525f613f2d602083018486613eac565b949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160601b03851681526001600160a01b03841660208201526080604082018190525f90613f9590830185613f35565b905060018060a01b038316606083015295945050505050565b5f60208284031215613fbe575f5ffd5b5051919050565b6001600160601b03861681526001600160a01b038516602082015260a0604082018190525f90613ff790830186613f35565b6001600160a01b0394909416606083015250608001529392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b858152606060208201525f614055606083018688613eac565b8281036040840152838152602080820190600586901b830101865f36829003601e19015b888210156140e657858403601f190185528235818112614097575f5ffd5b8a016020810190356001600160401b038111156140b2575f5ffd5b8036038213156140c0575f5ffd5b6140cb868284614014565b95505050602083019250602085019450600182019150614079565b50919b9a5050505050505050505050565b86815260208082018790526001600160601b0319606087811b821660408501526054840187905285901b16607483015282515f9181908501608885015e5f9201608801918252509695505050505050565b5f6060828403128015614159575f5ffd5b50604051606081016001600160401b038111828210171561417c5761417c613acd565b60405261418883613a9a565b815261419660208401613a9a565b602082015260408301516141a98161377e565b60408201529392505050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b5f82825180855260208501945060208160051b830101602085015f5b8381101561423d57601f19858403018852614227838351613f35565b602098890198909350919091019060010161420b565b50909695505050505050565b606080825284519082018190525f9060208601906080840190835b8181101561428b5783516001600160a01b0316835260209384019390920191600101614264565b5050838103602080860191909152865180835291810192508601905f5b818110156142c65782518452602093840193909201916001016142a8565b505050828103604084015261201b81856141ef565b8181038181111561321d57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561430a575f5ffd5b8151611b778161376a565b5f5f5f60608486031215614327575f5ffd5b61433084613b7e565b925061433e60208501613b7e565b915061434c60408501613b7e565b90509250925092565b828152604060208201525f613f2d6040830184613f35565b5f6020828403121561437d575f5ffd5b81516001600160e01b031981168114611b77575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe190e6e5b9101a41c1085c403f9d38fa1e0e3120692e46d71ff2bdc157986e1959b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a164736f6c634300081c000a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001400000000000000000000000004a9c44c97bbf6079db37c4769aebe425bbcdd09a00000000000000000000000053000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000f0bb20865277abd641a307ece5ee04e79073416c0000000000000000000000005f46d540b6ed704c3c8789105f30e075aa90072600000000000000000000000008c6f91e2b681faf5e17227f2a44c307b3c1364c000000000000000000000000939778d83b46b456224a33fb59630b11dec56663000000000000000000000000657e8c867d8b37dcc18fa4caead9c45eb088c64200000000000000000000000000000000000000000000000000000000000000050000000000000000000000009aa79c84b79816ab920bbce20f8f74557b5147340000000000000000000000008ea0b382d054dbebeb1d0ae47ee4ac433c7303530000000000000000000000004de413a26fc24c3fc27cc983be70aa9c5c299387000000000000000000000000cc9a7620d0358a521a068b444846e3d5debea8fa0000000000000000000000006ee3aaccf9f2321e49063c4f8da775ddbd407268