0 txs
666 calls
constructor
constructor(bool disable)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
claimableDepositRequest
viewfunction claimableDepositRequest(uint256 requestId, address controller) view returns (uint256 assets)
claimableRedeemRequest
viewfunction claimableRedeemRequest(uint256 requestId, address controller) view returns (uint256 shares)
convertToAssets
viewfunction convertToAssets(uint256 shares, uint256 requestId) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets, uint256 requestId) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
feeRates
viewfunction feeRates() view returns (tuple)
getRolesStorage
purefunction getRolesStorage() pure returns (tuple _rolesStorage)
isOperator
viewfunction isOperator(address controller, address operator) view returns (bool)
isTotalAssetsValid
viewfunction isTotalAssetsValid() view returns (bool)
isWhitelisted
viewfunction isWhitelisted(address account) view returns (bool)
MAX_MANAGEMENT_RATE
viewfunction MAX_MANAGEMENT_RATE() view returns (uint16)
MAX_PERFORMANCE_RATE
viewfunction MAX_PERFORMANCE_RATE() view returns (uint16)
MAX_PROTOCOL_RATE
viewfunction MAX_PROTOCOL_RATE() view returns (uint16)
maxDeposit
viewfunction maxDeposit(address controller) view returns (uint256)
maxMint
viewfunction maxMint(address controller) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address controller) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address controller) view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingDepositRequest
viewfunction pendingDepositRequest(uint256 requestId, address controller) view returns (uint256 assets)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingRedeemRequest
viewfunction pendingRedeemRequest(uint256 requestId, address controller) view returns (uint256 shares)
previewDeposit
purefunction previewDeposit(uint256) pure returns (uint256)
previewMint
purefunction previewMint(uint256) pure returns (uint256)
previewRedeem
purefunction previewRedeem(uint256) pure returns (uint256)
previewWithdraw
purefunction previewWithdraw(uint256) pure returns (uint256)
safe
viewfunction safe() view returns (address)
share
viewfunction share() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
version
purefunction version() pure returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
addToWhitelist
nonpayablefunction addToWhitelist(address[] accounts)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
cancelRequestDeposit
nonpayablefunction cancelRequestDeposit()
claimSharesAndRequestRedeem
nonpayablefunction claimSharesAndRequestRedeem(uint256 sharesToRedeem) returns (uint40 requestId)
claimSharesOnBehalf
nonpayablefunction claimSharesOnBehalf(address[] controllers)
close
nonpayablefunction close(uint256 _newTotalAssets)
deposit
nonpayablefunction deposit(uint256 assets, address receiver, address controller) returns (uint256)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256)
disableWhitelist
nonpayablefunction disableWhitelist()
expireTotalAssets
nonpayablefunction expireTotalAssets()
initialize
nonpayablefunction initialize(bytes data, address feeRegistry, address wrappedNativeToken)
initiateClosing
nonpayablefunction initiateClosing()
mint
nonpayablefunction mint(uint256 shares, address receiver, address controller) returns (uint256)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address controller) returns (uint256 assets)
renounceOwnership
nonpayablefunction renounceOwnership()
requestDeposit
payablefunction requestDeposit(uint256 assets, address controller, address owner, address referral) payable returns (uint256 requestId)
requestDeposit
payablefunction requestDeposit(uint256 assets, address controller, address owner) payable returns (uint256 requestId)
requestRedeem
nonpayablefunction requestRedeem(uint256 shares, address controller, address owner) returns (uint256 requestId)
revokeFromWhitelist
nonpayablefunction revokeFromWhitelist(address[] accounts)
setOperator
nonpayablefunction setOperator(address operator, bool approved) returns (bool success)
settleDeposit
nonpayablefunction settleDeposit(uint256 _newTotalAssets)
settleRedeem
nonpayablefunction settleRedeem(uint256 _newTotalAssets)
syncDeposit
payablefunction syncDeposit(uint256 assets, address receiver, address referral) payable returns (uint256 shares)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateFeeReceiver
nonpayablefunction updateFeeReceiver(address _feeReceiver)
updateNewTotalAssets
nonpayablefunction updateNewTotalAssets(uint256 _newTotalAssets)
updateRates
nonpayablefunction updateRates(tuple newRates)
updateTotalAssetsLifespan
nonpayablefunction updateTotalAssetsLifespan(uint128 lifespan)
updateValuationManager
nonpayablefunction updateValuationManager(address _valuationManager)
updateWhitelistManager
nonpayablefunction updateWhitelistManager(address _whitelistManager)
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address controller) returns (uint256 shares)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
DepositRequest
event DepositRequest(address indexed controller, address indexed owner, uint256 indexed requestId, address sender, uint256 assets)
DepositRequestCanceled
event DepositRequestCanceled(uint256 indexed requestId, address indexed controller)
DepositSync
event DepositSync(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
FeeReceiverUpdated
event FeeReceiverUpdated(address oldReceiver, address newReceiver)
HighWaterMarkUpdated
event HighWaterMarkUpdated(uint256 oldHighWaterMark, uint256 newHighWaterMark)
Initialized
event Initialized(uint64 version)
NewTotalAssetsUpdated
event NewTotalAssetsUpdated(uint256 totalAssets)
OperatorSet
event OperatorSet(address indexed controller, address indexed operator, bool approved)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RatesUpdated
event RatesUpdated((uint16 managementRate, uint16 performanceRate) oldRates, (uint16 managementRate, uint16 performanceRate) newRate, uint256 timestamp)
RedeemRequest
event RedeemRequest(address indexed controller, address indexed owner, uint256 indexed requestId, address sender, uint256 shares)
Referral
event Referral(address indexed referral, address indexed owner, uint256 indexed requestId, uint256 assets)
SettleDeposit
event SettleDeposit(uint40 indexed epochId, uint40 indexed settledId, uint256 totalAssets, uint256 totalSupply, uint256 assetsDeposited, uint256 sharesMinted)
SettleRedeem
event SettleRedeem(uint40 indexed epochId, uint40 indexed settledId, uint256 totalAssets, uint256 totalSupply, uint256 assetsWithdrawed, uint256 sharesBurned)
StateUpdated
event StateUpdated(uint8 state)
TotalAssetsLifespanUpdated
event TotalAssetsLifespanUpdated(uint128 oldLifespan, uint128 newLifespan)
TotalAssetsUpdated
event TotalAssetsUpdated(uint256 totalAssets)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
ValuationManagerUpdated
event ValuationManagerUpdated(address oldManager, address newManager)
WhitelistDisabled
event WhitelistDisabled()
WhitelistManagerUpdated
event WhitelistManagerUpdated(address oldManager, address newManager)
WhitelistUpdated
event WhitelistUpdated(address indexed account, bool authorized)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
AboveMaxRate
error AboveMaxRate(uint256 maxRate)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CantDepositNativeToken
error CantDepositNativeToken()
Closed
error Closed()
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
ERC7540InvalidOperator
error ERC7540InvalidOperator()
ERC7540PreviewDepositDisabled
error ERC7540PreviewDepositDisabled()
ERC7540PreviewMintDisabled
error ERC7540PreviewMintDisabled()
ERC7540PreviewRedeemDisabled
error ERC7540PreviewRedeemDisabled()
ERC7540PreviewWithdrawDisabled
error ERC7540PreviewWithdrawDisabled()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NewTotalAssetsMissing
error NewTotalAssetsMissing()
NotClosing
error NotClosing(uint8 currentState)
NotInitializing
error NotInitializing()
NotOpen
error NotOpen(uint8 currentState)
NotWhitelisted
error NotWhitelisted()
OnlyAsyncDepositAllowed
error OnlyAsyncDepositAllowed()
OnlyOneRequestAllowed
error OnlyOneRequestAllowed()
OnlySafe
error OnlySafe(address safe)
OnlySyncDepositAllowed
error OnlySyncDepositAllowed()
OnlyValuationManager
error OnlyValuationManager(address valuationManager)
OnlyWhitelistManager
error OnlyWhitelistManager(address whitelistManager)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
RequestIdNotClaimable
error RequestIdNotClaimable()
RequestNotCancelable
error RequestNotCancelable(uint256 requestId)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ValuationUpdateNotAllowed
error ValuationUpdateNotAllowed()
WrongNewTotalAssets
error WrongNewTotalAssets()
creation bytecode
0x608060405234801561000f575f80fd5b5060405161611b38038061611b83398101604081905261002e916100f4565b801561003c5761003c610042565b5061011a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100925760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100f15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610104575f80fd5b81518015158114610113575f80fd5b9392505050565b615ff4806101275f395ff3fe608060405260043610610356575f3560e01c806301e1d1141461035a57806301ffc9a71461038157806306fdde03146103b057806307a2d13a146103d1578063095ea7b3146103f05780630a28a4771461040f5780630aebeb4e1461042e5780630c2b5b911461044f57806318160ddd14610463578063181e7b3b14610477578063186f03541461049657806323b872dd146104b75780632542d4a6146104d657806326c6f96c146104f85780632e2d298414610517578063313ce5671461053657806338d52e0f1461055c5780633af32abf146105705780633e0a3c251461058f5780633f4ba83a146105ae578063402d267d146105c25780634cdad506146105e157806354fd4d5014610600578063558a72971461062e5780635c975abb1461064d5780635cfe2fe41461066157806365ccfcef14610696578063660b88ee146106b55780636e553f65146106d457806370a08231146106f3578063715018a6146107125780637688c5841461072657806379ba5097146107475780637d41c86e1461075b5780637f6497831461077a5780638456cb591461079957806385b77f45146107ad57806386af6e68146107c05780638da5cb5b146107df578063927b15df146107f3578063937147e31461080757806394bf804d1461086a57806395d89b4114610889578063995ea21a1461089d5780639c428921146108bc578063a1e59442146108d0578063a4393915146108e5578063a5948c89146108f9578063a627df661461090c578063a8d5fd651461092b578063a9059cbb1461093d578063ae16ea8c1461095c578063b3d7f6b91461097b578063b460af941461099a578063b6363cf2146109b9578063ba087652146109d8578063bcd1bf34146109f7578063c63d75b614610a16578063c69bebe414610a35578063c6e6f59214610a54578063ce96cb7714610a73578063d01d073a14610a92578063d24ca58a14610aa5578063d6b0f48414610ac4578063d905777e14610ad8578063da39b3e714610af7578063db2088f414610b16578063dd62ed3e14610b35578063e30c397814610b54578063eaed1d0714610b68578063ef8b30f714610b87578063f15be6f914610ba6578063f1a76fcc14610bc5578063f2fde38b14610be4578063f5a23d8d14610c03578063f886d4bd14610c22575b5f80fd5b348015610365575f80fd5b5061036e610c37565b6040519081526020015b60405180910390f35b34801561038c575f80fd5b506103a061039b366004614ede565b610c48565b6040519015158152602001610378565b3480156103bb575f80fd5b506103c4610cea565b6040516103789190614f05565b3480156103dc575f80fd5b5061036e6103eb366004614f3a565b610d88565b3480156103fb575f80fd5b506103a061040a366004614f65565b610d93565b34801561041a575f80fd5b5061036e610429366004614f3a565b610daa565b348015610439575f80fd5b5061044d610448366004614f3a565b610dc4565b005b34801561045a575f80fd5b506103a0610f68565b34801561046e575f80fd5b5061036e610f85565b348015610482575f80fd5b5061036e610491366004614f8f565b610f99565b3480156104a1575f80fd5b506104aa610fac565b6040516103789190614faf565b3480156104c2575f80fd5b506103a06104d1366004614fc3565b610fc7565b3480156104e1575f80fd5b506104eb610bb881565b6040516103789190615001565b348015610503575f80fd5b5061036e610512366004615010565b610fea565b348015610522575f80fd5b5061036e61053136600461503e565b611079565b348015610541575f80fd5b5061054a6110cf565b60405160ff9091168152602001610378565b348015610567575f80fd5b506104aa6110eb565b34801561057b575f80fd5b506103a061058a36600461507d565b611105565b34801561059a575f80fd5b5061044d6105a9366004615114565b6111e4565b3480156105b9575f80fd5b5061044d611303565b3480156105cd575f80fd5b5061036e6105dc36600461507d565b611315565b3480156105ec575f80fd5b5061036e6105fb366004614f3a565b611334565b34801561060b575f80fd5b50604080518082019091526006815265076302e352e360d41b60208201526103c4565b348015610639575f80fd5b506103a061064836600461517f565b61134e565b348015610658575f80fd5b506103a06113de565b34801561066c575f80fd5b5061068061067b366004614f3a565b6113f2565b60405164ffffffffff9091168152602001610378565b3480156106a1575f80fd5b5061044d6106b036600461507d565b61149a565b3480156106c0575f80fd5b5061044d6106cf3660046151d1565b61151c565b3480156106df575f80fd5b5061036e6106ee366004615010565b611780565b3480156106fe575f80fd5b5061036e61070d36600461507d565b61178c565b34801561071d575f80fd5b5061044d6117b5565b348015610731575f80fd5b5061073a6117c6565b604051610378919061526b565b348015610752575f80fd5b5061044d611843565b348015610766575f80fd5b5061036e61077536600461503e565b611882565b348015610785575f80fd5b5061044d610794366004615279565b6118fe565b3480156107a4575f80fd5b5061044d6119fa565b61036e6107bb36600461503e565b611a0a565b3480156107cb575f80fd5b5061044d6107da366004615279565b611aa9565b3480156107ea575f80fd5b506104aa611b9d565b3480156107fe575f80fd5b5061044d611ba7565b348015610812575f80fd5b5061081b611c0e565b604051610378919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b348015610875575f80fd5b5061036e610884366004615010565b611c90565b348015610894575f80fd5b506103c4611c9c565b3480156108a8575f80fd5b5061036e6108b7366004615010565b611cb8565b3480156108c7575f80fd5b5061044d611d3f565b3480156108db575f80fd5b506104eb61138881565b3480156108f0575f80fd5b5061044d611e1f565b61036e61090736600461532b565b611edf565b348015610917575f80fd5b5061044d610926366004614f3a565b611fc4565b348015610936575f80fd5b50306104aa565b348015610948575f80fd5b506103a0610957366004614f65565b612057565b348015610967575f80fd5b5061044d61097636600461537b565b612064565b348015610986575f80fd5b5061036e610995366004614f3a565b6120ab565b3480156109a5575f80fd5b5061036e6109b436600461503e565b6120c5565b3480156109c4575f80fd5b506103a06109d33660046153a1565b61217a565b3480156109e3575f80fd5b5061036e6109f236600461503e565b6121b5565b348015610a02575f80fd5b5061044d610a11366004614f3a565b61225c565b348015610a21575f80fd5b5061036e610a3036600461507d565b612302565b348015610a40575f80fd5b5061044d610a4f36600461507d565b612363565b348015610a5f575f80fd5b5061036e610a6e366004614f3a565b6123e5565b348015610a7e575f80fd5b5061036e610a8d36600461507d565b6123f0565b61036e610aa036600461503e565b612485565b348015610ab0575f80fd5b5061044d610abf366004614f3a565b6126bd565b348015610acf575f80fd5b5061044d61274b565b348015610ae3575f80fd5b5061036e610af236600461507d565b612798565b348015610b02575f80fd5b5061036e610b1136600461503e565b6127f2565b348015610b21575f80fd5b5061036e610b30366004614f8f565b61283d565b348015610b40575f80fd5b5061036e610b4f3660046153a1565b612849565b348015610b5f575f80fd5b506104aa612883565b348015610b73575f80fd5b5061036e610b82366004615010565b61288d565b348015610b92575f80fd5b5061036e610ba1366004614f3a565b612914565b348015610bb1575f80fd5b5061044d610bc0366004615279565b61292e565b348015610bd0575f80fd5b5061044d610bdf36600461507d565b6129e7565b348015610bef575f80fd5b5061044d610bfe36600461507d565b612a63565b348015610c0e575f80fd5b5061036e610c1d366004615010565b612ad3565b348015610c2d575f80fd5b506104eb6103e881565b5f80610c41612b5b565b5492915050565b5f632f0a18c560e01b6001600160e01b031983161480610c78575063f815c03d60e01b6001600160e01b03198316145b80610c935750630ce3bbe560e41b6001600160e01b03198316145b80610cae5750631883ba3960e21b6001600160e01b03198316145b80610cc9575063e3bc4e6560e01b6001600160e01b03198316145b80610ce457506001600160e01b031982166301ffc9a760e01b145b92915050565b60605f610cf5612b7f565b9050806003018054610d06906153cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d32906153cd565b8015610d7d5780601f10610d5457610100808354040283529160200191610d7d565b820191905f5260205f20905b815481529060010190602001808311610d6057829003601f168201915b505050505091505090565b5f610ce4825f612ba3565b5f33610da0818585612be8565b5060019392505050565b5f60405163954bf3b160e01b815260040160405180910390fd5b5f610dcd612bf5565b600201546001600160a01b03169050338114610e07578060405163fde82f1f60e01b8152600401610dfe9190614faf565b60405180910390fd5b5f610e10612c19565b5460ff1690506001816002811115610e2a57610e2a6153ff565b14610e4a57806040516373cc9d4d60e01b8152600401610dfe9190615413565b5f610e53612bf5565b9050610e5e84612c3d565b60018101546003820154604080516339a51be560e01b81529051610edb936001600160a01b039081169316916339a51be59160048083019260209291908290030181865afa158015610eb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed69190615449565b612d1a565b610ee433612d8d565b610eed33612f14565b6002610ef7612c19565b805460ff19166001836002811115610f1157610f116153ff565b0217905550610f3d3330610f23612b5b565b54610f2c6110eb565b6001600160a01b0316929190613137565b5f80516020615f5f8339815191526002604051610f5a9190615413565b60405180910390a150505050565b5f610f71612b5b565b600a01546001600160801b03164210919050565b5f80610f8f612b7f565b6002015492915050565b5f610fa583835f61319e565b9392505050565b5f610fb5612bf5565b600201546001600160a01b0316919050565b5f33610fd485828561323d565b610fdf858585613287565b506001949350505050565b5f80610ff4612b5b565b9050835f03611021576001600160a01b0383165f90815260058201602052604090205464ffffffffff1693505b6002810154600160501b900464ffffffffff168411156110725764ffffffffff84165f9081526003909101602090815260408083206001600160a01b03861684526001019091529020549050610ce4565b5092915050565b5f816001600160a01b038116331480159061109b5750611099813361217a565b155b156110b9576040516331d00f8160e11b815260040160405180910390fd5b6110c48585856132e4565b91505b509392505050565b5f6110d8612b5b565b60090154600160a01b900460ff16919050565b5f806110f56133e7565b546001600160a01b031692915050565b5f8061110f61340b565b9050826001600160a01b0316611123612bf5565b6003015f9054906101000a90046001600160a01b03166001600160a01b03166339a51be56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611174573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111989190615449565b6001600160a01b0316036111af5750600192915050565b600181015460ff166111c2576001610fa5565b6001600160a01b0383165f9081526020829052604090205460ff169392505050565b6111ec61342f565b5f6111f5613461565b90506103e861ffff16825f015161ffff161115611229576103e8604051630343096960e31b8152600401610dfe9190615001565b61138861ffff16826020015161ffff16111561125c57611388604051630343096960e31b8152600401610dfe9190615001565b5f81600401544261126d9190615478565b60408051808201825260058501805461ffff808216808552620100008084048316602080880182905260018c018a905560068c01805492840263ffffffff19938416909517949094179093558b51928c0151841690910293169116171790559051919250907f9eb7e8ec6516c29bbbd60a1c51902c46787a4ce63ef22701759b0b4e9dd34fe090610f5a9083908790869061548b565b61130b61342f565b611313613485565b565b5f61131e6113de565b1561132a57505f919050565b610ce45f83611cb8565b5f604051630aaf8c3d60e31b815260040160405180910390fd5b5f6113576134db565b81611360612b5b565b335f818152600792909201602090815260408084206001600160a01b038916808652925292839020805494151560ff199095169490941790935590517fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267906113cd90861515815260200190565b60405180910390a350600192915050565b5f806113e8613501565b5460ff1692915050565b5f806113fc612c19565b5460ff1690505f816002811115611415576114156153ff565b146114355780604051634b0145f360e01b8152600401610dfe9190615413565b61143d6134db565b61144633611105565b61146357604051630b094f2760e31b815260040160405180910390fd5b5f61146e5f33611cb8565b90508015611483576114818133336132e4565b505b5f61148f853333613525565b935050505b50919050565b6114a261342f565b7f27e018912099274c84ffbb1a48209e91c5b25727666d86b88a9d27c5abf4aa676114cb612bf5565b600401546040516114e7916001600160a01b03169084906154b4565b60405180910390a1806114f8612bf5565b60040180546001600160a01b0319166001600160a01b039290921691909117905550565b5f6115256136d4565b805490915060ff600160401b82041615906001600160401b03165f8115801561154b5750825b90505f826001600160401b031660011480156115665750303b155b905081158015611574575080155b156115925760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156115bb57845460ff60401b1916600160401b1785555b5f888060200190518101906115d09190615531565b90506115df8160c001516136f8565b61164b6040518060a0016040528083608001516001600160a01b031681526020018360e001516001600160a01b0316815260200183606001516001600160a01b031681526020018a6001600160a01b031681526020018360a001516001600160a01b0316815250613709565b61165d81602001518260400151613793565b6116656137a5565b8051611670906137b5565b805161167c90886137c6565b61168a816101400151613939565b61170b88826101000151836101200151845f01516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fd9190615672565b60ff16856101600151613964565b5f80516020615f5f8339815191525f6040516117279190615413565b60405180910390a150831561177657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610fa58383336132e4565b5f80611796612b7f565b6001600160a01b039093165f9081526020939093525050604090205490565b6117bd61342f565b6113135f613a30565b604080518082019091525f80825260208201525f6117e2613461565b905042816001015411611819576040805180820190915260059091015461ffff808216835262010000909104166020820152919050565b6040805180820190915260069091015461ffff808216835262010000909104166020820152919050565b338061184d612883565b6001600160a01b031614611876578060405163118cdaa760e01b8152600401610dfe9190614faf565b61187f81613a30565b50565b5f8061188c612c19565b5460ff1690505f8160028111156118a5576118a56153ff565b146118c55780604051634b0145f360e01b8152600401610dfe9190615413565b6118cd6134db565b6118d683611105565b6118f357604051630b094f2760e31b815260040160405180910390fd5b6110c4858585613525565b5f611907612bf5565b546001600160a01b031690503381146119355780604051632c1d27eb60e11b8152600401610dfe9190614faf565b5f61193e61340b565b90505f5b83518110156119f4576001825f015f86848151811061196357611963615692565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508381815181106119b2576119b2615692565b60200260200101516001600160a01b03165f80516020615f9f83398151915260016040516119e4911515815260200190565b60405180910390a2600101611942565b50505050565b611a0261342f565b611313613a52565b5f816001600160a01b0381163314801590611a2c5750611a2a813361217a565b155b15611a4a576040516331d00f8160e11b815260040160405180910390fd5b611a526134db565b611a5a610f68565b15611a785760405163b097d84160e01b815260040160405180910390fd5b611a8183611105565b611a9e57604051630b094f2760e31b815260040160405180910390fd5b6110c4858585613a98565b5f611ab2612bf5565b546001600160a01b03169050338114611ae05780604051632c1d27eb60e11b8152600401610dfe9190614faf565b5f611ae961340b565b90505f5b83518110156119f4575f825f015f868481518110611b0d57611b0d615692565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908315150217905550838181518110611b5c57611b5c615692565b60200260200101516001600160a01b03165f80516020615f9f8339815191525f604051611b8d911515815260200190565b60405180910390a2600101611aed565b5f806110f5613c95565b5f611bb0612bf5565b600201546001600160a01b03169050338114611be1578060405163fde82f1f60e01b8152600401610dfe9190614faf565b5f611bea612b5b565b600a0180546001600160801b0319166001600160801b039290921691909117905550565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152611c40612bf5565b6040805160a08101825282546001600160a01b0390811682526001840154811660208301526002840154811692820192909252600383015482166060820152600490920154166080820152919050565b5f610fa5838333613cb9565b60605f611ca7612b7f565b9050806004018054610d06906153cd565b5f80611cc2612b5b565b9050835f03611cef576001600160a01b0383165f90815260058201602052604090205464ffffffffff1693505b6002810154600160501b900464ffffffffff1684116110725764ffffffffff84165f9081526003909101602090815260408083206001600160a01b03861684526001019091529020549050610ce4565b611d476134db565b5f611d50612b5b565b335f908152600582016020526040902054600282015491925064ffffffffff90811691168114611d9c57604051630378803f60e51b815264ffffffffff82166004820152602401610dfe565b64ffffffffff81165f9081526003830160209081526040808320338085526001909101909252822080549290556008840154611de7916001600160a01b039091169083610f2c6110eb565b604051339064ffffffffff8416907ff3df774413906479e4aa6d20ad2ad938e10990d517dc9d29909f6eaa4981ad43905f90a3505050565b611e2761342f565b5f611e30612c19565b5460ff1690505f816002811115611e4957611e496153ff565b14611e695780604051634b0145f360e01b8152600401610dfe9190615413565b5f611e72612b5b565b90505f19816001015414611e8d57611e8d8160010154613da9565b6001611e97612c19565b805460ff19166001836002811115611eb157611eb16153ff565b02179055505f80516020615f5f8339815191526001604051611ed39190615413565b60405180910390a15050565b5f826001600160a01b0381163314801590611f015750611eff813361217a565b155b15611f1f576040516331d00f8160e11b815260040160405180910390fd5b611f276134db565b611f2f610f68565b15611f4d5760405163b097d84160e01b815260040160405180910390fd5b611f5684611105565b611f7357604051630b094f2760e31b815260040160405180910390fd5b611f7e868686613a98565b915081846001600160a01b0316846001600160a01b03165f80516020615f1f83398151915289604051611fb391815260200190565b60405180910390a450949350505050565b5f611fcd612bf5565b600201546001600160a01b03169050338114611ffe578060405163fde82f1f60e01b8152600401610dfe9190614faf565b5f612007612c19565b5460ff1690505f816002811115612020576120206153ff565b146120405780604051634b0145f360e01b8152600401610dfe9190615413565b61204983613fbe565b61205233612f14565b505050565b5f33610da0818585613287565b5f61206d612bf5565b600201546001600160a01b0316905033811461209e578060405163fde82f1f60e01b8152600401610dfe9190614faf565b6120a782614026565b5050565b5f6040516366345fa160e01b815260040160405180910390fd5b5f6120ce6134db565b5f6120d7612c19565b90506002815460ff1660028111156120f1576120f16153ff565b14801561210557506121035f8461288d565b155b1561212957612115856001614090565b915061212433858588866140cc565b6110c7565b6001600160a01b03831633148015906121495750612147833361217a565b155b15612167576040516331d00f8160e11b815260040160405180910390fd5b612172858585614195565b915050610fa5565b5f612183612b5b565b6001600160a01b039384165f908152600791909101602090815260408083209490951682529290925250205460ff1690565b5f6121be6134db565b5f6121c7612c19565b90506002815460ff1660028111156121e1576121e16153ff565b1480156121f557506121f35f8461288d565b155b1561221357612204855f612ba3565b915061212433858585896140cc565b6001600160a01b03831633148015906122335750612231833361217a565b155b15612251576040516331d00f8160e11b815260040160405180910390fd5b612172858585614291565b5f612265612bf5565b600401546001600160a01b0316905033811461229657806040516314c9222d60e01b8152600401610dfe9190614faf565b60026122a0612c19565b5460ff1660028111156122b5576122b56153ff565b036122d357604051631cdde67b60e01b815260040160405180910390fd5b6122db610f68565b156122f95760405163ebe435fd60e01b815260040160405180910390fd5b6120a782613da9565b5f61230b6113de565b1561231757505f919050565b5f612320612b5b565b6001600160a01b0384165f908152600591909101602052604081205464ffffffffff16915061234f8285611cb8565b905061235b818361283d565b949350505050565b61236b61342f565b7fa92ff4390fe6943f0b30e8fe715dde86f85ab79b2b2c640a10fc094cc4036cc8612394612bf5565b600101546040516123b0916001600160a01b03169084906154b4565b60405180910390a1806123c1612bf5565b60010180546001600160a01b0319166001600160a01b039290921691909117905550565b5f610ce4825f614090565b5f6123f96113de565b1561240557505f919050565b5f6124105f8461288d565b90508015801561243c57506002612425612c19565b5460ff16600281111561243a5761243a6153ff565b145b1561244d57610fa56103eb8461178c565b5f612456612b5b565b6001600160a01b0385165f908152600691909101602052604090205464ffffffffff16905061235b8282610f99565b5f61248e610f68565b6124ab576040516341e86ac160e11b815260040160405180910390fd5b5f6124b4612c19565b5460ff1690505f8160028111156124cd576124cd6153ff565b146124ed5780604051634b0145f360e01b8152600401610dfe9190615413565b5f6124f6612b5b565b905061250133611105565b61251e57604051630b094f2760e31b815260040160405180910390fd5b34156125f25760098101546001600160a01b031661253a6110eb565b6001600160a01b0316036125d957349550806008015f9054906101000a90046001600160a01b03166001600160a01b031663439370b1876040518263ffffffff1660e01b81526004015f604051808303818588803b15801561259a575f80fd5b505af11580156125ac573d5f803e3d5ffd5b5050505060088201546125d491506001600160a01b03166125cb610fac565b88610f2c6110eb565b6125fe565b604051636546370360e01b815260040160405180910390fd5b6125fe336125cb610fac565b612608865f614090565b925085815f015f82825461261c9190615478565b9091555061262c90508584614389565b846001600160a01b0316336001600160a01b03167fc7fa05bbaa7a6c46527c364d2da9fbafe81091552e9cfa35b7fd69c27878afbc88866040516126719291906156a6565b60405180910390a35f336001600160a01b0316856001600160a01b03165f80516020615f1f833981519152896040516126ac91815260200190565b60405180910390a450509392505050565b5f6126c6612bf5565b600201546001600160a01b031690503381146126f7578060405163fde82f1f60e01b8152600401610dfe9190614faf565b5f612700612c19565b5460ff1690505f816002811115612719576127196153ff565b146127395780604051634b0145f360e01b8152600401610dfe9190615413565b61274283613fbe565b61204933612d8d565b61275361342f565b5f61275c61340b565b600101805460ff19169115159190911790556040517f212c6e1d3045c9581ef0adf2504dbb1d137f52f38162ccf77a16c69d14eba5c3905f90a1565b5f6127a16113de565b156127ad57505f919050565b5f6127b85f8461288d565b9050801580156127e4575060026127cd612c19565b5460ff1660028111156127e2576127e26153ff565b145b15610ce457610fa58361178c565b5f816001600160a01b03811633148015906128145750612812813361217a565b155b15612832576040516331d00f8160e11b815260040160405180910390fd5b6110c4858585613cb9565b5f610fa583835f6143bd565b5f80612853612b7f565b6001600160a01b039485165f90815260019190910160209081526040808320959096168252939093525050205490565b5f806110f5614450565b5f80612897612b5b565b9050835f036128c4576001600160a01b0383165f90815260068201602052604090205464ffffffffff1693505b6002810154600160c81b900464ffffffffff1684116110725764ffffffffff84165f9081526003909101602090815260408083206001600160a01b03861684526002019091529020549050610ce4565b5f604051633e26cc2f60e11b815260040160405180910390fd5b5f612937612bf5565b600201546001600160a01b03169050338114612968578060405163fde82f1f60e01b8152600401610dfe9190614faf565b5f5b8251811015612052575f6129975f85848151811061298a5761298a615692565b6020026020010151611cb8565b905080156129de576129dc818584815181106129b5576129b5615692565b60200260200101518685815181106129cf576129cf615692565b60200260200101516132e4565b505b5060010161296a565b6129ef61342f565b7f1eee17fbeb6d1c008ca140cc7d787451b233547ba63af138cea3470a1faf33a5612a18612bf5565b54604051612a31916001600160a01b03169084906154b4565b60405180910390a180612a42612bf5565b80546001600160a01b0319166001600160a01b039290921691909117905550565b612a6b61342f565b5f612a74614450565b80546001600160a01b0319166001600160a01b0384169081178255909150612a9a611b9d565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f80612add612b5b565b9050835f03612b0a576001600160a01b0383165f90815260068201602052604090205464ffffffffff1693505b6002810154600160c81b900464ffffffffff168411156110725764ffffffffff84165f9081526003909101602090815260408083206001600160a01b03861684526002019091529020549050610ce4565b7f5c74d456014b1c0eb4368d944667a568313858a3029a650ff0cb7b56f8b57a0090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0090565b5f610fa5612baf610c37565b612bba906001615478565b612bc2614474565b612bcd90600a615797565b612bd5610f85565b612bdf9190615478565b85919085614490565b61205283838360016144df565b7f7c302ed2c673c3d6b4551cf74a01ee649f887e14fd20d13dbca1b6099534d90090565b7f0e6b3200a60a991c539f47dddaca04a18eb4bcf2b53906fb44751d827f00140090565b612c456134db565b5f612c4e612b5b565b6001808201549192508101612c76576040516343ec4aed60e11b815260040160405180910390fd5b808314612c965760405163389db72f60e01b815260040160405180910390fd5b8082555f196001830155600a820154612cbf90600160801b90046001600160801b0316426157a5565b600a830180546001600160801b0319166001600160801b03929092169190911790556040518181527ff306601d1bd9ff6895ca817f568f68463b269e4b0cf4710e5f1003592ad29f5c906020015b60405180910390a1505050565b5f612d23613461565b90505f80612d2f6145c0565b90925090508115612d5457612d448583614389565b8015612d5457612d548482614389565b5f612d71612d606110cf565b612d6b90600a615797565b5f612ba3565b9050612d7c81614719565b428460020181905550505050505050565b5f612d96612b5b565b600281810154600160281b900464ffffffffff165f8181526004840160205260408120909201549293509190819003612dcf5750505050565b5f612dda825f614090565b90505f612de5610c37565b90505f612df0610f85565b6002878101549192505f91612e0c919064ffffffffff166157c4565b64ffffffffff87165f908152600489016020526040902060018101859055838155909150612e3a3086614389565b612e448685615478565b9350612e508584615478565b8489559250612e608760026157e1565b600289018054600160281b600160781b031916600160281b64ffffffffff9384160264ffffffffff60501b191617600160501b928516929092029190911790556008880154612ebc906001600160a01b03168a88610f2c6110eb565b8664ffffffffff168264ffffffffff167f26be8b1af887e484fec2868840869fd162e136268c24803bede886ab91aa29bc86868a8a604051612f0194939291906157fe565b60405180910390a3505050505050505050565b5f612f1d612b5b565b6002810154909150600160a01b900464ffffffffff165f612f3c6110eb565b64ffffffffff83165f908152600485016020526040812060030154919250612f648282612ba3565b90505f836001600160a01b03166370a08231886040518263ffffffff1660e01b8152600401612f939190614faf565b602060405180830381865afa158015612fae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd29190615819565b9050811580612fe057508082115b15612fee5750505050505050565b5f612ff7610c37565b90505f613002610f85565b6002898101549192505f916130259190600160781b900464ffffffffff166157c4565b64ffffffffff89165f90815260048b01602052604090206001810185905583815560088b015491925090613062906001600160a01b031688614772565b61306c8685615830565b93506130788784615830565b848b5592506130888960026157e1565b60028b018054600160a01b600160f01b031916600160a01b64ffffffffff9384160264ffffffffff60c81b191617600160c81b928516929092029190911790556130dd6001600160a01b0389168c3089613137565b8864ffffffffff168264ffffffffff167fa8fe241e26fead168e608ab85aa4e059a34552bad0fc6d98961122cb5a0abefd86868a8c60405161312294939291906157fe565b60405180910390a35050505050505050505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526119f49186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506147a6565b5f806131a8612b5b565b64ffffffffff8086165f90815260038301602090815260408083205490931680835260048501909152918120600190810154939450919290916131eb9190615478565b90505f6131f6614474565b61320190600a615797565b64ffffffffff84165f9081526004860160205260409020546132239190615478565b905061323188838389614490565b98975050505050505050565b5f6132488484612849565b90505f1981146119f4578181101561327957828183604051637dc7a0d960e11b8152600401610dfe93929190615843565b6119f484848484035f6144df565b6001600160a01b0383166132b0575f604051634b637e8f60e11b8152600401610dfe9190614faf565b6001600160a01b0382166132d9575f60405163ec442f0560e01b8152600401610dfe9190614faf565b6120528383836147fe565b5f806132ee612b5b565b6001600160a01b0384165f908152600582016020526040902054600282015491925064ffffffffff90811691600160501b9004168111156133425760405163912d1a7360e01b815260040160405180910390fd5b64ffffffffff81165f90815260038301602090815260408083206001600160a01b038816845260010190915281208054889290613380908490615830565b9091555061339790508664ffffffffff831661283d565b92506133a4308685613287565b846001600160a01b0316846001600160a01b03165f80516020615f7f83398151915288866040516133d69291906156a6565b60405180910390a350509392505050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0090565b7f083cc98ab296d1a1f01854b5f7a2f47df4425a56ba7b35f7faa3a336067e480090565b33613438611b9d565b6001600160a01b031614611313573360405163118cdaa760e01b8152600401610dfe9190614faf565b7fa5292f7ccd85acc1b3080c01f5da9af7799f2c26826bd4d79081d6511780bd0090565b61348d614809565b5f613496613501565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516134d09190614faf565b60405180910390a150565b6134e36113de565b156113135760405163d93c066560e01b815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b5f336001600160a01b038316148015906135465750613544823361217a565b155b156135565761355682338661323d565b5f61355f612b5b565b90505f61356c5f8661288d565b905080156135815761357f818687614291565b505b60028201546001600160a01b0386165f90815260068401602052604090205464ffffffffff600160781b909204821691168114613611575f6135c35f88612ad3565b11156135e25760405163cadcefcf60e01b815260040160405180910390fd5b6001600160a01b0386165f9081526006840160205260409020805464ffffffffff191664ffffffffff83161790555b64ffffffffff81165f90815260038401602090815260408083206001600160a01b038a1684526002019091528120805489929061364f908490615478565b9091555050600883015461366e9086906001600160a01b0316896147fe565b8064ffffffffff16856001600160a01b0316876001600160a01b03167f1fdc681a13d8c5da54e301c7ce6542dcde4581e4725043fdab2db12ddc574506338b6040516136bb929190615864565b60405180910390a464ffffffffff169695505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b61370061482e565b61187f81614853565b61371161482e565b5f61371a612bf5565b825181546001600160a01b03199081166001600160a01b039283161783556020850151600184018054831691841691909117905560408501516002840180548316918416919091179055606085015160038401805483169184169190911790556080909401516004909201805490941691161790915550565b61379b61482e565b6120a78282614884565b6137ad61482e565b6113136148b4565b6137bd61482e565b61187f816148d0565b6137ce61482e565b5f6137d7612b5b565b600281018054600164ffffffffff60501b01600160c81b031916650100000000016501000000000160791b011790556040519091508390839061381990614ed1565b6138249291906154b4565b604051809103905ff08015801561383d573d5f803e3d5ffd5b506008820180546001600160a01b03199081166001600160a01b03938416179091556009830180549091169184169190911790555f1960018201555f6138816110eb565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138e09190615672565b905060128160ff161061390c5760098201805460ff60a01b1916600160a01b60ff8416021790556119f4565b600982018054601283900360ff16600160a81b0261ffff60a01b1990911617600960a11b17905550505050565b61394161482e565b801561187f575f61395061340b565b6001908101805460ff191690911790555050565b61396c61482e565b6103e861ffff85161115613997576103e8604051630343096960e31b8152600401610dfe9190615001565b61138861ffff841611156139c257611388604051630343096960e31b8152600401610dfe9190615001565b5f6139cb613461565b4260018201556004810183905580546001600160a01b0319166001600160a01b03881617815590506139fe83600a61587d565b6003820155600501805461ffff948516620100000263ffffffff19909116949095169390931793909317909155505050565b5f613a39614450565b80546001600160a01b031916815590506120a78261493d565b613a5a6134db565b5f613a63613501565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586134c33390565b5f80613aa45f85611cb8565b90508015613ab957613ab78185866132e4565b505b5f613ac2612b5b565b60028101546001600160a01b0387165f90815260058301602052604090205491925064ffffffffff90811691168114613b4e575f613b005f88610fea565b1115613b1f5760405163cadcefcf60e01b815260040160405180910390fd5b6001600160a01b0386165f9081526005830160205260409020805464ffffffffff191664ffffffffff83161790555b3415613be65760098201546001600160a01b0316613b6a6110eb565b6001600160a01b0316036125d957816008015f9054906101000a90046001600160a01b03166001600160a01b031663439370b1346040518263ffffffff1660e01b81526004015f604051808303818588803b158015613bc7575f80fd5b505af1158015613bd9573d5f803e3d5ffd5b5050505050349650613c03565b6008820154613c039086906001600160a01b031689610f2c6110eb565b64ffffffffff81165f90815260038301602090815260408083206001600160a01b038a16845260010190915281208054899290613c41908490615478565b925050819055508064ffffffffff16856001600160a01b0316876001600160a01b03167fbb58420bb8ce44e11b84e214cc0de10ce5e7c24d0355b2815c3d758b514cae72338b6040516136bb929190615864565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b5f80613cc3612b5b565b6001600160a01b0384165f908152600582016020526040902054600282015491925064ffffffffff90811691600160501b900416811115613d175760405163912d1a7360e01b815260040160405180910390fd5b613d238682600161319e565b64ffffffffff82165f90815260038401602090815260408083206001600160a01b0389168452600101909152812080549295508592909190613d66908490615830565b90915550613d779050308688613287565b846001600160a01b0316846001600160a01b03165f80516020615f7f83398151915285896040516133d69291906156a6565b613db16134db565b5f613dba612b5b565b60028101805464ffffffffff8082165f9081526003850160205260408082208054600160281b909504841664ffffffffff199586161790559354600160781b8104831682529381208054600160a01b909504909216939092169290921790915560088201549192506001600160a01b0390911690613e366110eb565b6001600160a01b03166370a08231836040518263ffffffff1660e01b8152600401613e619190614faf565b602060405180830381865afa158015613e7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea09190615819565b90505f613eac8361178c565b90508115613f1257600284810180545f90613ecf90849064ffffffffff166157e1565b82546101009290920a64ffffffffff818102199093169183160217909155600286810154600160281b90049091165f908152600487016020526040902001839055505b8015613f7d5760028481018054600f90613f3b908490600160781b900464ffffffffff166157e1565b82546101009290920a64ffffffffff8181021990931691831602179091556002860154600160a01b9004165f9081526004860160205260409020600301829055505b600184018590556040518581527f3809c8827d04fcf6537fe5af7a5e42a8ec939c3556096ca7107842a2d44efca59060200160405180910390a15050505050565b5f613fc7612bf5565b9050613fd282612c3d565b60018101546003820154604080516339a51be560e01b815290516120a7936001600160a01b039081169316916339a51be59160048083019260209291908290030181865afa158015610eb2573d5f803e3d5ffd5b5f61402f612b5b565b600a810180546001600160801b03858116600160801b81810283851617909455604080519490930490911680845260208401919091529293507f2bc73e9b849f667d30dc57236e1deed6d5368da53fe4367a550d7309ae219d779101612d0d565b5f610fa561409c614474565b6140a790600a615797565b6140af610f85565b6140b99190615478565b6140c1610c37565b612bdf906001615478565b826001600160a01b0316856001600160a01b0316141580156140f557506140f3838661217a565b155b156141055761410583868361323d565b8161410e612b5b565b80545f9061411d908490615830565b9091555061412d90508382614772565b61414a848361413a6110eb565b6001600160a01b03169190614997565b826001600160a01b0316846001600160a01b0316866001600160a01b03165f80516020615f3f83398151915285856040516141869291906156a6565b60405180910390a45050505050565b5f8061419f612b5b565b6001600160a01b0384165f908152600682016020526040902054600282015491925064ffffffffff90811691600160c81b9004168111156141f35760405163912d1a7360e01b815260040160405180910390fd5b6141ff868260016143bd565b64ffffffffff82165f90815260038401602090815260408083206001600160a01b0389168452600201909152812080549295508592909190614242908490615830565b909155506142559050858761413a6110eb565b836001600160a01b0316856001600160a01b0316336001600160a01b03165f80516020615f3f83398151915289876040516126ac9291906156a6565b5f8061429b612b5b565b6001600160a01b0384165f908152600682016020526040902054600282015491925064ffffffffff90811691600160c81b9004168111156142ef5760405163912d1a7360e01b815260040160405180910390fd5b64ffffffffff81165f90815260038301602090815260408083206001600160a01b03881684526002019091528120805488929061432d908490615830565b9091555061433e905086825f61319e565b925061434d858461413a6110eb565b836001600160a01b0316856001600160a01b0316336001600160a01b03165f80516020615f3f833981519152868a6040516126ac9291906156a6565b6001600160a01b0382166143b2575f60405163ec442f0560e01b8152600401610dfe9190614faf565b6120a75f83836147fe565b5f806143c7612b5b565b64ffffffffff8086165f908152600383016020908152604080832054909316808352600485019091529181206001908101549394509192909161440a9190615478565b90505f614415614474565b61442090600a615797565b64ffffffffff84165f9081526004860160205260409020546144429190615478565b905061323188828489614490565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0090565b5f61447d612b5b565b60090154600160a81b900460ff16919050565b5f8061449d8686866149bd565b90506144a883614a7c565b80156144c357505f84806144be576144be615888565b868809115b156144d6576144d3600182615478565b90505b95945050505050565b5f6144e8612b7f565b90506001600160a01b038516614513575f60405163e602df0560e01b8152600401610dfe9190614faf565b6001600160a01b03841661453c575f604051634a1406b160e11b8152600401610dfe9190614faf565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156145b957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516145b091815260200190565b60405180910390a35b5050505050565b5f805f6145cb613461565b90505f6145d66110cf565b60ff1690505f6145e46117c6565b90505f8360020154426145f79190615830565b90505f614602610c37565b90505f61461782855f015161ffff1685614aa8565b90505f61466d82614629856001615478565b6146339190615830565b61463b614474565b61464690600a615797565b61464e610f85565b6146589190615478565b60016146658a600a61587d565b929190614490565b90505f614678610f85565b90505f614694876020015161ffff1683858c600301548c614acc565b90505f6146a18286615478565b90505f6146e36146af614474565b6146ba90600a615797565b6146c49086615478565b6146ce848a615830565b6146d9906001615478565b8491906001614490565b90506146fc6146f0614af9565b82906127106001614490565b9b506147088c82615830565b9c5050505050505050505050509091565b5f614722613461565b600381015490915080831115612052577f03f8f938dbe4475565f0cf1c3dcf09728208c2c6065e1f717102058c51e94d0681846040516147639291906156a6565b60405180910390a15060030155565b6001600160a01b03821661479b575f604051634b637e8f60e11b8152600401610dfe9190614faf565b6120a7825f836147fe565b5f6147ba6001600160a01b03841683614b8a565b905080515f141580156147de5750808060200190518101906147dc919061589c565b155b156120525782604051635274afe760e01b8152600401610dfe9190614faf565b612052838383614b97565b6148116113de565b61131357604051638dfc202b60e01b815260040160405180910390fd5b614836614baa565b61131357604051631afcd79f60e31b815260040160405180910390fd5b61485b61482e565b6001600160a01b038116611876575f604051631e4fbdf760e01b8152600401610dfe9190614faf565b61488c61482e565b5f614895612b7f565b9050600381016148a584826158fb565b50600481016119f483826158fb565b6148bc61482e565b5f6148c5613501565b805460ff1916905550565b6148d861482e565b5f6148e16133e7565b90505f806148ee84614bc3565b91509150816148fe576012614900565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b5f614946613c95565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61205283846001600160a01b031663a9059cbb858560405160240161316c929190615864565b5f838302815f1985870982811083820303915050805f036149f1578382816149e7576149e7615888565b0492505050610fa5565b808411614a115760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6002826003811115614a9157614a916153ff565b614a9b91906159b5565b60ff166001149050919050565b5f80614ab985856127106001614490565b90506110c481846301e133806001614490565b5f828411156144d6578284035f614ae8876146d986600a61587d565b905061323181896127106001614490565b5f80614b03613461565b805460408051634cee8ab360e11b815290519293506001600160a01b03909116916399dd1566916004808201926020929091908290030181865afa158015614b4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b719190615819565b9150610bb8821115614b865750610bb8919050565b5090565b6060610fa583835f614c99565b614b9f6134db565b612052838383614d32565b5f614bb36136d4565b54600160401b900460ff16919050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691614c09916159e2565b5f60405180830381855afa9150503d805f8114614c41576040519150601f19603f3d011682016040523d82523d5f602084013e614c46565b606091505b5091509150818015614c5a57506020815110155b15614c8d575f81806020019051810190614c749190615819565b905060ff8111614c8b576001969095509350505050565b505b505f9485945092505050565b606081471015614cbe573060405163cd78605960e01b8152600401610dfe9190614faf565b5f80856001600160a01b03168486604051614cd991906159e2565b5f6040518083038185875af1925050503d805f8114614d13576040519150601f19603f3d011682016040523d82523d5f602084013e614d18565b606091505b5091509150614d28868383614e55565b9695505050505050565b5f614d3b612b7f565b90506001600160a01b038416614d695781816002015f828254614d5e9190615478565b90915550614dc69050565b6001600160a01b0384165f9081526020829052604090205482811015614da85784818460405163391434e360e21b8152600401610dfe93929190615843565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614de4576002810180548390039055614e02565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614e4791815260200190565b60405180910390a350505050565b606082614e6a57614e6582614ea8565b610fa5565b8151158015614e8157506001600160a01b0384163b155b15614ea15783604051639996b31560e01b8152600401610dfe9190614faf565b5080610fa5565b805115614eb85780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610526806159f983390190565b5f60208284031215614eee575f80fd5b81356001600160e01b031981168114610fa5575f80fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215614f4a575f80fd5b5035919050565b6001600160a01b038116811461187f575f80fd5b5f8060408385031215614f76575f80fd5b8235614f8181614f51565b946020939093013593505050565b5f8060408385031215614fa0575f80fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f805f60608486031215614fd5575f80fd5b8335614fe081614f51565b92506020840135614ff081614f51565b929592945050506040919091013590565b61ffff91909116815260200190565b5f8060408385031215615021575f80fd5b82359150602083013561503381614f51565b809150509250929050565b5f805f60608486031215615050575f80fd5b83359250602084013561506281614f51565b9150604084013561507281614f51565b809150509250925092565b5f6020828403121561508d575f80fd5b8135610fa581614f51565b634e487b7160e01b5f52604160045260245ffd5b60405161018081016001600160401b03811182821017156150cf576150cf615098565b60405290565b604051601f8201601f191681016001600160401b03811182821017156150fd576150fd615098565b604052919050565b61ffff8116811461187f575f80fd5b5f6040828403128015615125575f80fd5b50604080519081016001600160401b038111828210171561514857615148615098565b604052823561515681615105565b8152602083013561516681615105565b60208201529392505050565b801515811461187f575f80fd5b5f8060408385031215615190575f80fd5b823561519b81614f51565b9150602083013561503381615172565b5f6001600160401b038211156151c3576151c3615098565b50601f01601f191660200190565b5f805f606084860312156151e3575f80fd5b83356001600160401b038111156151f8575f80fd5b8401601f81018613615208575f80fd5b803561521b615216826151ab565b6150d5565b81815287602083850101111561522f575f80fd5b816020840160208301375f60208383010152809550505050602084013561506281614f51565b805161ffff908116835260209182015116910152565b60408101610ce48284615255565b5f60208284031215615289575f80fd5b81356001600160401b0381111561529e575f80fd5b8201601f810184136152ae575f80fd5b80356001600160401b038111156152c7576152c7615098565b8060051b6152d7602082016150d5565b918252602081840181019290810190878411156152f2575f80fd5b6020850194505b83851015615320578435925061530e83614f51565b828252602094850194909101906152f9565b979650505050505050565b5f805f806080858703121561533e575f80fd5b84359350602085013561535081614f51565b9250604085013561536081614f51565b9150606085013561537081614f51565b939692955090935050565b5f6020828403121561538b575f80fd5b81356001600160801b0381168114610fa5575f80fd5b5f80604083850312156153b2575f80fd5b82356153bd81614f51565b9150602083013561503381614f51565b600181811c908216806153e157607f821691505b60208210810361149457634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b602081016003831061543357634e487b7160e01b5f52602160045260245ffd5b91905290565b805161544481614f51565b919050565b5f60208284031215615459575f80fd5b8151610fa581614f51565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ce457610ce4615464565b60a081016154998286615255565b6154a66040830185615255565b826080830152949350505050565b6001600160a01b0392831681529116602082015260400190565b5f82601f8301126154dd575f80fd5b81516154eb615216826151ab565b8181528460208386010111156154ff575f80fd5b8160208501602083015e5f918101602001919091529392505050565b805161544481615105565b805161544481615172565b5f60208284031215615541575f80fd5b81516001600160401b03811115615556575f80fd5b82016101808185031215615568575f80fd5b6155706150ac565b61557982615439565b815260208201516001600160401b03811115615593575f80fd5b61559f868285016154ce565b60208301525060408201516001600160401b038111156155bd575f80fd5b6155c9868285016154ce565b6040830152506155db60608301615439565b60608201526155ec60808301615439565b60808201526155fd60a08301615439565b60a082015261560e60c08301615439565b60c082015261561f60e08301615439565b60e0820152615631610100830161551b565b610100820152615644610120830161551b565b6101208201526156576101408301615526565b61014082015261016091820151918101919091529392505050565b5f60208284031215615682575f80fd5b815160ff81168114610fa5575f80fd5b634e487b7160e01b5f52603260045260245ffd5b918252602082015260400190565b6001815b60018411156156ef578085048111156156d3576156d3615464565b60018416156156e157908102905b60019390931c9280026156b8565b935093915050565b5f8261570557506001610ce4565b8161571157505f610ce4565b816001811461572757600281146157315761574d565b6001915050610ce4565b60ff84111561574257615742615464565b50506001821b610ce4565b5060208310610133831016604e8410600b8410161715615770575081810a610ce4565b61577c5f1984846156b4565b805f190482111561578f5761578f615464565b029392505050565b5f610fa560ff8416836156f7565b6001600160801b038181168382160190811115610ce457610ce4615464565b64ffffffffff8281168282160390811115610ce457610ce4615464565b64ffffffffff8181168382160190811115610ce457610ce4615464565b93845260208401929092526040830152606082015260800190565b5f60208284031215615829575f80fd5b5051919050565b81810381811115610ce457610ce4615464565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b5f610fa583836156f7565b634e487b7160e01b5f52601260045260245ffd5b5f602082840312156158ac575f80fd5b8151610fa581615172565b601f82111561205257805f5260205f20601f840160051c810160208510156158dc5750805b601f840160051c820191505b818110156145b9575f81556001016158e8565b81516001600160401b0381111561591457615914615098565b6159288161592284546153cd565b846158b7565b6020601f82116001811461595a575f83156159435750848201515b5f19600385901b1c1916600184901b1784556145b9565b5f84815260208120601f198516915b828110156159895787850151825560209485019460019092019101615969565b50848210156159a657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60ff8316806159d357634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f82518060208501845e5f92019182525091905056fe608060405234801561000f575f80fd5b5060405161052638038061052683398101604081905261002e9161037e565b6100436001600160a01b038316335f19610068565b5f80546001600160a01b0319166001600160a01b039290921691909117905550610418565b5f836001600160a01b031663095ea7b3848460405160240161008b9291906103b6565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506100ca848261013660201b60201c565b6101305761012684856001600160a01b031663095ea7b3865f6040516024016100f49291906103b6565b60408051808303601f1901815291905260208101805160e09390931b6001600160e01b0393841617905291506101d716565b61013084826101d7565b50505050565b5f805f846001600160a01b03168460405161015191906103cf565b5f604051808303815f865af19150503d805f811461018a576040519150601f19603f3d011682016040523d82523d5f602084013e61018f565b606091505b50915091508180156101b95750805115806101b95750808060200190518101906101b991906103e5565b80156101ce57505f856001600160a01b03163b115b95945050505050565b5f6101eb6001600160a01b0384168361023d565b905080515f1415801561020f57508080602001905181019061020d91906103e5565b155b156102385782604051635274afe760e01b815260040161022f9190610404565b60405180910390fd5b505050565b606061024a83835f610251565b9392505050565b606081471015610276573060405163cd78605960e01b815260040161022f9190610404565b5f80856001600160a01b0316848660405161029191906103cf565b5f6040518083038185875af1925050503d805f81146102cb576040519150601f19603f3d011682016040523d82523d5f602084013e6102d0565b606091505b5090925090506102e18683836102eb565b9695505050505050565b606082610300576102fb8261033e565b61024a565b815115801561031757506001600160a01b0384163b155b156103375783604051639996b31560e01b815260040161022f9190610404565b508061024a565b80511561034e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114610367575f80fd5b5f806040838503121561038f575f80fd5b825161039a8161036a565b60208401519092506103ab8161036a565b809150509250929050565b6001600160a01b03929092168252602082015260400190565b5f82518060208501845e5f920191825250919050565b5f602082840312156103f5575f80fd5b8151801515811461024a575f80fd5b6001600160a01b0391909116815260200190565b610101806104255f395ff3fe6080604052600436106025575f3560e01c806317fcb39b146029578063439370b1146061575b5f80fd5b3480156033575f80fd5b505f546045906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60676069565b005b5f8054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b15801560b3575f80fd5b505af115801560c4573d5f803e3d5ffd5b505050505056fea264697066735822122073e318f0585ea29532d9162315f584cdbb9463629b4766755e4ab5eeed5bb73b64736f6c634300081a003390f46099733ed637df811df4fcc5cae4961192ca04f36da9ab64b4dd8dc9b7f5fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db23ad33ab6a13a00aa7d06cd167b2abd03dec86af3cf3cc91759dcd3ae8411887dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7f93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543da2646970667358221220f54c2652f961e5ec47149c9bc45572e2176502c0ca027b1f4eab0148986eed0e64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000001