0 txs
0 calls
lib/aave-umbrella/src/contracts/stakeToken/UmbrellaStakeToken.sol
constructor
constructor(address rewardsController)
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)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
cooldownNonces
viewfunction cooldownNonces(address owner) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getCooldown
viewfunction getCooldown() view returns (uint256)
getMaxSlashableAssets
viewfunction getMaxSlashableAssets() view returns (uint256)
getStakerCooldown
viewfunction getStakerCooldown(address user) view returns (tuple)
getUnstakeWindow
viewfunction getUnstakeWindow() view returns (uint256)
isCooldownOperator
viewfunction isCooldownOperator(address user, address operator) view returns (bool)
latestAnswer
viewfunction latestAnswer() view returns (int256)
maxDeposit
viewfunction maxDeposit(address receiver) view returns (uint256)
maxMint
viewfunction maxMint(address receiver) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxRescue
viewfunction maxRescue(address erc20Token) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
MIN_ASSETS_REMAINING
viewfunction MIN_ASSETS_REMAINING() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
REWARDS_CONTROLLER
viewfunction REWARDS_CONTROLLER() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
whoCanRescue
viewfunction whoCanRescue() view returns (address)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
cooldown
nonpayablefunction cooldown()
cooldownOnBehalfOf
nonpayablefunction cooldownOnBehalfOf(address owner)
cooldownWithPermit
nonpayablefunction cooldownWithPermit(address user, uint256 deadline, tuple sig)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256)
depositWithPermit
nonpayablefunction depositWithPermit(uint256 assets, address receiver, uint256 deadline, tuple sig) returns (uint256)
emergencyEtherTransfer
nonpayablefunction emergencyEtherTransfer(address to, uint256 amount)
emergencyTokenTransfer
nonpayablefunction emergencyTokenTransfer(address erc20Token, address to, uint256 amount)
initialize
nonpayablefunction initialize(address stakedToken, string name, string symbol, address owner, uint256 cooldown_, uint256 unstakeWindow_)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner) returns (uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
setCooldown
nonpayablefunction setCooldown(uint256 newCooldown)
setCooldownOperator
nonpayablefunction setCooldownOperator(address operator, bool flag)
setUnstakeWindow
nonpayablefunction setUnstakeWindow(uint256 newUnstakeWindow)
slash
nonpayablefunction slash(address destination, uint256 amount) returns (uint256)
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()
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address owner) returns (uint256)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
CooldownChanged
event CooldownChanged(uint256 oldCooldown, uint256 newCooldown)
CooldownOperatorSet
event CooldownOperatorSet(address indexed user, address indexed operator, bool flag)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
EIP712DomainChanged
event EIP712DomainChanged()
ERC20Rescued
event ERC20Rescued(address indexed caller, address indexed token, address indexed to, uint256 amount)
Initialized
event Initialized(uint64 version)
NativeTokensRescued
event NativeTokensRescued(address indexed caller, address indexed to, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Slashed
event Slashed(address indexed destination, uint256 amount)
StakerCooldownUpdated
event StakerCooldownUpdated(address indexed user, uint256 amount, uint256 endOfCooldown, uint256 unstakeWindow)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
UnstakeWindowChanged
event UnstakeWindowChanged(uint256 oldUnstakeWindow, uint256 newUnstakeWindow)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
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)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
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)
EthTransferFailed
error EthTransferFailed()
ExpectedPause
error ExpectedPause()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotApprovedForCooldown
error NotApprovedForCooldown(address owner, address spender)
NotInitializing
error NotInitializing()
OnlyRescueGuardian
error OnlyRescueGuardian()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
ZeroAmountSlashing
error ZeroAmountSlashing()
ZeroBalanceInStaking
error ZeroBalanceInStaking()
ZeroFundsAvailable
error ZeroFundsAvailable()
creation bytecode
0x60a060405234801561000f575f5ffd5b50604051613b76380380613b7683398101604081905261002e9161012c565b80806001600160a01b0381166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031660805261006b61007a565b5061007461007a565b50610159565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ca5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101295780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f6020828403121561013c575f5ffd5b81516001600160a01b0381168114610152575f5ffd5b9392505050565b6080516139f06101865f395f818161068601528181611eeb015281816129d00152612ae101526139f05ff3fe608060405234801561000f575f5ffd5b5060043610610372575f3560e01c80637ecebe00116101d4578063bc8fcdca11610109578063d905777e116100a9578063ef8b30f711610079578063ef8b30f71461066e578063f2fde38b1461072d578063f8f10dfc14610740578063fae9fed014610753575f5ffd5b8063d905777e146106e1578063da27578f146106f4578063dd62ed3e14610707578063eed88b8d1461071a575f5ffd5b8063cd086d45116100e4578063cd086d4514610681578063ce96cb77146106a8578063d505accf146106bb578063d7408715146106ce575f5ffd5b8063bc8fcdca1461065b578063c63d75b614610514578063c6e6f5921461066e575f5ffd5b8063a3d5b25511610174578063b0bc95a71161014f578063b0bc95a71461060f578063b3d7f6b914610622578063b460af9414610635578063ba08765214610648575f5ffd5b8063a3d5b255146105e1578063a4757b0f146105f4578063a9059cbb146105fc575f5ffd5b80638da5cb5b116101af5780638da5cb5b146105b657806390b9f9e4146105be57806394bf804d146105c657806395d89b41146105d9575f5ffd5b80637ecebe00146105805780638456cb591461059357806384b0196e1461059b575f5ffd5b80632f8a8f42116102aa5780634fc3f41a1161024a5780636e553f65116102255780636e553f651461054a57806370a082311461055d578063715018a614610570578063787a08a614610578575f5ffd5b80634fc3f41a1461052757806350d25bcd1461053a5780635c975abb14610542575f5ffd5b806338d52e0f1161028557806338d52e0f146104ec5780633f4ba83a1461050c578063402d267d146105145780634cdad506146103cc575f5ffd5b80632f8a8f421461047e578063313ce567146104ca5780633644e515146104e4575f5ffd5b806313187000116103155780632279c0c2116102f05780632279c0c21461043b57806323b872dd1461044e578063250201db14610461578063299f396614610476575f5ffd5b8063131870001461041557806318160ddd1461041f578063218e4a1514610433575f5ffd5b806306fdde031161035057806306fdde03146103b757806307a2d13a146103cc578063095ea7b3146103df5780630a28a47714610402575f5ffd5b806301e1d1141461037657806302fb4d851461039157806303fc9747146103a4575b5f5ffd5b61037e610766565b6040519081526020015b60405180910390f35b61037e61039f366004613104565b610788565b61037e6103b2366004613144565b6107a4565b6103bf610860565b60405161038891906131d7565b61037e6103da3660046131e9565b610905565b6103f26103ed366004613104565b610910565b6040519015158152602001610388565b61037e6104103660046131e9565b610927565b61037e620f424081565b5f51602061393b5f395f51905f525461037e565b61037e610933565b6103f2610449366004613200565b61094b565b6103f261045c366004613237565b610986565b61047461046f366004613275565b6109ab565b005b61037e6109f4565b61049161048c366004613275565b610a02565b6040805182516001600160c01b0316815260208084015163ffffffff908116918301919091529282015190921690820152606001610388565b6104d2610a7d565b60405160ff9091168152602001610388565b61037e610a86565b6104f4610a8f565b6040516001600160a01b039091168152602001610388565b610474610ab0565b61037e610522366004613275565b610ac2565b6104746105353660046131e9565b610ade565b61037e610aef565b6103f2610b96565b61037e610558366004613290565b610bab565b61037e61056b366004613275565b610bff565b610474610c2f565b610474610c40565b61037e61058e366004613275565b610c49565b610474610c53565b6105a3610c63565b60405161038897969594939291906132b3565b6104f4610d0c565b61037e610d34565b61037e6105d4366004613290565b610d54565b6103bf610da0565b6104746105ef366004613237565b610dde565b6104f4610e27565b6103f261060a366004613104565b610e30565b61047461061d36600461338e565b610e3d565b61037e6106303660046131e9565b611025565b61037e610643366004613433565b611031565b61037e610656366004613433565b61107e565b61037e610669366004613275565b6110cb565b61037e61067c3660046131e9565b6110f5565b6104f47f000000000000000000000000000000000000000000000000000000000000000081565b61037e6106b6366004613275565b611100565b6104746106c9366004613482565b61111e565b61037e6106dc366004613275565b611273565b61037e6106ef366004613275565b611319565b6104746107023660046134ec565b611337565b61037e610715366004613200565b611346565b610474610728366004613104565b61138f565b61047461073b366004613275565b6113d2565b61047461074e3660046131e9565b61140c565b61047461076136600461351c565b61141d565b5f61076f61153c565b60030154600160401b90046001600160c01b0316919050565b5f610791611560565b61079b8383611592565b90505b92915050565b5f6107ad610a8f565b6001600160a01b031663d505accf333088876107cc6020890189613558565b604080516001600160e01b031960e089901b1681526001600160a01b0396871660048201529590941660248601526044850192909252606484015260ff166084830152602086013560a483015285013560c482015260e4015f604051808303815f87803b15801561083b575f5ffd5b505af192505050801561084c575060015b506108578585610bab565b95945050505050565b60605f5f51602061391b5f395f51905f525b905080600301805461088390613571565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90613571565b80156108fa5780601f106108d1576101008083540402835291602001916108fa565b820191905f5260205f20905b8154815290600101906020018083116108dd57829003601f168201915b505050505091505090565b5f61079e825f6115a5565b5f3361091d8185856115e9565b5060019392505050565b5f61079e8260016115f6565b5f61093c61153c565b6003015463ffffffff16919050565b5f61095461153c565b6001600160a01b039384165f908152600191909101602090815260408083209490951682529290925250205460ff1690565b5f33610993858285611631565b61099e858585611681565b60019150505b9392505050565b6109b5813361094b565b6109e857604051630f93c4af60e41b81526001600160a01b03821660048201523360248201526044015b60405180910390fd5b6109f1816116de565b50565b5f6109fd6116ef565b905090565b604080516060810182525f8082526020820181905291810191909152610a2661153c565b6001600160a01b039092165f9081526020928352604090819020815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811695830195909552600160e01b9004909316908301525090565b5f6109fd61170a565b5f6109fd611733565b5f805f51602061397b5f395f51905f525b546001600160a01b031692915050565b610ab8611560565b610ac061173c565b565b5f610acb610b96565b15610ad757505f919050565b5f1961079e565b610ae6611560565b6109f18161179b565b5f5f610af9610d0c565b60405163a1c74e1f60e01b81523060048201526001600160a01b03919091169063a1c74e1f90602401602060405180830381865afa158015610b3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6191906135a3565b9050610b74670de0b6b3a76400006110f5565b610b8682670de0b6b3a76400006135ce565b610b9091906135f9565b91505090565b5f51602061399b5f395f51905f525460ff1690565b5f5f610bb683610ac2565b905080841115610bdf57828482604051633c8097d960e11b81526004016109df9392919061360c565b5f610be9856110f5565b9050610bf73385878461181a565b949350505050565b5f805f51602061391b5f395f51905f525b6001600160a01b039093165f9081526020939093525050604090205490565b610c37611560565b610ac05f611884565b610ac0336116de565b5f61079e826118f4565b610c5b611560565b610ac061191c565b5f60608082808083815f51602061395b5f395f51905f528054909150158015610c8e57506001810154155b610cd25760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016109df565b610cda611964565b610ce26119a2565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610aa0565b5f610d3d61153c565b60030154640100000000900463ffffffff16919050565b5f5f610d5f83610ac2565b905080841115610d885782848260405163284ff66760e01b81526004016109df9392919061360c565b5f610d9285611025565b9050610bf73385838861181a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f51602061391b5f395f51905f529161088390613571565b610de6610e27565b6001600160a01b0316336001600160a01b031614610e1757604051633a02626960e01b815260040160405180910390fd5b610e228383836119b8565b505050565b5f6109fd610d0c565b5f3361091d818585611681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610e825750825b90505f8267ffffffffffffffff166001148015610e9e5750303b155b905081158015610eac575080155b15610eca5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ef457845460ff60401b1916600160401b1785555b610f768c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a4692505050565b610fb48c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a5892505050565b610fbc611a83565b610fc588611a93565b610fd08d8888611aa4565b831561101657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b5f61079e8260016115a5565b5f5f61103c83611100565b90508085111561106557828582604051633fa733bb60e21b81526004016109df9392919061360c565b5f61106f86610927565b90506108573386868985611abf565b5f5f61108983611319565b9050808511156110b257828582604051632e52afbb60e21b81526004016109df9392919061360c565b5f6110bc86610905565b9050610857338686848a611abf565b5f6110d461153c565b6001600160a01b039092165f90815260029290920160205250604090205490565b5f61079e825f6115f6565b5f611109610b96565b1561111557505f919050565b61079e82611b2b565b834211156111425760405163313c898160e11b8152600481018590526024016109df565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111ac8c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61120682611b3e565b90505f61121582878787611b6a565b9050896001600160a01b0316816001600160a01b03161461125c576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016109df565b6112678a8a8a6115e9565b50505050505050505050565b5f61127c610a8f565b6001600160a01b0316826001600160a01b03160361130c5761129c610766565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156112de573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130291906135a3565b61079e9190613641565b505f19919050565b919050565b5f611322610b96565b1561132e57505f919050565b61079e82611b96565b611342338383611c40565b5050565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b611397610e27565b6001600160a01b0316336001600160a01b0316146113c857604051633a02626960e01b815260040160405180910390fd5b6113428282611cbf565b6113da611560565b6001600160a01b03811661140357604051631e4fbdf760e01b81525f60048201526024016109df565b6109f181611884565b611414611560565b6109f181611d86565b814211156114415760405163313c898160e11b8152600481018390526024016109df565b5f7f4e8def0b305e19b8e349a25a387ca28c4a1d80555dd57e35f2526d800363e1bd843361146e87611e12565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810184905260c0016040516020818303038152906040528051906020012090505f6114c182611b3e565b90505f6114e4826114d56020870187613558565b86602001358760400135611b6a565b9050856001600160a01b0316816001600160a01b03161461152b576040516325c0072360e11b81526001600160a01b038083166004830152871660248201526044016109df565b611534866116de565b505050505050565b7f3b7d252e513ca0740d527649afeab4abf7cb6ef2e75cb52cd2b8721d2183460090565b33611569610d0c565b6001600160a01b031614610ac05760405163118cdaa760e01b81523360048201526024016109df565b5f61159b611e44565b61079b8383611e6a565b5f61079b6115b1610766565b6115bc906001613654565b6115c75f600a61374a565b5f51602061393b5f395f51905f52546115e09190613654565b85919085612053565b610e228383836001612095565b5f61079b61160582600a61374a565b5f51602061393b5f395f51905f525461161e9190613654565b611626610766565b6115e0906001613654565b5f61163c8484611346565b90505f19811461167b578181101561166d57828183604051637dc7a0d960e11b81526004016109df9392919061360c565b61167b84848484035f612095565b50505050565b6001600160a01b0383166116aa57604051634b637e8f60e11b81525f60048201526024016109df565b6001600160a01b0382166116d35760405163ec442f0560e01b81525f60048201526024016109df565b610e22838383612179565b6116e6611e44565b6109f18161218c565b5f6116f8610b96565b1561170257505f90565b6109fd6122d1565b5f805f51602061397b5f395f51905f5290505f8154610b909190600160a01b900460ff16613758565b5f6109fd612301565b611744612374565b5f51602061399b5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f6117a461153c565b6003015463ffffffff1690506117b982612399565b6117c161153c565b600301805463ffffffff191663ffffffff9290921691909117905560408051828152602081018490527f0731af75921ee6c66096a5c95daa1adcf95ff01e0ce8063a2369cb218ee4bcc991015b60405180910390a15050565b611826848484846123cd565b61182f8261244a565b61183761153c565b600301805460089061185a908490600160401b90046001600160c01b0316613771565b92506101000a8154816001600160c01b0302191690836001600160c01b0316021790555050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610c10565b611924611e44565b5f51602061399b5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361177d565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f51602061395b5f395f51905f529161088390613571565b60605f5f51602061395b5f395f51905f52610872565b5f6119c284611273565b90508181116119d157806119d3565b815b91506119e96001600160a01b038516848461247d565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc7af665d489507e14ae25ac7ab0030fc7f570869610bdd32117ea56b60ae5c6185604051611a3891815260200190565b60405180910390a450505050565b611a4e6124dc565b6113428282612525565b611a606124dc565b6109f181604051806040016040528060018152602001603160f81b815250612575565b611a8b6124dc565b610ac06125d4565b611a9b6124dc565b6109f1816125f4565b611aac6124dc565b611ab5836125fc565b610e22828261266c565b611acc8585858585612686565b611ad58261244a565b611add61153c565b6003018054600890611b00908490600160401b90046001600160c01b0316613790565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055505050505050565b5f61079e611b3883611319565b5f6115a5565b5f61079e611b4a611733565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f611b7a8888888861273a565b925092509250611b8a8282612802565b50909695505050505050565b5f5f611ba061153c565b6001600160a01b0384165f9081526020918252604090819020815160608101835290546001600160c01b038116825263ffffffff600160c01b82048116948301859052600160e01b909104169181019190915291504210801590611c235750806040015163ffffffff16816020015163ffffffff1642611c209190613641565b11155b15611c3857516001600160c01b031692915050565b505f92915050565b80611c4961153c565b6001600160a01b038581165f8181526001939093016020908152604080852093881680865293825293849020805460ff1916951515959095179094559151841515815290927fa38c17a90fc13db5a035877139d3649d9c7f05910b0a71aedd38e8fc97e8ec0b91015b60405180910390a3505050565b604080515f808252602082019092526001600160a01b038416908390604051611ce891906137af565b5f6040518083038185875af1925050503d805f8114611d22576040519150601f19603f3d011682016040523d82523d5f602084013e611d27565b606091505b5050905080611d4957604051630db2c7f160e31b815260040160405180910390fd5b6040518281526001600160a01b0384169033907fb7c602059992183c7b767c08204223afc99f1895fd175adf9ece23ce9f5bb8b790602001611cb2565b5f611d8f61153c565b60030154640100000000900463ffffffff169050611dac82612399565b611db461153c565b600301805463ffffffff929092166401000000000267ffffffff000000001990921691909117905560408051828152602081018490527f6fca801becb9707cbca62182fa0b26a34d43b1a631a501b6c1ac5ae2232a70e9910161180e565b5f611e1b61153c565b6001600160a01b039092165f908152600292909201602052506040902080546001810190915590565b611e4c610b96565b15610ac05760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038316611e925760405163d92e233d60e01b815260040160405180910390fd5b815f03611eb257604051633eec77c160e01b815260040160405180910390fd5b5f611ebb6116ef565b9050805f03611edd57604051633f2a0e3360e21b815260040160405180910390fd5b80831115611ee9578092505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635d4654ec611f2d5f51602061393b5f395f51905f525490565b611f35610766565b6040516001600160e01b031960e085901b168152600481019290925260248201525f6044820181905260648201526084015f604051808303815f87803b158015611f7d575f5ffd5b505af1158015611f8f573d5f5f3e3d5ffd5b50505050611f9c8361244a565b611fa461153c565b6003018054600890611fc7908490600160401b90046001600160c01b0316613790565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055506120088484611ff8610a8f565b6001600160a01b0316919061247d565b836001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd8460405161204391815260200190565b60405180910390a2509092915050565b5f612080612060836128ba565b801561207b57505f8480612076576120766135e5565b868809115b151590565b61208b8686866128e6565b6108579190613654565b5f51602061391b5f395f51905f526001600160a01b0385166120cc5760405163e602df0560e01b81525f60048201526024016109df565b6001600160a01b0384166120f557604051634a1406b160e11b81525f60048201526024016109df565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561217257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161216991815260200190565b60405180910390a35b5050505050565b612181611e44565b610e2283838361299c565b5f61219682610bff565b9050805f036121b857604051630e26157960e11b815260040160405180910390fd5b5f6121c161153c565b90505f60405180606001604052806121d88561244a565b6001600160c01b031681526003840154602090910190612207906122029063ffffffff1642613654565b612399565b63ffffffff90811682526003850154640100000000900481166020928301526001600160a01b0387165f8181528684526040908190208551815487870151888501518716600160e01b81026001600160e01b0392909816600160c01b81026001600160e01b03199094166001600160c01b03909516949094179290921716959095179091558151898152948501528301919091529192507fddc8760931d97309f92a4266c6046f83387e6407bcd727e7dd2130bfc430c4199060600160405180910390a250505050565b5f5f6122db610766565b9050620f42408111156122fa576122f5620f424082613641565b610b90565b5f91505090565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61232b612d2c565b612333612d94565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b61237c610b96565b610ac057604051638dfc202b60e01b815260040160405180910390fd5b5f63ffffffff8211156123c9576040516306dfcc6560e41b815260206004820152602481018390526044016109df565b5090565b5f51602061397b5f395f51905f5280546123f2906001600160a01b0316863086612dd6565b6123fc8483612e0f565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051612169929190918252602082015260400190565b5f6001600160c01b038211156123c9576040516306dfcc6560e41b815260c06004820152602481018390526044016109df565b6040516001600160a01b03838116602483015260448201839052610e2291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612e43565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610ac057604051631afcd79f60e31b815260040160405180910390fd5b61252d6124dc565b5f51602061391b5f395f51905f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03612566848261380e565b506004810161167b838261380e565b61257d6124dc565b5f51602061395b5f395f51905f527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026125b6848261380e565b50600381016125c5838261380e565b505f8082556001909101555050565b6125dc6124dc565b5f51602061399b5f395f51905f52805460ff19169055565b6113da6124dc565b6126046124dc565b5f51602061397b5f395f51905f525f8061261d84612eaf565b915091508161262d57601261262f565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b6126746124dc565b61267d8261179b565b61134281611d86565b5f51602061397b5f395f51905f526001600160a01b03868116908516146126b2576126b2848784611631565b6126bc8483612f85565b80546126d2906001600160a01b0316868561247d565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db868660405161272a929190918252602082015260400190565b60405180910390a4505050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561277357505f915060039050826127f8565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156127c4573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166127ef57505f9250600191508290506127f8565b92505f91508190505b9450945094915050565b5f826003811115612815576128156138c9565b0361281e575050565b6001826003811115612832576128326138c9565b036128505760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612864576128646138c9565b036128855760405163fce698f760e01b8152600481018290526024016109df565b6003826003811115612899576128996138c9565b03611342576040516335e2f38360e21b8152600481018290526024016109df565b5f60028260038111156128cf576128cf6138c9565b6128d991906138dd565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f0361291a57838281612910576129106135e5565b04925050506109a4565b808411612931576129316003851502601118612fb9565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6129b25f51602061393b5f395f51905f525490565b90505f6129bd610766565b90506001600160a01b03841615612a71577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635d4654ec838387612a0989610bff565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0316604483015260648201526084015f604051808303815f87803b158015612a5a575f5ffd5b505af1158015612a6c573d5f5f3e3d5ffd5b505050505b6001600160a01b03851615801590612a9b5750836001600160a01b0316856001600160a01b031614155b15612d21575f612aaa86610bff565b604051631751953b60e21b815260048101859052602481018490526001600160a01b038881166044830152606482018390529192507f000000000000000000000000000000000000000000000000000000000000000090911690635d4654ec906084015f604051808303815f87803b158015612b24575f5ffd5b505af1158015612b36573d5f5f3e3d5ffd5b505050505f612b4361153c565b6001600160a01b0388165f9081526020828152604091829020825160608101845290546001600160c01b038116825263ffffffff600160c01b82048116938301849052600160e01b90910416928101839052929350612ba291906138fe565b63ffffffff164211612d1d576001600160a01b038716612be557612bc58661244a565b81518290612bd4908390613790565b6001600160c01b0316905250612c26565b5f612bf8612bf38886613641565b61244a565b9050815f01516001600160c01b0316816001600160c01b03161015612c24576001600160c01b03811682525b505b80516001600160a01b0389165f908152602084905260409020546001600160c01b03908116911614612d1d5780516001600160c01b03165f03612c71575f6020820181905260408201525b6001600160a01b0388165f81815260208481526040918290208451815486840151878601516001600160c01b039093166001600160e01b03199092168217600160c01b63ffffffff928316908102919091176001600160e01b0316600160e01b9290941691820293909317909355845190815292830152918101919091527fddc8760931d97309f92a4266c6046f83387e6407bcd727e7dd2130bfc430c4199060600160405180910390a25b5050505b612172858585612fca565b5f5f51602061395b5f395f51905f5281612d44611964565b805190915015612d5c57805160209091012092915050565b81548015612d6b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f51602061395b5f395f51905f5281612dac6119a2565b805190915015612dc457805160209091012092915050565b60018201548015612d6b579392505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261167b9186918216906323b872dd906084016124aa565b6001600160a01b038216612e385760405163ec442f0560e01b81525f60048201526024016109df565b6113425f8383612179565b5f5f60205f8451602086015f885af180612e62576040513d5f823e3d81fd5b50505f513d91508115612e79578060011415612e86565b6001600160a01b0384163b155b1561167b57604051635274afe760e01b81526001600160a01b03851660048201526024016109df565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691612ef5916137af565b5f60405180830381855afa9150503d805f8114612f2d576040519150601f19603f3d011682016040523d82523d5f602084013e612f32565b606091505b5091509150818015612f4657506020815110155b15612f79575f81806020019051810190612f6091906135a3565b905060ff8111612f77576001969095509350505050565b505b505f9485945092505050565b6001600160a01b038216612fae57604051634b637e8f60e11b81525f60048201526024016109df565b611342825f83612179565b634e487b715f52806020526024601cfd5b5f51602061391b5f395f51905f526001600160a01b0384166130045781816002015f828254612ff99190613654565b909155506130619050565b6001600160a01b0384165f90815260208290526040902054828110156130435784818460405163391434e360e21b81526004016109df9392919061360c565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661307f57600281018054839003905561309d565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130e291815260200190565b60405180910390a350505050565b6001600160a01b03811681146109f1575f5ffd5b5f5f60408385031215613115575f5ffd5b8235613120816130f0565b946020939093013593505050565b5f6060828403121561313e575f5ffd5b50919050565b5f5f5f5f60c08587031215613157575f5ffd5b843593506020850135613169816130f0565b92506040850135915061317f866060870161312e565b905092959194509250565b5f5b838110156131a457818101518382015260200161318c565b50505f910152565b5f81518084526131c381602086016020860161318a565b601f01601f19169290920160200192915050565b602081525f61079b60208301846131ac565b5f602082840312156131f9575f5ffd5b5035919050565b5f5f60408385031215613211575f5ffd5b823561321c816130f0565b9150602083013561322c816130f0565b809150509250929050565b5f5f5f60608486031215613249575f5ffd5b8335613254816130f0565b92506020840135613264816130f0565b929592945050506040919091013590565b5f60208284031215613285575f5ffd5b81356109a4816130f0565b5f5f604083850312156132a1575f5ffd5b82359150602083013561322c816130f0565b60ff60f81b8816815260e060208201525f6132d160e08301896131ac565b82810360408401526132e381896131ac565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561333857835183526020938401939092019160010161331a565b50909b9a5050505050505050505050565b5f5f83601f840112613359575f5ffd5b50813567ffffffffffffffff811115613370575f5ffd5b602083019150836020828501011115613387575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156133a5575f5ffd5b88356133b0816130f0565b9750602089013567ffffffffffffffff8111156133cb575f5ffd5b6133d78b828c01613349565b909850965050604089013567ffffffffffffffff8111156133f6575f5ffd5b6134028b828c01613349565b9096509450506060890135613416816130f0565b979a969950949793969295929450505060808201359160a0013590565b5f5f5f60608486031215613445575f5ffd5b833592506020840135613457816130f0565b91506040840135613467816130f0565b809150509250925092565b803560ff81168114611314575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613498575f5ffd5b87356134a3816130f0565b965060208801356134b3816130f0565b955060408801359450606088013593506134cf60808901613472565b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156134fd575f5ffd5b8235613508816130f0565b91506020830135801515811461322c575f5ffd5b5f5f5f60a0848603121561352e575f5ffd5b8335613539816130f0565b92506020840135915061354f856040860161312e565b90509250925092565b5f60208284031215613568575f5ffd5b61079b82613472565b600181811c9082168061358557607f821691505b60208210810361313e57634e487b7160e01b5f52602260045260245ffd5b5f602082840312156135b3575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761079e5761079e6135ba565b634e487b7160e01b5f52601260045260245ffd5b5f82613607576136076135e5565b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b8181038181111561079e5761079e6135ba565b8082018082111561079e5761079e6135ba565b6001815b60018411156136a257808504811115613686576136866135ba565b600184161561369457908102905b60019390931c92800261366b565b935093915050565b5f826136b85750600161079e565b816136c457505f61079e565b81600181146136da57600281146136e457613700565b600191505061079e565b60ff8411156136f5576136f56135ba565b50506001821b61079e565b5060208310610133831016604e8410600b8410161715613723575081810a61079e565b61372f5f198484613667565b805f1904821115613742576137426135ba565b029392505050565b5f61079b60ff8416836136aa565b60ff818116838216019081111561079e5761079e6135ba565b6001600160c01b03818116838216019081111561079e5761079e6135ba565b6001600160c01b03828116828216039081111561079e5761079e6135ba565b5f82516137c081846020870161318a565b9190910192915050565b601f821115610e2257805f5260205f20601f840160051c810160208510156137ef5750805b601f840160051c820191505b81811015612172575f81556001016137fb565b815167ffffffffffffffff8111156138285761382861362d565b61383c816138368454613571565b846137ca565b6020601f82116001811461386e575f83156138575750848201515b5f19600385901b1c1916600184901b178455612172565b5f84815260208120601f198516915b8281101561389d578785015182556020948501946001909201910161387d565b50848210156138ba57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffd5b5f60ff8316806138ef576138ef6135e5565b8060ff84160691505092915050565b63ffffffff818116838216019081111561079e5761079e6135ba56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1000773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122031799ed4c52a76224463b045c85374e5da8caa0a25c4b44e6496d2bfdd6c66f264736f6c634300081b00330000000000000000000000004655ce3d625a63d30ba704087e52b4c31e38188b