0 txs
97 calls
constructor
constructor()
functions
asset
viewfunction asset() view returns (address)
assetsUpdatedOn
viewfunction assetsUpdatedOn() view returns (uint256)
assetsWhitelistAddress
viewfunction assetsWhitelistAddress() view returns (address)
depositsPaused
viewfunction depositsPaused() view returns (bool)
externalAssets
viewfunction externalAssets() view returns (uint256)
feeCollectors
viewfunction feeCollectors(uint256) view returns (address collectorAddress, uint256 percentage)
feesTimestamp
viewfunction feesTimestamp() view returns (uint256)
getBurnableAmountByReceiver
viewfunction getBurnableAmountByReceiver(uint256 year, uint256 month, uint256 day, address receiverAddr) view returns (uint256)
getChangePercentage
viewfunction getChangePercentage(uint256 externalAssetsAmount) view returns (uint256)
getFeeCollectors
viewfunction getFeeCollectors() view returns (tuple[])
getMaxAllowedChange
viewfunction getMaxAllowedChange() view returns (uint256)
getPerformanceFeeRecipients
viewfunction getPerformanceFeeRecipients() view returns (tuple[])
getRequirementByDate
viewfunction getRequirementByDate(uint256 year, uint256 month, uint256 day) view returns (uint256 shares)
getScheduledTransactionsByDate
viewfunction getScheduledTransactionsByDate(uint256 year, uint256 month, uint256 day) view returns (uint256 totalTransactions, uint256 executionEpoch)
getSharePrice
viewfunction getSharePrice() view returns (uint256)
getTotalAssets
viewfunction getTotalAssets() view returns (uint256)
getWithdrawalEpoch
viewfunction getWithdrawalEpoch() view returns (uint256 year, uint256 month, uint256 day, uint256 claimableEpoch)
globalLiabilityShares
viewfunction globalLiabilityShares() view returns (uint256)
highWatermark
viewfunction highWatermark() view returns (uint256)
instantRedemptionFee
viewfunction instantRedemptionFee() view returns (uint256)
lagDuration
viewfunction lagDuration() view returns (uint256)
lpTokenAddress
viewfunction lpTokenAddress() view returns (address)
managementFeePercent
viewfunction managementFeePercent() view returns (uint256)
maxChangePercent
viewfunction maxChangePercent() view returns (uint256)
maxDepositAmount
viewfunction maxDepositAmount() view returns (uint256)
maxWithdrawalAmount
viewfunction maxWithdrawalAmount() view returns (uint256)
operatorAddress
viewfunction operatorAddress() view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
performanceFeeRate
viewfunction performanceFeeRate() view returns (uint256)
performanceFeeRecipients
viewfunction performanceFeeRecipients(uint256) view returns (address collectorAddress, uint256 percentage)
previewDeposit
viewfunction previewDeposit(address assetIn, uint256 amountIn) view returns (uint256, uint256)
previewRedemption
viewfunction previewRedemption(uint256 shares, bool isInstant) view returns (uint256 assetsAmount, uint256 assetsAfterFee)
scheduledCallerAddress
viewfunction scheduledCallerAddress() view returns (address)
sendersWhitelistAddress
viewfunction sendersWhitelistAddress() view returns (address)
totalCollectableFees
viewfunction totalCollectableFees() view returns (uint256)
watermarkTimeWindow
viewfunction watermarkTimeWindow() view returns (uint256)
watermarkUpdatedOn
viewfunction watermarkUpdatedOn() view returns (uint256)
whitelistedSubAccounts
viewfunction whitelistedSubAccounts(address) view returns (uint8)
withdrawalFee
viewfunction withdrawalFee() view returns (uint256)
withdrawalsPaused
viewfunction withdrawalsPaused() view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
chargeManagementFee
nonpayablefunction chargeManagementFee()
chargePerformanceFees
nonpayablefunction chargePerformanceFees()
claim
nonpayablefunction claim(uint256 year, uint256 month, uint256 day, address receiverAddr) returns (uint256, uint256)
collectFees
nonpayablefunction collectFees()
configure
nonpayablefunction configure(tuple newConfig)
deposit
nonpayablefunction deposit(address assetIn, uint256 amountIn, address receiverAddr) returns (uint256)
depositToSubaccount
nonpayablefunction depositToSubaccount(address inputAssetAddr, uint256 depositAmount, address subAccountAddr)
disableSubAccount
nonpayablefunction disableSubAccount(address addr)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address receiverAddr)
enableSubAccount
nonpayablefunction enableSubAccount(address addr, uint8 accountType)
initialize
nonpayablefunction initialize(address ownerAddr)
instantRedeem
nonpayablefunction instantRedeem(uint256 shares, address receiverAddr)
pauseDepositsAndWithdrawals
nonpayablefunction pauseDepositsAndWithdrawals(bool bPauseDeposits, bool bPauseWithdrawals)
processAllClaimsByDate
nonpayablefunction processAllClaimsByDate(uint256 year, uint256 month, uint256 day, uint256 maxLimit)
requestRedeem
nonpayablefunction requestRedeem(uint256 shares, address receiverAddr) returns (uint256 claimableEpoch, uint256 year, uint256 month, uint256 day)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateAssetsWhitelist
nonpayablefunction updateAssetsWhitelist(address newWhitelistAddr)
updateFeeCollectors
nonpayablefunction updateFeeCollectors(tuple[] collectors)
updateManagementFee
nonpayablefunction updateManagementFee(uint256 newManagementFeePercent)
updateMaxChangePercent
nonpayablefunction updateMaxChangePercent(uint256 newValue)
updatePerformanceFeeCollectors
nonpayablefunction updatePerformanceFeeCollectors(tuple[] collectors)
updateSendersWhitelist
nonpayablefunction updateSendersWhitelist(address newWhitelistAddr)
updateTimelockDuration
nonpayablefunction updateTimelockDuration(uint256 newDuration)
updateTotalAssets
nonpayablefunction updateTotalAssets(uint256 externalAssetsAmount)
withdrawFromSubaccount
nonpayablefunction withdrawFromSubaccount(address inputAssetAddr, uint256 amount, address subAccountAddr)
events
ContractConfigured
event ContractConfigured()
Deposit
event Deposit(address assetIn, uint256 amountIn, uint256 shares, address indexed senderAddr, address indexed receiverAddr)
DepositWithdrawalStatusChanged
event DepositWithdrawalStatusChanged(bool bDepositsPaused, bool bWithdrawalsPaused)
FeesCollected
event FeesCollected()
Initialized
event Initialized(uint8 version)
ManagementFeeCharged
event ManagementFeeCharged(uint256 managementFeeAmount)
ManagementFeeUpdated
event ManagementFeeUpdated(uint256 newManagementFeePercent)
MaxChangePercentUpdated
event MaxChangePercentUpdated(uint256 newValue)
OnEmergencyWithdraw
event OnEmergencyWithdraw(address receiverAddr)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
SendersWhitelistUpdated
event SendersWhitelistUpdated(address newWhitelistAddr)
SubAccountDisabled
event SubAccountDisabled(address subAccountAddr)
SubAccountEnabled
event SubAccountEnabled(address subAccountAddr)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawalProcessed
event WithdrawalProcessed(uint256 assetsAmount, address indexed receiverAddr)
WithdrawalRequested
event WithdrawalRequested(uint256 shares, address indexed holderAddr, address indexed receiverAddr)
errors
AccountNotWhitelisted
error AccountNotWhitelisted()
AlreadyConfigured
error AlreadyConfigured()
AmountTooLow
error AmountTooLow()
AssetNotWhitelisted
error AssetNotWhitelisted()
CollectableFeesExceeded
error CollectableFeesExceeded(uint256 fee, uint256 remaining)
DepositsPaused
error DepositsPaused()
FeeAmountTooLow
error FeeAmountTooLow()
FeesMustSum100
error FeesMustSum100()
HighWatermarkDurationError
error HighWatermarkDurationError()
HighWatermarkViolation
error HighWatermarkViolation()
InsufficientShares
error InsufficientShares()
InvalidAccountType
error InvalidAccountType()
InvalidAddress
error InvalidAddress()
InvalidAmount
error InvalidAmount()
InvalidExternalAssets
error InvalidExternalAssets()
InvalidLagDuration
error InvalidLagDuration()
InvalidReceiver
error InvalidReceiver()
InvalidTimestamp
error InvalidTimestamp()
LimitRequired
error LimitRequired()
MaxAllowedChangeReached
error MaxAllowedChangeReached()
MaxDepositAmountReached
error MaxDepositAmountReached()
MissingFeeCollectors
error MissingFeeCollectors()
NoSharesForReceiver
error NoSharesForReceiver()
NotConfigured
error NotConfigured()
NothingToProcess
error NothingToProcess()
OnlyOwnerOrOperator
error OnlyOwnerOrOperator()
OperatorOnly
error OperatorOnly()
OwnerAddressRequired
error OwnerAddressRequired()
OwnerOnly
error OwnerOnly()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
ReferenceAssetMismatch
error ReferenceAssetMismatch()
SenderNotWhitelisted
error SenderNotWhitelisted()
TokenDecimalsMismatch
error TokenDecimalsMismatch()
TooEarly
error TooEarly()
Unauthorized
error Unauthorized()
VaultNotTimelocked
error VaultNotTimelocked()
WhitelistLimitReached
error WhitelistLimitReached()
WithdrawalLimitReached
error WithdrawalLimitReached()
WithdrawalsPaused
error WithdrawalsPaused()
ZeroAddressError
error ZeroAddressError()
creation bytecode
0x6080604052348015600e575f80fd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6159f0806100e05f395ff3fe608060405234801561000f575f80fd5b50600436106103e0575f3560e01c80638da5cb5b1161020b578063d3a8d7181161011f578063e9f2838e116100b4578063f5ae497a11610084578063f5ae497a14610843578063fa20e0fe14610856578063fc6fb8371461085f578063ff06002b14610868578063ff3c63c01461087b575f80fd5b8063e9f2838e146107f6578063f2fde38b1461080a578063f3cbf47c1461081d578063f45346dc14610830575f80fd5b8063e2eb36b9116100ef578063e2eb36b9146107c0578063e30c3978146107d3578063e6228680146107e4578063e976d431146107ed575f80fd5b8063d3a8d7181461079e578063d961b58c146107a6578063dad361c5146107af578063dece0102146107b8575f80fd5b8063be1f9214116101a0578063c879657211610170578063c879657214610755578063c8e11e8e1461075d578063ca55a55714610770578063cb3dc35714610778578063cdb1fb2b1461078b575f80fd5b8063be1f921414610709578063c25dd81f1461071c578063c3646a0f1461072f578063c4d66de814610742575f80fd5b8063b3c9e83d116101db578063b3c9e83d1461069c578063b4db4be8146106af578063b8f82b26146106c2578063bb270709146106d5575f80fd5b80638da5cb5b146106665780638ed832711461067757806390f1c5f1146106805780639cb43f8114610693575f80fd5b8063520cd036116103025780636ff1c9bc1161029757806379ba50971161026757806379ba5097146106305780638120b57914610638578063820fe4be146106415780638bc7e8c41461064a5780638c0190e314610653575f80fd5b80636ff1c9bc146105f857806373f351c81461060b578063785c312714610614578063790739a21461061d575f80fd5b806360da3e83116102d257806360da3e83146105915780636c46407b146105b55780636e07302b146105dd5780636f4ab3dd146105e5575f80fd5b8063520cd036146105475780635486679d1461054f5780635b1dac60146105575780635d9e5cab1461055f575f80fd5b80631f4f519c1161037857806329451a221161034857806329451a221461050757806336b7ea151461051a57806338d52e0f146105235780633c7ecb4a14610534575f80fd5b80631f4f519c146104c557806322928208146104d857806324e86d67146104eb57806328f85680146104f4575f80fd5b8063127effb2116103b3578063127effb214610461578063184466c91461048c5780631bca51131461049f5780631dddfbe1146104b2575f80fd5b8063030d624a146103e457806309f25fc0146103f95780630ffbfda414610417578063107703ab1461042e575b5f80fd5b6103f76103f236600461514d565b6108cc565b005b610401610a46565b60405161040e9190615164565b60405180910390f35b610420603e5481565b60405190815260200161040e565b61044161043c3660046151df565b610ab9565b60408051948552602085019390935291830152606082015260800161040e565b600654610474906001600160a01b031681565b6040516001600160a01b03909116815260200161040e565b6103f761049a36600461514d565b610e9a565b6103f76104ad36600461520d565b610fab565b6103f76104c036600461527e565b611190565b6103f76104d336600461514d565b611372565b6103f76104e63660046151df565b61144f565b610420602a5481565b61042061050236600461514d565b611603565b6103f761051536600461520d565b611689565b61042060185481565b601b546001600160a01b0316610474565b6103f76105423660046152bd565b611840565b610420611994565b6103f76119f2565b610420611dc0565b61057261056d36600461514d565b611dc9565b604080516001600160a01b03909316835260208301919091520161040e565b6006546105a590600160a01b900460ff1681565b604051901515815260200161040e565b6105c86105c33660046152d8565b611dff565b6040805192835260208301919091520161040e565b610420611e5a565b6103f76105f336600461527e565b611e63565b6103f76106063660046152bd565b612026565b61042060195481565b61042060145481565b6103f761062b36600461514d565b6122d9565b6103f7612406565b610420603b5481565b61042060295481565b610420602b5481565b6103f761066136600461530e565b6124f2565b6002546001600160a01b0316610474565b610420601a5481565b61057261068e36600461514d565b61260c565b610420602c5481565b6105c86106aa36600461533a565b61261b565b6105c86106bd366004615378565b6129c2565b6105c86106d036600461539b565b6129ee565b6106f76106e33660046152bd565b60096020525f908152604090205460ff1681565b60405160ff909116815260200161040e565b61042061071736600461533a565b612a89565b600854610474906001600160a01b031681565b6103f761073d3660046152bd565b612ae2565b6103f76107503660046152bd565b612bd3565b6103f7612d07565b6103f761076b3660046152bd565b612ef1565b610441612fd5565b6103f7610786366004615434565b61300a565b601d54610474906001600160a01b031681565b6103f7613410565b61042060155481565b610420603d5481565b6104016134fe565b600754610474906001600160a01b031681565b6003546001600160a01b0316610474565b61042060165481565b61042060285481565b6006546105a590600160a81b900460ff1681565b6103f76108183660046152bd565b613567565b6103f761082b366004615530565b6135ed565b61042061083e36600461527e565b613ae5565b601c54610474906001600160a01b031681565b61042060175481565b610420603c5481565b6103f761087636600461556d565b613e57565b6104206108893660046152d8565b604080516020808201959095528082019390935260608084019290925280518084039092018252608090920182528051908301205f908152602d90925290205490565b6002600154036108ef57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff1661091e5760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b0316331461094957604051630b2db9b760e31b815260040160405180910390fd5b5f8160405160240161095d91815260200190565b60408051601f19818403018152918152602080830180516001600160e01b0316630186b12560e11b17905290516109959291016155c7565b60408051601f19818403018152908290528051602091820120601985905584835292507f2147e2bc8c39e67f74b1a9e08896ea1485442096765942206af1f4bc8bcde91791015b60405180910390a160075460405163af6f8c1b60e01b8152600481018390526001600160a01b039091169063af6f8c1b906024015b5f604051808303815f87803b158015610a28575f80fd5b505af1158015610a3a573d5f803e3d5ffd5b50506001805550505050565b60606005805480602002602001604051908101604052809291908181526020015f905b82821015610ab0575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a69565b50505050905090565b5f805f80600260015403610ae057604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16610b0f5760405163d311bc3960e01b815260040160405180910390fd5b600654600160a81b900460ff1615610b3a57604051636022a9e760e01b815260040160405180910390fd5b6002546001600160a01b03163314801590610b6057506006546001600160a01b03163314155b8015610b7657506008546001600160a01b031615155b8015610be95750600854604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015610bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be791906155d9565b155b15610c0757604051637ed449a960e01b815260040160405180910390fd5b6001600160a01b0385161580610c2557506001600160a01b03851630145b15610c4357604051631e4ec46b60e01b815260040160405180910390fd5b6001861015610c655760405163162908e360e11b815260040160405180910390fd5b5f80610c7388602b54613fb4565b91509150602854821115610c9a57604051631b6132ab60e31b815260040160405180910390fd5b6001811015610cbc57604051631fbaba3560e01b815260040160405180910390fd5b6001602a541015610ce0576040516394fa99e760e01b815260040160405180910390fd5b602a54610d0290610cf361012c42615608565b610cfd9190615608565b613ffa565b604080516020808201869052818301859052606080830185905283518084039091018152608090920190925280519101209297509095509350610d498686865f808061401f565b965088602c5f828254610d5c9190615608565b90915550505f818152602d6020526040812080548b9290610d7e908490615608565b90915550505f818152602e602090815260408083206001600160a01b038c1684529091528120549003610dfc575f818152602f6020908152604080832080546001810182558185528385200180546001600160a01b0319166001600160a01b038e169081179091558585529054603084528285209185529252909120555b5f818152602e602090815260408083206001600160a01b038c168452909152812080548b9290610e2d908490615608565b90915550506040518981526001600160a01b0389169033907fcf41fab81bee2456b7007d9d1a9e2261a6627a41eba8c3302b6b07f9a7a463959060200160405180910390a3601c54610e8a906001600160a01b031633308c61407a565b5050600180555092959194509250565b600260015403610ebd57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16610eec5760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b03163314610f1757604051630b2db9b760e31b815260040160405180910390fd5b602a819055604051602481018290525f9060440160408051601f19818403018152918152602080830180516001600160e01b031663184466c960e01b1790529051610f639291016155c7565b60408051808303601f1901815290829052805160209091012060075463af6f8c1b60e01b8352600483018290529092506001600160a01b03169063af6f8c1b90602401610a11565b600260015403610fce57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16610ffd5760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b0316331461102857604051630b2db9b760e31b815260040160405180910390fd5b5f81600181101561104c576040516333f52ff560e01b815260040160405180910390fd5b61105760055f61510b565b5f5b818110156111625760018585838181106110755761107561561b565b90506040020160200135101561109e5760405163162908e360e11b815260040160405180910390fd5b5f8585838181106110b1576110b161561b565b6110c792602060409092020190810191506152bd565b6001600160a01b0316036110ee5760405163e6c4247b60e01b815260040160405180910390fd5b8484828181106111005761110061561b565b90506040020160200135836111159190615608565b9250600585858381811061112b5761112b61561b565b83546001810185555f9485526020909420604090910292909201926002029091019050611158828261562f565b5050600101611059565b5081620f4240146111865760405163e31ac1db60e01b815260040160405180910390fd5b5050600180555050565b6002600154036111b357604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166111e25760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b0316331480159061120857506002546001600160a01b03163314155b156112265760405163089b7a0760e41b815260040160405180910390fd5b60018210156112485760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0381165f9081526009602052604090205460ff1660018110156112855760405163014cc88960e21b815260040160405180910390fd5b601b545f906001600160a01b038681169116146112ab576112a685856140eb565b6112ad565b835b90506014548111156112d25760405163200f4ff760e01b815260040160405180910390fd5b8060145f8282546112e39190615665565b90915550505f1960ff83160161135b57604051631a4ca37b60e21b81526001600160a01b038681166004830152602482018690523060448301528416906369328dec906064015f604051808303815f87803b158015611340575f80fd5b505af1158015611352573d5f803e3d5ffd5b50505050611367565b6113678584308761407a565b505060018055505050565b60026001540361139557604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166113c45760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b031633148015906113ea57506002546001600160a01b03163314155b156114085760405163089b7a0760e41b815260040160405180910390fd5b5f61141282611603565b90505f61141d611994565b90508082111561144057604051631373d6db60e01b815260040160405180910390fd5b50506014554260175560018055565b60026001540361147257604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166114a15760405163d311bc3960e01b815260040160405180910390fd5b600654600160a81b900460ff16156114cc57604051636022a9e760e01b815260040160405180910390fd5b6002546001600160a01b031633148015906114f257506006546001600160a01b03163314155b801561150857506008546001600160a01b031615155b801561157b5750600854604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015611555573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157991906155d9565b155b1561159957604051637ed449a960e01b815260040160405180910390fd5b6001600160a01b03811615806115b757506001600160a01b03811630145b156115d557604051631e4ec46b60e01b815260040160405180910390fd5b60018210156115f75760405163162908e360e11b815260040160405180910390fd5b61118682826001614165565b5f6001601454101561161657505f919050565b60018210156116285750612710919050565b601454821161165e57612710826014546127106116459190615678565b61164f91906156a3565b6116599190615665565b611683565b6014546127109061166f8483615678565b61167991906156a3565b6116839190615665565b92915050565b6002600154036116ac57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166116db5760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b0316331461170657604051630b2db9b760e31b815260040160405180910390fd5b5f81600181101561172a576040516333f52ff560e01b815260040160405180910390fd5b61173560045f61510b565b5f5b818110156111625760018585838181106117535761175361561b565b90506040020160200135101561177c5760405163162908e360e11b815260040160405180910390fd5b5f85858381811061178f5761178f61561b565b6117a592602060409092020190810191506152bd565b6001600160a01b0316036117cc5760405163e6c4247b60e01b815260040160405180910390fd5b8484828181106117de576117de61561b565b90506040020160200135836117f39190615608565b925060048585838181106118095761180961561b565b83546001810185555f9485526020909420604090910292909201926002029091019050611836828261562f565b5050600101611737565b60026001540361186357604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166118925760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b031633146118bd57604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381166118e45760405163e6c4247b60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b03831690811790915560408051636f6a537f60e11b8152905163ded4a6fe916004808201926020929091908290030181865afa15801561193b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195f91906156b6565b601b546001600160a01b0390811691161461198d57604051630ecd66ab60e41b815260040160405180910390fd5b5060018055565b6017545f906119a561012c42615608565b10156119c45760405163b7d0949760e01b815260040160405180910390fd5b62015180601754426119d69190615665565b6016546119e39190615678565b6119ed91906156a3565b905090565b600260015403611a1557604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16611a445760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b03163314801590611a6a57506002546001600160a01b03163314155b15611a885760405163089b7a0760e41b815260040160405180910390fd5b603d54603c54611a989042615665565b1015611ab7576040516311b96bf760e31b815260040160405180910390fd5b5f611ac06142b6565b9050603b548111611ae45760405163330c780160e11b815260040160405180910390fd5b601c54604080516318160ddd60e01b815290515f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4f91906156d1565b90505f601c5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc691906156e8565b90505f611bd482600a6157e6565b83603b54611be29190615678565b611bec91906156a3565b90505f611bf7614354565b90505f611c048383615665565b90505f620f4240603e5483611c199190615678565b611c2391906156a3565b6005549091505f8167ffffffffffffffff811115611c4357611c436153c5565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b5090505f5b82811015611d31575f620f42408560058481548110611c9257611c9261561b565b905f5260205f20906002020160010154611cac9190615678565b611cb691906156a3565b905084811115611ce857604051630abb811560e21b815260048101829052602481018690526044015b60405180910390fd5b6001811015611d0a5760405163debabab560e01b815260040160405180910390fd5b80838381518110611d1d57611d1d61561b565b602090810291909101015250600101611c71565b5042603c55603b8990555f5b82811015611db057601b5460058054611da8926001600160a01b0316919084908110611d6b57611d6b61561b565b5f91825260209091206002909102015484516001600160a01b0390911690859085908110611d9b57611d9b61561b565b60200260200101516143c3565b600101611d3d565b5050600180555050505050505050565b5f6119ed6142b6565b60058181548110611dd8575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b604080516020808201869052818301859052606080830185905283518084039091018152608090920183528151918101919091205f818152602f9092529181205491611e4f86868685808061401f565b915050935093915050565b5f6119ed614354565b600260015403611e8657604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16611eb55760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b03163314801590611edb57506002546001600160a01b03163314155b15611ef95760405163089b7a0760e41b815260040160405180910390fd5b6001821015611f1b5760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0381165f9081526009602052604090205460ff166001811015611f585760405163014cc88960e21b815260040160405180910390fd5b601b545f906001600160a01b03868116911614611f7e57611f7985856140eb565b611f80565b835b90508060145f828254611f939190615608565b90915550505f1960ff83160161201b57611fae8584866143f8565b6040516311f9fbc960e21b81526001600160a01b038681166004830152602482018690528416906347e7ef24906044015f604051808303815f87803b158015611ff5575f80fd5b505af1158015612007573d5f803e3d5ffd5b5050505061201685845f6143f8565b611367565b6113678584866143c3565b60026001540361204957604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166120785760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b031633146120a357604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b03811615806120c157506001600160a01b03811630145b156120df57604051631e4ec46b60e01b815260040160405180910390fd5b6006805461ffff60a01b191661010160a01b1790556040516001600160a01b03821681527fc513d827bb73b448f995555eff37d93f4d71b6ef96bc6557e2ec370ba22782ac9060200160405180910390a1601d546040805163a22484d960e01b815290515f926001600160a01b03169163a22484d991600480830192869291908290030181865afa158015612176573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261219d91908101906157f4565b8051601b546040516370a0823160e01b815230600482015292935090915f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156121ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220e91906156d1565b9050801561222d57601b5461222d906001600160a01b031685836143c3565b5f805b83811015610a3a5784818151811061224a5761224a61561b565b60209081029190910101516040516370a0823160e01b81523060048201529092506001600160a01b038316906370a0823190602401602060405180830381865afa15801561229a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122be91906156d1565b925082156122d1576122d18287856143c3565b600101612230565b6002600154036122fc57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff1661232b5760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b0316331480159061235157506002546001600160a01b03163314155b1561236f5760405163089b7a0760e41b815260040160405180910390fd5b5f8160405160240161238391815260200190565b60408051601f19818403018152918152602080830180516001600160e01b0316633c839cd160e11b17905290516123bb9291016155c7565b60408051601f19818403018152908290528051602091820120601685905584835292507f30d8cff2601d989fea083347b4501d5e97976f0ce3cfef9d4bd76bef1b7f0e8a91016109dc565b600354600160a01b900460ff166124305760405163d311bc3960e01b815260040160405180910390fd5b6040513360248201525f9060440160408051601f19818403018152918152602080830180516001600160e01b031663f2fde38b60e01b17905290516124769291016155c7565b60405160208183030381529060405280519060200120905061249661450b565b60075460405163af6f8c1b60e01b8152600481018390526001600160a01b039091169063af6f8c1b906024015f604051808303815f87803b1580156124d9575f80fd5b505af11580156124eb573d5f803e3d5ffd5b5050505050565b60026001540361251557604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166125445760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b0316331480159061256a57506002546001600160a01b03163314155b156125885760405163089b7a0760e41b815260040160405180910390fd5b6006805461ffff60a01b1916600160a01b841515810260ff60a81b191691909117600160a81b841515810291909117928390556040805160ff93850484161515815291909304909116151560208201527f559628b27717ff2f5863f3a218839e17c6bc1b900e9de0dc2b3dc365068841d791015b60405180910390a1505060018055565b60048181548110611dd8575f80fd5b5f8060026001540361264057604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff1661266f5760405163d311bc3960e01b815260040160405180910390fd5b600654600160a81b900460ff161561269a57604051636022a9e760e01b815260040160405180910390fd5b6002546001600160a01b031633148015906126c057506006546001600160a01b03163314155b80156126d657506008546001600160a01b031615155b80156127495750600854604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015612723573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274791906155d9565b155b1561276757604051637ed449a960e01b815260040160405180910390fd5b6040805160208101889052908101869052606081018590525f9060800160408051601f1981840301815291815281516020928301205f818152602e84528281206001600160a01b038916825290935291205490915060018110156127de576040516339c556cd60e11b815260040160405180910390fd5b5f602a541180156127fa57506002546001600160a01b03163314155b801561281157506006546001600160a01b03163314155b801561283457506128268888885f808061401f565b61283261012c42615608565b105b156128525760405163085de62560e01b815260040160405180910390fd5b5f8061286083602b54613fb4565b90925090505f6128708284615665565b5f868152602e602090815260408083206001600160a01b038d1684528252808320839055888352602d9091528120805492935086929091906128b3908490615665565b9250508190555083602c5f8282546128cb9190615665565b925050819055508060155f8282546128e39190615608565b909155506128f390508589614596565b876001600160a01b03167f2e06b2c9d4ccae2592eda2017cb2fb604b8d7418e85f023375514ab25ff2cc4c8360405161292e91815260200190565b60405180910390a2601c54604051632770a7eb60e21b8152306004820152602481018690526001600160a01b0390911690639dc29fac906044015f604051808303815f87803b15801561297f575f80fd5b505af1158015612991573d5f803e3d5ffd5b5050601b546129ad92506001600160a01b0316905089846143c3565b50600180559199919850909650505050505050565b5f805f836129d257602b546129d6565b6029545b90506129e28582613fb4565b92509250509250929050565b601d54601c54601454604051632b78daa360e11b81526001600160a01b03928316600482015285831660248201523060448201526064810185905260848101919091525f92839216906356f1b5469060a4016040805180830381865afa158015612a5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a7e919061589d565b915091509250929050565b604080516020808201879052818301869052606080830186905283518084039091018152608090920183528151918101919091205f908152602e82528281206001600160a01b038516825290915220545b949350505050565b600260015403612b0557604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16612b345760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b03163314801590612b5a57506002546001600160a01b03163314155b15612b785760405163089b7a0760e41b815260040160405180910390fd5b6001600160a01b0381165f81815260096020908152604091829020805460ff1916905590519182527f2f520fb256d37bacc8a5e0fb9e69362d4bb462500c7e54f56ea54416e92d47d691015b60405180910390a15060018055565b5f54610100900460ff1615808015612bf157505f54600160ff909116105b80612c0a5750303b158015612c0a57505f5460ff166001145b612c6d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cdf565b5f805460ff191660011790558015612c8e575f805461ff0019166101001790555b6006805461ffff60a01b191661010160a01b179055600280546001600160a01b0319166001600160a01b0384161790558015612d03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b600260015403612d2a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16612d595760405163d311bc3960e01b815260040160405180910390fd5b6004546001811015612d7e576040516333f52ff560e01b815260040160405180910390fd5b6015548015612ee9575f8267ffffffffffffffff811115612da157612da16153c5565b604051908082528060200260200182016040528015612dca578160200160208202803683370190505b5090505f5b83811015612e85575f620f42408460048481548110612df057612df061561b565b905f5260205f20906002020160010154612e0a9190615678565b612e1491906156a3565b9050601554811115612e4757601554604051630abb811560e21b8152611cdf918391600401918252602082015260400190565b80838381518110612e5a57612e5a61561b565b6020026020010181815250508060155f828254612e779190615665565b909155505050600101612dcf565b506040517f3f33b5ed245dfaf97e122dfc86e9d14ff254c4878a7c9ba8dab46d9c71cc3015905f90a15f5b83811015612ee657601b5460048054612ede926001600160a01b0316919084908110611d6b57611d6b61561b565b600101612eb0565b50505b505060018055565b600260015403612f1457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16612f435760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b03163314801590612f6957506002546001600160a01b03163314155b15612f875760405163089b7a0760e41b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f7e7afb649fef7779605afaad37b91d9f5044726c260bb394570089d052d5dbb790602001612bc4565b5f805f80612fed602a5461012c42610cf39190615608565b919550935091506130028484845f808061401f565b905090919293565b60026001540361302d57604051633ee5aeb560e01b815260040160405180910390fd5b60026001819055546001600160a01b0316331461305d57604051630b2db9b760e31b815260040160405180910390fd5b600354600160a01b900460ff1615613088576040516308db0db560e11b815260040160405180910390fd5b62015180816060015110156130b057604051630320a41d60e51b815260040160405180910390fd5b60a0810151603d558051601a5560208101516028556040808201516029556060820151602a556080820151602b5560c082015160165560e08201516019819055603e5561014082015160068054610160850151600780546001600160a01b03199081166001600160a01b0393841617909155610180870151601c805483169184169190911790556101a0870151601b8054831691841691909117905542601781905560188190556101e0880151601d80549093169084161790915593166001600160b01b0319909116179055603c5560038054600160a01b60ff60a01b19909116179055517f1eb56c868d62c38b9f2e3bd3d0556bed1dc7df623758318faaaaa05ffff993c7905f90a16131c8816101c0015161477b565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663ded4a6fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613218573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323c91906156b6565b601b546001600160a01b0390811691161461326a57604051630ecd66ab60e41b815260040160405180910390fd5b601c5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132de91906156e8565b60ff16601b5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613331573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335591906156e8565b60ff16146133765760405163697e864b60e01b815260040160405180910390fd5b601c546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156133bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e191906156e8565b6133ec90600a6157e6565b6133f7906001615678565b90505f613404825f61492d565b603b5550506001805550565b60026001540361343357604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166134625760405163d311bc3960e01b815260040160405180910390fd5b5f61346b614354565b90505f6127106301e13380601854426134849190615665565b6019546134919086615678565b61349b9190615678565b6134a591906156a3565b6134af91906156a3565b9050426018819055508060155f8282546134c99190615608565b90915550506040518181527f2d46e156a9ac545bd5f27832a0e6293d21c92faf9237534c6b18c51e9cca59df906020016125fc565b60606004805480602002602001604051908101604052809291908181526020015f9082821015610ab0575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a69565b60026001540361358a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff166135b95760405163d311bc3960e01b815260040160405180910390fd5b6002546001600160a01b031633146135e457604051630b2db9b760e31b815260040160405180910390fd5b61198d8161477b565b60026001540361361057604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff1661363f5760405163d311bc3960e01b815260040160405180910390fd5b600654600160a81b900460ff161561366a57604051636022a9e760e01b815260040160405180910390fd5b600181101561368c576040516334e33ddb60e01b815260040160405180910390fd5b6040805160208101869052908101849052606081018390525f906080016040516020818303038152906040528051906020012090506001602d5f8381526020019081526020015f205410156136f457604051630683f18b60e41b815260040160405180910390fd5b5f602a5411801561371057506002546001600160a01b03163314155b801561372757506006546001600160a01b03163314155b801561374a575061373c8585855f808061401f565b61374861012c42615608565b105b156137685760405163085de62560e01b815260040160405180910390fd5b5f818152602f6020526040812054831061378f575f828152602f6020526040902054613791565b825b5f838152602f60205260408120549192508267ffffffffffffffff8111156137bb576137bb6153c5565b6040519080825280602002602001820160405280156137e4578160200160208202803683370190505b5090505f8367ffffffffffffffff811115613801576138016153c5565b60405190808252806020026020018201604052801561382a578160200160208202803683370190505b5090505f80808087875b61383e8a8a615665565b8111156139e6575f8b8152602f6020526040902061385d600183615665565b8154811061386d5761386d61561b565b5f918252602090912001546001600160a01b031694508161388d816158bf565b925050848883815181106138a3576138a361561b565b6001600160a01b039283166020918202929092018101919091525f8d8152602e8252604080822093891682529290915220546138df9087615608565b5f8c8152602e602090815260408083206001600160a01b038a168452909152902054602b5491975061391091613fb4565b80945081955050508287838151811061392b5761392b61561b565b60209081029190910101526139408385615665565b60155f8282546139509190615608565b90915550505f8b8152602e602090815260408083206001600160a01b038916845282528083208390558d8352602f9091529020805480613992576139926158d4565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092558c82526030815260408083206001600160a01b0389168452909152812055806139de816158bf565b915050613834565b5084602c5f8282546139f89190615665565b90915550505f8a8152602d602052604081208054879290613a1a908490615665565b9091555050601c54604051632770a7eb60e21b8152306004820152602481018790526001600160a01b0390911690639dc29fac906044015f604051808303815f87803b158015613a68575f80fd5b505af1158015613a7a573d5f803e3d5ffd5b505050505f5b8751811015613ad057601b548851613ac8916001600160a01b0316908a9084908110613aae57613aae61561b565b6020026020010151898481518110611d9b57611d9b61561b565b600101613a80565b50506001805550505050505050505050505050565b5f600260015403613b0957604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16613b385760405163d311bc3960e01b815260040160405180910390fd5b600654600160a01b900460ff1615613b635760405163deeb694360e01b815260040160405180910390fd5b6002546001600160a01b03163314801590613b8957506006546001600160a01b03163314155b8015613b9f57506008546001600160a01b031615155b8015613c125750600854604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015613bec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c1091906155d9565b155b15613c3057604051637ed449a960e01b815260040160405180910390fd5b601b5484906001600160a01b03808316911614801590613cb95750601d54604051633af32abf60e01b81526001600160a01b03838116600483015290911690633af32abf90602401602060405180830381865afa158015613c93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cb791906155d9565b155b15613cd757604051632188be3960e21b815260040160405180910390fd5b6001841015613cf95760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0383161580613d1757506001600160a01b03831630145b15613d3557604051631e4ec46b60e01b815260040160405180910390fd5b5f80613d4187876129ee565b915091506001821015613d6757604051633999656760e01b815260040160405180910390fd5b601a54811115613d8a57604051639ade546d60e01b815260040160405180910390fd5b604080516001600160a01b038981168252602082018990529181018490529086169033907fc436f473cd90c9b4dd731856a14b80f713d384a1688a506d4230140c5b36d5cd9060600160405180910390a3613de78733308961407a565b601c546040516340c10f1960e01b81526001600160a01b03878116600483015260248201859052909116906340c10f19906044015f604051808303815f87803b158015613e32575f80fd5b505af1158015613e44573d5f803e3d5ffd5b5050600180555091979650505050505050565b600260015403613e7a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff16613ea95760405163d311bc3960e01b815260040160405180910390fd5b6006546001600160a01b03163314801590613ecf57506002546001600160a01b03163314155b15613eed5760405163089b7a0760e41b815260040160405180910390fd5b6001600160a01b0382161580613f0b57506001600160a01b03821630145b15613f295760405163e6c4247b60e01b815260040160405180910390fd5b60ff8116600114801590613f41575060ff8116600214155b15613f5f5760405163e01b409760e01b815260040160405180910390fd5b6001600160a01b0382165f81815260096020908152604091829020805460ff191660ff861617905590519182527f324201c119d7f14ed24d964257aa0c870524bde20d9ecb31d4b37eadc20336ff91016125fc565b5f80613fc0845f61492d565b91508190505f8315613ff257612710613fd98486615678565b613fe391906156a3565b9050613fef8184615665565b91505b509250929050565b5f808061401261400d62015180866156a3565b6149ce565b9196909550909350915050565b5f8161402c603c85615678565b614038610e1087615678565b620151806140478b8b8b614b3d565b6140519190615678565b61405b9190615608565b6140659190615608565b61406f9190615608565b979650505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526140e59085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614ca3565b50505050565b601d546040516364696fab60e11b81526001600160a01b038481166004830152602482018490525f92169063c8d2df5690604401602060405180830381865afa15801561413a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415e91906156d1565b9392505050565b5f805f8361417557602b54614179565b6029545b90506141858682613fb4565b60285491945092508311156141ad57604051631b6132ab60e31b815260040160405180910390fd5b60018210156141cf57604051631fbaba3560e01b815260040160405180910390fd5b6141d98284615665565b60155f8282546141e99190615608565b9091555050604080518381526020810188905233916001600160a01b0388169183917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4601c54604051632770a7eb60e21b8152336004820152602481018890526001600160a01b0390911690639dc29fac906044015f604051808303815f87803b15801561427f575f80fd5b505af1158015614291573d5f803e3d5ffd5b5050601b546142ad92506001600160a01b0316905086846143c3565b50935093915050565b5f80601c5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614308573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061432c91906156e8565b61433790600a6157e6565b614342906001615678565b905061434e815f61492d565b91505090565b601d5460145460405163ad07802160e01b815260048101919091525f916001600160a01b03169063ad07802190602401602060405180830381865afa15801561439f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ed91906156d1565b6040516001600160a01b0383166024820152604481018290526143f390849063a9059cbb60e01b906064016140ae565b505050565b8015806144705750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561444a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061446e91906156d1565b155b6144db5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401611cdf565b6040516001600160a01b0383166024820152604481018290526143f390849063095ea7b360e01b906064016140ae565b60026001540361452e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155600354600160a01b900460ff1661455d5760405163d311bc3960e01b815260040160405180910390fd5b6003546001600160a01b03163314614587576040516282b42960e81b815260040160405180910390fd5b61459033614d74565b60018055565b5f8281526030602090815260408083206001600160a01b03851684529091528120546145c490600190615665565b5f848152602f6020526040812080549293506145e1600184615665565b815481106145f1576145f161561b565b5f918252602090912001546001600160a01b03908116915084168114614715575f858152602f602052604090208054849081106146305761463061561b565b5f918252602080832090910154878352602f90915260409091206001600160a01b0390911690614661600185615665565b815481106146715761467161561b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555080602f5f8781526020019081526020015f2084815481106146bf576146bf61561b565b5f91825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556146f2836001615608565b5f8681526030602090815260408083206001600160a01b03861684529091529020555b5f858152602f60205260409020805480614731576147316158d4565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092559581526030865260408082206001600160a01b0396909616825294909552505050812055565b6003545f906001600160a01b0316156147fa576003546040516001600160a01b03909116602482015260440160408051601f19818403018152918152602080830180516001600160e01b031663f2fde38b60e01b17905290516147df9291016155c7565b604051602081830303815290604052805190602001206147fc565b5f5b6040516001600160a01b03841660248201529091505f9060440160408051601f19818403018152918152602080830180516001600160e01b031663f2fde38b60e01b179052905161484e9291016155c7565b60405160208183030381529060405280519060200120905061486f83614d90565b81156148cf5760075460405163c4d252f560e01b8152600481018490526001600160a01b039091169063c4d252f5906024015f604051808303815f87803b1580156148b8575f80fd5b505af11580156148ca573d5f803e3d5ffd5b505050505b600754604051631523ab0160e21b8152600481018390526001600160a01b039091169063548eac04906024015f604051808303815f87803b158015614912575f80fd5b505af1158015614924573d5f803e3d5ffd5b50505050505050565b5f80601c5f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561497f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149a391906156d1565b9050600181106149c6576149c16149b8614354565b85908386614e1d565b612ada565b509192915050565b5f8080838162253d8c6149e48362010bd96158e8565b6149ee91906158e8565b90505f62023ab1614a0083600461590f565b614a0a919061593e565b90506004614a1b8262023ab161590f565b614a269060036158e8565b614a30919061593e565b614a3a908361596a565b91505f62164b09614a4c8460016158e8565b614a5890610fa061590f565b614a62919061593e565b90506004614a72826105b561590f565b614a7c919061593e565b614a86908461596a565b614a9190601f6158e8565b92505f61098f614aa285605061590f565b614aac919061593e565b90505f6050614abd8361098f61590f565b614ac7919061593e565b614ad1908661596a565b9050614ade600b8361593e565b9450614aeb85600c61590f565b614af68360026158e8565b614b00919061596a565b91508483614b0f60318761596a565b614b1a90606461590f565b614b2491906158e8565b614b2e91906158e8565b9a919950975095505050505050565b5f6107b2841015614b785760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b6044820152606401611cdf565b8383835f62253d8c60046064600c614b91600e8861596a565b614b9b919061593e565b614ba7886113246158e8565b614bb191906158e8565b614bbb919061593e565b614bc690600361590f565b614bd0919061593e565b600c80614bde600e8861596a565b614be8919061593e565b614bf390600c61590f565b614bfe60028861596a565b614c08919061596a565b614c149061016f61590f565b614c1e919061593e565b6004600c614c2d600e8961596a565b614c37919061593e565b614c43896112c06158e8565b614c4d91906158e8565b614c59906105b561590f565b614c63919061593e565b614c6f617d4b8761596a565b614c7991906158e8565b614c8391906158e8565b614c8d919061596a565b614c97919061596a565b98975050505050505050565b5f614cf7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614e789092919063ffffffff16565b8051909150156143f35780806020019051810190614d1591906155d9565b6143f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cdf565b600380546001600160a01b0319169055614d8d81614e86565b50565b6001600160a01b0381161580614dae57506001600160a01b03811630145b15614dcc5760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b03838116918217909255600254604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b5f80614e2a868686614efe565b90506001836002811115614e4057614e40615990565b148015614e5c57505f8480614e5757614e5761568f565b868809115b15614e6f57614e6c600182615608565b90505b95945050505050565b6060612ada84845f85614fa7565b6001600160a01b038116614ead5760405163156fee5160e31b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f80805f19858709858702925082811083820303915050805f03614f3557838281614f2b57614f2b61568f565b049250505061415e565b808411614f40575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b6060824710156150085760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cdf565b5f80866001600160a01b0316858760405161502391906159a4565b5f6040518083038185875af1925050503d805f811461505d576040519150601f19603f3d011682016040523d82523d5f602084013e615062565b606091505b509150915061406f87838387606083156150dc5782515f036150d5576001600160a01b0385163b6150d55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cdf565b5081612ada565b612ada83838151156150f15781518083602001fd5b8060405162461bcd60e51b8152600401611cdf91906155c7565b5080545f8255600202905f5260205f2090810190614d8d91905b808211156151495780546001600160a01b03191681555f6001820155600201615125565b5090565b5f6020828403121561515d575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156151b057835180516001600160a01b03168452602090810151818501529093019260409092019160010161517d565b509095945050505050565b6001600160a01b0381168114614d8d575f80fd5b80356151da816151bb565b919050565b5f80604083850312156151f0575f80fd5b823591506020830135615202816151bb565b809150509250929050565b5f806020838503121561521e575f80fd5b823567ffffffffffffffff811115615234575f80fd5b8301601f81018513615244575f80fd5b803567ffffffffffffffff81111561525a575f80fd5b8560208260061b840101111561526e575f80fd5b6020919091019590945092505050565b5f805f60608486031215615290575f80fd5b833561529b816151bb565b92506020840135915060408401356152b2816151bb565b809150509250925092565b5f602082840312156152cd575f80fd5b813561415e816151bb565b5f805f606084860312156152ea575f80fd5b505081359360208301359350604090920135919050565b8015158114614d8d575f80fd5b5f806040838503121561531f575f80fd5b823561532a81615301565b9150602083013561520281615301565b5f805f806080858703121561534d575f80fd5b843593506020850135925060408501359150606085013561536d816151bb565b939692955090935050565b5f8060408385031215615389575f80fd5b82359150602083013561520281615301565b5f80604083850312156153ac575f80fd5b82356153b7816151bb565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051610200810167ffffffffffffffff811182821017156153fd576153fd6153c5565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561542c5761542c6153c5565b604052919050565b5f610200828403128015615446575f80fd5b5061544f6153d9565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e0808401359082015261010080840135908201526154b161012084016151cf565b6101208201526154c461014084016151cf565b6101408201526154d761016084016151cf565b6101608201526154ea61018084016151cf565b6101808201526154fd6101a084016151cf565b6101a08201526155106101c084016151cf565b6101c08201526155236101e084016151cf565b6101e08201529392505050565b5f805f8060808587031215615543575f80fd5b5050823594602084013594506040840135936060013592509050565b60ff81168114614d8d575f80fd5b5f806040838503121561557e575f80fd5b8235615589816151bb565b915060208301356152028161555f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61415e6020830184615599565b5f602082840312156155e9575f80fd5b815161415e81615301565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611683576116836155f4565b634e487b7160e01b5f52603260045260245ffd5b813561563a816151bb565b81546001600160a01b0319166001600160a01b03919091161781556020919091013560019190910155565b81810381811115611683576116836155f4565b8082028115828204841417611683576116836155f4565b634e487b7160e01b5f52601260045260245ffd5b5f826156b1576156b161568f565b500490565b5f602082840312156156c6575f80fd5b815161415e816151bb565b5f602082840312156156e1575f80fd5b5051919050565b5f602082840312156156f8575f80fd5b815161415e8161555f565b6001815b600184111561573e57808504811115615722576157226155f4565b600184161561573057908102905b60019390931c928002615707565b935093915050565b5f8261575457506001611683565b8161576057505f611683565b816001811461577657600281146157805761579c565b6001915050611683565b60ff841115615791576157916155f4565b50506001821b611683565b5060208310610133831016604e8410600b84101617156157bf575081810a611683565b6157cb5f198484615703565b805f19048211156157de576157de6155f4565b029392505050565b5f61415e60ff841683615746565b5f60208284031215615804575f80fd5b815167ffffffffffffffff81111561581a575f80fd5b8201601f8101841361582a575f80fd5b805167ffffffffffffffff811115615844576158446153c5565b8060051b61585460208201615403565b9182526020818401810192908101908784111561586f575f80fd5b6020850194505b8385101561406f578451925061588b836151bb565b82825260209485019490910190615876565b5f80604083850312156158ae575f80fd5b505080516020909101519092909150565b5f816158cd576158cd6155f4565b505f190190565b634e487b7160e01b5f52603160045260245ffd5b8082018281125f831280158216821582161715615907576159076155f4565b505092915050565b8082025f8212600160ff1b8414161561592a5761592a6155f4565b8181058314821517611683576116836155f4565b5f8261594c5761594c61568f565b600160ff1b82145f1984141615615965576159656155f4565b500590565b8181035f831280158383131683831282161715615989576159896155f4565b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f82518060208501845e5f92019182525091905056fea2646970667358221220a8116d0cd985132590872129ea298c81b96d4df6bcb17b9be7e2bd8c10beeb9264736f6c634300081a0033