408 txs
2.3k calls
constructor
constructor(address _core, bytes _configData, bytes _immutables, bytes _customConfigData)
functions
borrowLimit
viewfunction borrowLimit() view returns (uint256)
claimable_reward
viewfunction claimable_reward(address, address) view returns (uint256)
claimableFees
viewfunction claimableFees() view returns (uint256)
claimableOtherFees
viewfunction claimableOtherFees() view returns (uint256)
collateral
viewfunction collateral() view returns (address)
convexBooster
viewfunction convexBooster() view returns (address)
convexPid
viewfunction convexPid() view returns (uint256)
core
viewfunction core() view returns (address)
CRV
viewfunction CRV() view returns (address)
currentRateInfo
viewfunction currentRateInfo() view returns (uint64 lastTimestamp, uint64 ratePerSec, uint128 lastShares)
currentRewardEpoch
viewfunction currentRewardEpoch() view returns (uint256)
currentUtilization
viewfunction currentUtilization() view returns (uint256)
CVX
viewfunction CVX() view returns (address)
epochLength
viewfunction epochLength() view returns (uint256)
EXCHANGE_PRECISION
viewfunction EXCHANGE_PRECISION() view returns (uint256)
exchangeRateInfo
viewfunction exchangeRateInfo() view returns (address oracle, uint96 lastTimestamp, uint256 exchangeRate)
getConstants
purefunction getConstants() pure returns (uint256 _LTV_PRECISION, uint256 _LIQ_PRECISION, uint256 _EXCHANGE_PRECISION, uint256 _RATE_PRECISION)
getEpoch
viewfunction getEpoch() view returns (uint256 epoch)
getPairAccounting
viewfunction getPairAccounting() view returns (uint256 _claimableFees, uint128 _totalBorrowAmount, uint128 _totalBorrowShares, uint256 _totalCollateral)
global_reward_integral
viewfunction global_reward_integral(uint256, address) view returns (uint256)
lastFeeEpoch
viewfunction lastFeeEpoch() view returns (uint256)
LIQ_PRECISION
viewfunction LIQ_PRECISION() view returns (uint256)
liquidationFee
viewfunction liquidationFee() view returns (uint256)
LTV_PRECISION
viewfunction LTV_PRECISION() view returns (uint256)
maxLTV
viewfunction maxLTV() view returns (uint256)
maxRewards
purefunction maxRewards() pure returns (uint256)
minimumBorrowAmount
viewfunction minimumBorrowAmount() view returns (uint256)
minimumLeftoverDebt
viewfunction minimumLeftoverDebt() view returns (uint256)
minimumRedemption
viewfunction minimumRedemption() view returns (uint256)
mintFee
viewfunction mintFee() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
PAIR_DECIMALS
viewfunction PAIR_DECIMALS() view returns (uint256)
previewAddInterest
viewfunction previewAddInterest() view returns (uint256 _interestEarned, tuple _newCurrentRateInfo, uint256 _claimableFees, tuple _totalBorrow)
protocolRedemptionFee
viewfunction protocolRedemptionFee() view returns (uint256)
RATE_PRECISION
viewfunction RATE_PRECISION() view returns (uint256)
rateCalculator
viewfunction rateCalculator() view returns (address)
redemptionWriteOff
viewfunction redemptionWriteOff() view returns (address)
registry
viewfunction registry() view returns (address)
reward_integral_for
viewfunction reward_integral_for(uint256, address, address) view returns (uint256)
rewardLength
viewfunction rewardLength() view returns (uint256)
rewardMap
viewfunction rewardMap(address) view returns (uint256)
rewardRedirect
viewfunction rewardRedirect(address) view returns (address)
rewards
viewfunction rewards(uint256) view returns (address reward_token, bool is_non_claimable, uint256 reward_remaining)
SHARE_REFACTOR_PRECISION
viewfunction SHARE_REFACTOR_PRECISION() view returns (uint256)
startTime
viewfunction startTime() view returns (uint256)
swappers
viewfunction swappers(address) view returns (bool)
toBorrowAmount
viewfunction toBorrowAmount(uint256 _shares, bool _roundUp, bool _previewInterest) view returns (uint256 _amount)
toBorrowShares
viewfunction toBorrowShares(uint256 _amount, bool _roundUp, bool _previewInterest) view returns (uint256 _shares)
totalBorrow
viewfunction totalBorrow() view returns (uint128 amount, uint128 shares)
totalCollateral
viewfunction totalCollateral() view returns (uint256 _totalCollateralBalance)
totalDebtAvailable
viewfunction totalDebtAvailable() view returns (uint256)
underlying
viewfunction underlying() view returns (address)
userBorrowShares
viewfunction userBorrowShares(address _account) view returns (uint256 borrowShares)
userRewardEpoch
viewfunction userRewardEpoch(address) view returns (uint256)
version
purefunction version() pure returns (uint256 _major, uint256 _minor, uint256 _patch)
addCollateral
nonpayablefunction addCollateral(uint256 _amount, address _borrower)
addCollateralVault
nonpayablefunction addCollateralVault(uint256 _collateralAmount, address _borrower)
addExtraReward
nonpayablefunction addExtraReward(address _token)
addInterest
nonpayablefunction addInterest(bool _returnAccounting) returns (uint256 _interestEarned, tuple _currentRateInfo, uint256 _claimableFees, tuple _totalBorrow)
borrow
nonpayablefunction borrow(uint256 _borrowAmount, uint256 _underlyingAmount, address _receiver) returns (uint256 _shares)
earned
nonpayablefunction earned(address _account) returns (tuple[] claimable)
getReward
nonpayablefunction getReward(address _account, address _forwardTo)
getReward
nonpayablefunction getReward(address _account)
getUserSnapshot
nonpayablefunction getUserSnapshot(address _address) returns (uint256 _borrowShares, uint256 _collateralBalance)
invalidateReward
nonpayablefunction invalidateReward(address _token)
leveragedPosition
nonpayablefunction leveragedPosition(address _swapperAddress, uint256 _borrowAmount, uint256 _initialUnderlyingAmount, uint256 _amountCollateralOutMin, address[] _path) returns (uint256 _totalCollateralBalance)
liquidate
nonpayablefunction liquidate(address _borrower) returns (uint256 _collateralForLiquidator)
pause
nonpayablefunction pause()
redeemCollateral
nonpayablefunction redeemCollateral(address _caller, uint256 _amount, uint256 _totalFeePct, address _receiver) returns (address _collateralToken, uint256 _collateralFreed)
removeCollateral
nonpayablefunction removeCollateral(uint256 _collateralAmount, address _receiver)
removeCollateralVault
nonpayablefunction removeCollateralVault(uint256 _collateralAmount, address _receiver)
repay
nonpayablefunction repay(uint256 _shares, address _borrower) returns (uint256 _amountToRepay)
repayWithCollateral
nonpayablefunction repayWithCollateral(address _swapperAddress, uint256 _collateralToSwap, uint256 _amountOutMin, address[] _path) returns (uint256 _amountOut)
setBorrowLimit
nonpayablefunction setBorrowLimit(uint256 _limit)
setConvexPool
nonpayablefunction setConvexPool(uint256 pid)
setLiquidationFees
nonpayablefunction setLiquidationFees(uint256 _newLiquidationFee)
setMaxLTV
nonpayablefunction setMaxLTV(uint256 _newMaxLTV)
setMinimumBorrowAmount
nonpayablefunction setMinimumBorrowAmount(uint256 _min)
setMinimumLeftoverDebt
nonpayablefunction setMinimumLeftoverDebt(uint256 _min)
setMinimumRedemption
nonpayablefunction setMinimumRedemption(uint256 _min)
setMintFees
nonpayablefunction setMintFees(uint256 _newMintFee)
setOracle
nonpayablefunction setOracle(address _newOracle)
setProtocolRedemptionFee
nonpayablefunction setProtocolRedemptionFee(uint256 _fee)
setRateCalculator
nonpayablefunction setRateCalculator(address _newRateCalculator, bool _updateInterest)
setRewardRedirect
nonpayablefunction setRewardRedirect(address _to)
setSwapper
nonpayablefunction setSwapper(address _swapper, bool _approval)
unpause
nonpayablefunction unpause()
updateExchangeRate
nonpayablefunction updateExchangeRate() returns (uint256 _exchangeRate)
user_checkpoint
nonpayablefunction user_checkpoint(address _account, uint256 _epochloops) returns (bool)
userCollateralBalance
nonpayablefunction userCollateralBalance(address _account) returns (uint256 _collateralAmount)
withdrawFees
nonpayablefunction withdrawFees() returns (uint256 _fees, uint256 _otherFees)
events
AddCollateral
event AddCollateral(address indexed borrower, uint256 collateralAmount)
AddInterest
event AddInterest(uint256 interestEarned, uint256 rate)
Borrow
event Borrow(address indexed _borrower, address indexed _receiver, uint256 _borrowAmount, uint256 _sharesAdded, uint256 _mintFees)
LeveragedPosition
event LeveragedPosition(address indexed _borrower, address _swapperAddress, uint256 _borrowAmount, uint256 _borrowShares, uint256 _initialUnderlyingAmount, uint256 _amountCollateralOut)
Liquidate
event Liquidate(address indexed _borrower, uint256 _collateralForLiquidator, uint256 _sharesLiquidated, uint256 _amountLiquidatorToRepay)
NewEpoch
event NewEpoch(uint256 indexed _epoch)
Redeemed
event Redeemed(address indexed _caller, uint256 _amount, uint256 _collateralFreed, uint256 _protocolFee, uint256 _debtReduction)
RemoveCollateral
event RemoveCollateral(uint256 _collateralAmount, address indexed _receiver, address indexed _borrower)
Repay
event Repay(address indexed payer, address indexed borrower, uint256 amountToRepay, uint256 shares)
RepayWithCollateral
event RepayWithCollateral(address indexed _borrower, address _swapperAddress, uint256 _collateralToSwap, uint256 _amountAssetOut, uint256 _sharesRepaid)
RewardAdded
event RewardAdded(address indexed _rewardToken)
RewardInvalidated
event RewardInvalidated(address indexed _rewardToken)
RewardPaid
event RewardPaid(address indexed _user, address indexed _rewardToken, address indexed _receiver, uint256 _rewardAmount)
RewardRedirected
event RewardRedirected(address indexed _account, address _forward)
SetBorrowLimit
event SetBorrowLimit(uint256 limit)
SetConvexPool
event SetConvexPool(uint256 pid)
SetLiquidationFees
event SetLiquidationFees(uint256 oldLiquidationFee, uint256 newLiquidationFee)
SetMaxLTV
event SetMaxLTV(uint256 oldMaxLTV, uint256 newMaxLTV)
SetMinimumBorrowAmount
event SetMinimumBorrowAmount(uint256 min)
SetMinimumLeftover
event SetMinimumLeftover(uint256 min)
SetMinimumRedemption
event SetMinimumRedemption(uint256 min)
SetMintFees
event SetMintFees(uint256 oldMintFee, uint256 newMintFee)
SetOracleInfo
event SetOracleInfo(address oldOracle, address newOracle)
SetProtocolRedemptionFee
event SetProtocolRedemptionFee(uint256 fee)
SetRateCalculator
event SetRateCalculator(address oldRateCalculator, address newRateCalculator)
SetSwapper
event SetSwapper(address swapper, bool approval)
UpdateExchangeRate
event UpdateExchangeRate(uint256 exchangeRate)
UpdateRate
event UpdateRate(uint256 oldRatePerSec, uint128 oldShares, uint256 newRatePerSec, uint128 newShares)
WithdrawFees
event WithdrawFees(address recipient, uint256 interestFees, uint256 otherFees)
errors
BadSwapper
error BadSwapper()
BorrowerSolvent
error BorrowerSolvent()
FeesAlreadyDistributed
error FeesAlreadyDistributed()
IncorrectStakeBalance
error IncorrectStakeBalance()
Insolvent
error Insolvent(uint256 _borrow, uint256 _collateral, uint256 _exchangeRate)
InsufficientBorrowAmount
error InsufficientBorrowAmount()
InsufficientDebtAvailable
error InsufficientDebtAvailable(uint256 _assets, uint256 _request)
InsufficientDebtToRedeem
error InsufficientDebtToRedeem()
InvalidLiquidator
error InvalidLiquidator()
InvalidParameter
error InvalidParameter()
InvalidPath
error InvalidPath(address _expected, address _actual)
InvalidReceiver
error InvalidReceiver()
InvalidRedemptionHandler
error InvalidRedemptionHandler()
MinimumRedemption
error MinimumRedemption()
OnlyProtocolOrOwner
error OnlyProtocolOrOwner()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlippageTooHigh
error SlippageTooHigh(uint256 _minOut, uint256 _actual)
creation bytecode
0x6101a0806040523461088057617916803803809161001d8285610e6f565b83398101906080818303126108805761003581610e92565b60208201519091906001600160401b0381116108805783610057918301610eeb565b60408201519091906001600160401b0381116108805784610079918301610eeb565b60608201519094906001600160401b038111610880576100999201610eeb565b9160018060a01b0316928360805260015f5568056bc75e2d63100000600e5569021e19e0c9bab2400000600f55683635c9adc5dea00000601055602081805181010312610880576004906020906001600160a01b03906100fa908301610e92565b168060a05260405192838092637e062a3560e11b82525afa90811561088c575f91610dff575b506001600160a01b031660c0528051610100908201829003126108805761014960208201610e92565b61015560408301610e92565b9161016260608201610e92565b9260808201519360a08301519060c08401519261010060e08601519501519560018060a01b03168060e05260405163313ce56760e01b8152602081600481855afa90811561088c5760129160ff915f91610de0575b501603610d63576040516338d52e0f60e01b8152602081600481855afa90811561088c575f91610da1575b506001600160a01b031661010081905260405163313ce56760e01b815290602090829060049082905afa90811561088c5760129160ff915f91610d72575b501603610d6357610100516024916020916102459082906001600160a01b031661166b565b6040516363737ac960e11b8152670de0b6b3a7640000600482015292839182905afa90811561088c575f91610d31575b50601480546001600160801b031660809290921b6001600160801b031916919091179055601580546001600160a01b03199081166001600160a01b03938416179091556011805490911692909116919091179055600a55600c55600b55600d55600955604051610330808201906001600160401b03821183831017610c1a57602091839161750683393081520301905ff0801561088c57610120819052610324906001600160a01b03166114cb565b60015415610d1d5760015f525f5160206178b65f395f51905f52805460ff60a01b1916600160a01b179055805160208281019291610366919083010183610f08565b5050815191949190506001600160401b038111610c1a57601354600181811c91168015610d13575b6020821014610cff57601f8111610c9c575b50602094601f8211600114610c39579481929394955f92610c2e575b50508160011b915f199060031b1c1916176013555b5f604080516103df81610e39565b82815282602082015201526040516103f681610e39565b6014546001600160401b038082168352604082811c821660208501908152608084901c858301908152915190949093909290919060a0850190811185821017610c1a576040525f845260208401915f835260408501935f855260608601965f8852608087019660405161046881610e54565b5f8082526020820152885282516001600160401b03164211610a56575b511515958661091d575b5050505050505050506040516104a481610e39565b6015546001600160a01b03811680835260a09190911c60208301818152601654604085018181529194919242146109125750602060018060a01b0360e051166024604051809681936315caaba160e21b835260048301525afa92831561088c575f936108de575b5082156108ca57426001600160601b0381169094526ec097ce7bc90715b34b9f10000000009290920490819052905160a09290921b6001600160a01b0319166001600160a01b03929092169190911760155560168190556040519081527f4fc1b45960547ee95894b08a284c3c066cf5aca706a7420639c42c3ec2e118a490602090a15b6040516378e9792560e01b8152602081600481855afa90811561088c575f91610897575b5061014052604051630afaeebf60e31b815290602090829060049082905afa90811561088c575f91610853575b509160206105fa9261060f94610160528051010190610f08565b936001600160a01b03918216935091166114cb565b806107f4575b604051615d4d90816117b982396080518181816109ee01528181610a3501528181610b75015281816119ad01528181611ac101528181611bd601528181611f85015281816121bd0152818161235101528181612522015281816125a1015281816129130152818161297d015281816135db015281816137900152614972015260a05181818161048201528181611f340152818161267501528181612a1d01528181612ad6015281816149ba01528181614d4801528181614ead015281816150170152818161516301526153b0015260c05181818161139101528181613158015281816148680152615955015260e05181818161061501528181610b2b01528181610d3101528181610e7c01528181610ffe015281816113e601528181611de401528181612d2e0152818161310401528181613ed50152818161419e015281816146cd01528181614d19015281816155ba015261592d015261010051818181610ce101528181610fd5015281816116480152612243015261012051818181610654015281816128cd01526142b80152610140518181816120690152818161215601526126ef01526101605181818161217d0152612456015261018051818181611c5601528181612f0301528181613df201528181614c7e015261580b0152f35b7fa83ced135f4f6135be6fb52ae9183bf190452765f5b75b36caa332537c3ca7e591610835826020936101805282601d5560018060a01b0360e0511661166b565b61083d610fb3565b610845611277565b604051908152a15f80610615565b9290506020833d602011610884575b8161086f60209383610e6f565b8101031261088057915160206105e0565b5f80fd5b3d9150610862565b6040513d5f823e3d90fd5b90506020813d6020116108c2575b816108b260209383610e6f565b81010312610880575160046105b3565b3d91506108a5565b634e487b7160e01b5f52601260045260245ffd5b9092506020813d60201161090a575b816108fa60209383610e6f565b810103126108805751915f61050b565b3d91506108ed565b93505050505061058f565b97518151855187518b51604080516001600160401b0395861681526001600160801b039485166020828101919091529390951690850152909116606083015299610a2298509196907f6b9ef8676ff86d806b7a7bd7a9b0266910c9fce560c26289d7ed7cd7743127c790608090a18051604080518981526001600160401b039092168c8301527f939dcec711228d083924a0db6cecbb66bb8403ea7cdbfe2f928901cbac2cdfc191a1516001600160401b0380821690935290516001600160801b038116909552429091169182905260401b6fffffffffffffffff0000000000000000161760809290921b6001600160801b031916919091176014555060185461171e565b60185551805191015160801b6001600160801b0319166001600160801b0391909116176017555f808080808080808061048f565b60018152604051610a6681610e54565b6017546001600160801b038116825260801c6020820152885282516001600160401b031642908103908111610b795760115460e0518751604080516356fb8f2d60e01b81526001600160a01b039384166004820152602481018690526001600160801b0390921660448301529092909183916064918391165afa801561088c575f915f91610bb7575b506001600160801b039081168a526001600160401b039091168852895151670de0b6b3a764000092610b3792610b26921690610f62565b88516001600160401b031690610f62565b04808a528015159081610b95575b5015610b8d5788518851805190916001600160801b0391821690821601908111610b79576001600160801b03169052610485565b634e487b7160e01b5f52601160045260245ffd5b5f8952610485565b8951516001600160801b039250610baf919083169061171e565b11155f610b45565b9150506040813d604011610c12575b81610bd360409383610e6f565b81010312610880578051906001600160401b03821682036108805760200151906001600160801b03821682036108805790670de0b6b3a7640000610aef565b3d9150610bc6565b634e487b7160e01b5f52604160045260245ffd5b015190505f806103bc565b601f1982169560135f52805f20915f5b888110610c8457508360019596979810610c6c575b505050811b016013556103d1565b01515f1960f88460031b161c191690555f8080610c5e565b91926020600181928685015181550194019201610c49565b60135f527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090601f830160051c81019160208410610cf5575b601f0160051c01905b818110610cea57506103a0565b5f8155600101610cdd565b9091508190610cd4565b634e487b7160e01b5f52602260045260245ffd5b90607f169061038e565b634e487b7160e01b5f52603260045260245ffd5b90506020813d602011610d5b575b81610d4c60209383610e6f565b8101031261088057515f610275565b3d9150610d3f565b630309cb8760e51b5f5260045ffd5b610d94915060203d602011610d9a575b610d8c8183610e6f565b810190610f75565b5f610220565b503d610d82565b90506020813d602011610dd8575b81610dbc60209383610e6f565b81010312610880576020610dd1600492610e92565b91506101e2565b3d9150610daf565b610df9915060203d602011610d9a57610d8c8183610e6f565b5f6101b7565b90506020813d602011610e31575b81610e1a60209383610e6f565b8101031261088057610e2b90610e92565b5f610120565b3d9150610e0d565b606081019081106001600160401b03821117610c1a57604052565b604081019081106001600160401b03821117610c1a57604052565b601f909101601f19168101906001600160401b03821190821017610c1a57604052565b51906001600160a01b038216820361088057565b9192916001600160401b038211610c1a5760405191610ecf601f8201601f191660200184610e6f565b829481845281830111610880578281602093845f96015e010152565b9080601f83011215610880578151610f0592602001610ea6565b90565b91906080838203126108805782516001600160401b0381116108805783019080601f83011215610880578151610f4092602001610ea6565b91610f4d60208201610e92565b916060610f5c60408401610e92565b92015190565b81810292918115918404141715610b7957565b90816020910312610880575160ff811681036108805790565b600154811015610d1d5760015f81815291901b5f5160206178b65f395f51905f520191565b305f5160206178765f395f51905f52148015611270575b8015611253575b6110d8575f5160206178765f395f51905f525f5260076020525f5160206178d65f395f51905f52546111d457600154600f8110156111a15768010000000000000000811015610c1a5780600161102a9201600155610f8e565b5080546001600160a01b0319165f5160206178765f395f51905f529081179091556001545f82815260076020525f5160206178d65f395f51905f52919091555f5160206178565f395f51905f529080a25f5160206178765f395f51905f523b156110da5760405163a9059cbb60e01b60208201523060248201525f60448201526110d8906110c581606481015b03601f198101835282610e6f565b5f5160206178765f395f51905f52611760565b565b5f5160206178765f395f51905f525f5260076020525f5160206178d65f395f51905f5254806111065750565b5f198101908111610b795761111a90610f8e565b5080546001600160a01b031673d533a949740bb3306d119cc777fa900ba034cd5119016111705780546001600160a01b03191690555f5160206178765f395f51905f525f5160206178965f395f51905f525f80a2565b60405162461bcd60e51b8152602060048201526009602482015268042dad2e6dac2e8c6d60bb1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a6d6178207265776172647360a81b6044820152606490fd5b5f5160206178765f395f51905f525f5260076020525f5160206178d65f395f51905f52545f198101908111610b795761120c90610f8e565b5080546001600160a01b0316156112205750565b80546001600160a01b0319165f5160206178765f395f51905f529081179091555f5160206178565f395f51905f525f80a2565b5061126a5f5160206178765f395f51905f5261172b565b15610fd1565b505f610fca565b305f5160206178f65f395f51905f521480156114c4575b80156114a7575b6110d8575f5160206178f65f395f51905f525f5260076020525f5160206178365f395f51905f525461142857600154600f8110156111a15768010000000000000000811015610c1a578060016112ee9201600155610f8e565b5080546001600160a01b0319165f5160206178f65f395f51905f529081179091556001545f82815260076020525f5160206178365f395f51905f52919091555f5160206178565f395f51905f529080a25f5160206178f65f395f51905f523b156113925760405163a9059cbb60e01b60208201523060248201525f60448201526110d89061137f81606481016110b7565b5f5160206178f65f395f51905f52611760565b5f5160206178f65f395f51905f525f5260076020525f5160206178365f395f51905f5254806113be5750565b5f198101908111610b79576113d290610f8e565b5080546001600160a01b0316734e3fbd56cd56c3e72c1403e103b45db9da5b9d2a19016111705780546001600160a01b03191690555f5160206178f65f395f51905f525f5160206178965f395f51905f525f80a2565b5f5160206178f65f395f51905f525f5260076020525f5160206178365f395f51905f52545f198101908111610b795761146090610f8e565b5080546001600160a01b0316156114745750565b80546001600160a01b0319165f5160206178f65f395f51905f529081179091555f5160206178565f395f51905f525f80a2565b506114be5f5160206178f65f395f51905f5261172b565b15611295565b505f61128e565b6001600160a01b038116903082148015611663575b8015611653575b6115ad57815f52600760205260405f2054155f146115f957600154600f8110156111a15768010000000000000000811015610c1a5780600161152c9201600155610f8e565b508260018060a01b0319825416179055600154825f52600760205260405f2055815f5160206178565f395f51905f525f80a23b1561159a5760405163a9059cbb60e01b60208201523060248201525f60448083019190915281526110d891611595606483610e6f565b611760565b805f52600760205260405f2054806115b1575b5050565b5f198101908111610b79576115c590610f8e565b5080546001600160a01b03168290036111705780546001600160a01b03191690555f5160206178965f395f51905f525f80a2565b50805f52600760205260405f20545f198101908111610b795761161b90610f8e565b5080546001600160a01b031615611630575050565b80546001600160a01b031916821790555f5160206178565f395f51905f525f80a2565b5061165d8161172b565b156114e7565b5081156114e0565b6040519060205f8184019463095ea7b360e01b865260018060a01b03169485602486015281196044860152604485526116a5606486610e6f565b84519082855af15f513d826116f9575b5050156116c157505050565b6115956110d8936040519063095ea7b360e01b602083015260248201525f6044820152604481526116f3606482610e6f565b82611760565b90915061171657506001600160a01b0381163b15155b5f806116b5565b60011461170f565b91908201809211610b7957565b60e0516001600160a01b039182169116811461175b5760c0516001600160a01b03161461175757600190565b5f90565b505f90565b905f602091828151910182855af11561088c575f513d6117af57506001600160a01b0381163b155b61178f5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561178856fe60806040526004361015610011575f80fd5b5f5f3560e01c80628cc2621461382357806302ce728f146137f557806306b6f7e91461377657806306fdde031461365957806308a0c375146135c157806308c7e366146135a45780630cab937d146130385780630df8dfac1461300f57806313966db514612ff1578063146a29eb14612fd15780631c6c959714612f505780632164e85b14612f325780632b3ba681146110be5780632cdacb5014612eed5780632f86556814612a9e57806333fd6f7414612a4b5780633f2617cb146129575780633f4ba83a146128fc57806342f43d0b146128b7578063476343ee1461264357806348741376146125795780634ac8eb5f1461255e5780634cae6513146124e45780634fd422df146124c057806354fd4d501461249757806356ecf28b1461247957806357d775f81461243e5780635e43c47b1461240957806360c52d05146123c05780636551f16c146123365780636b091695146122725780636f307dc31461222d578063730a7514146121a2578063757991a81461213b578063759cb53b1461210c57806375a410141461208c57806378e97925146120515780637adbf97314611f635780637b10399914611f1e5780637e92968414611bbb5780637ec4b57114611b7a5780638049d97114611afd5780638214ba4814611a835780638285ef4014611a5457806383d4433914611a1b5780638456cb591461199657806386993bef146119785780638cad7fbe146119395780638da5cb5b146109d85780638f50ea921461191b57806391ebebbd146118bc57806392bbcaed1461189e57806393ae0df91461187757806393f46f6414611831578063945c91421461180257806395d14ca8146117c05780639a295e731461177a5780639fe34bdc14611158578063a053db68146112af578063a36a363014611291578063ab7cfaf914611273578063acb70815146111f5578063b5af3062146111d1578063b5b5454714611198578063b68d0a091461115d578063b78294dd14611158578063b95c57461461113a578063c00007b0146110e1578063c0a7e892146110be578063c3192f14146110c3578063c49bb2d1146110be578063ca51bb59146110a0578063cacf3b5814611074578063cadac47914610f86578063cdd72d5214610f2c578063d41ddc9614610dee578063d619658b14610dd2578063d6bda0c014610bf4578063d870ce6614610b5a578063d8dfeb4514610b15578063e509b9d914610ad4578063e551d11d14610ab6578063e69bc27114610a71578063e7a3317414610a1d578063f2f4eb26146109d8578063f301af4214610982578063f384bd0514610964578063f5c7f89914610927578063f8112eed146108e6578063fbbbf94c146108ac578063fd6d0526146104325763fff5d9da1461040d575f80fd5b3461042f578060031936011261042f5760206104276140ee565b604051908152f35b80fd5b503461042f57608036600319011261042f5761044c6139b7565b90606435906024356001600160a01b0383168084036108a85761046d614145565b60405163e8673ef560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561089d57849161085f575b506001600160a01b03163303610850578015908115610846575b5061083757600e548110610828576104ea6144d9565b505050604435670de0b6b3a764000003670de0b6b3a764000081116108145761051c670de0b6b3a76400009183613d36565b0493670de0b6b3a764000061053d6105348785613b9b565b600d5490613d36565b04946105498684613b9b565b90610552613c9e565b6001600160801b03815116838181119182156107ff575b50506107f0576001600160801b03610586818516828451166140ce565b169081815264e8d4a5100082029180830464e8d4a5100014901517156107525760208101916001600160801b0383511611610766575b51905160801b6001600160801b0319166001600160801b039190911617601755670de0b6b3a764000090610608905b6105f789601954613d67565b601955610602614163565b90613d36565b0495610613876157e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169561064a908890886158e3565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016620186a088810290898204148915171561075257813b1561074e57869160248392604051948593849263140e25ad60e31b845260048401525af180156107435761072a575b5060408051948552602085018890528401526060830152600192916001600160a01b03909116907f76cd0cedf979345ca241ce6de696a520a8efc860c6c10d9db2a7953307c237fc90608090a255604080516001600160a01b039092168252602082019290925290819081015b0390f35b610735868092613a57565b61073f575f6106b9565b8480fd5b6040513d88823e3d90fd5b8680fd5b634e487b7160e01b87526011600452602487fd5b61076e615160565b600254600181018091116107dc576001600160801b036106089381670de0b6b3a76400009694846105eb956002557febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3358d80a28164e8d4a51000818551160416835294965050935050506105bc565b634e487b7160e01b88526011600452602488fd5b6316c6823f60e01b8652600486fd5b6108099250613b9b565b600f5411835f610569565b634e487b7160e01b83526011600452602483fd5b6362171e8f60e01b8252600482fd5b631e4ec46b60e01b8252600482fd5b905030145f6104d4565b63d520e5ad60e01b8352600483fd5b90506020813d602011610895575b8161087a60209383613a57565b810103126108915761088b90613d22565b5f6104ba565b8380fd5b3d915061086d565b6040513d86823e3d90fd5b8280fd5b503461042f578060031936011261042f57601554601654604080516001600160a01b038416815260a09390931c6020840152820152606090f35b503461042f57602036600319011261042f576109206109036139b7565b61091361090e61496f565b613f6e565b61091b614145565b615736565b6001815580f35b503461042f57604036600319011261042f576001906109586109476139b7565b61094f614145565b60243590615012565b55602060405160018152f35b503461042f578060031936011261042f576020600954604051908152f35b503461042f57602036600319011261042f576004359060015482101561042f5760606109ad83613b63565b506001815491015460ff6040519260018060a01b038116845260a01c16151560208301526040820152f35b503461042f578060031936011261042f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461042f57602036600319011261042f57610a63337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b610a6e600435614930565b80f35b503461042f57604036600319011261042f576040610a8d6139cd565b9160043581526004602052209060018060a01b03165f52602052602060405f2054604051908152f35b503461042f578060031936011261042f576020600a54604051908152f35b503461042f57602036600319011261042f576020906001600160a01b03610af96139b7565b16815260088252604060018060a01b0391205416604051908152f35b503461042f578060031936011261042f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461042f57602036600319011261042f57600435610ba3337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b68056bc75e2d631000008110610be5576020817febc3aac103344d02f2e1b3fb50ca740929143c84082dd6e7698963e902aa636992600e55604051908152a180f35b630309cb8760e51b8252600482fd5b503461042f57606036600319011261042f57602435610c116139e3565b610c19614145565b610c22336142a5565b6001600160a01b03811615610dc357610c396144d9565b505050610c44614163565b5081610cd3575b610c609150610c5b60043561473e565b6152af565b906040610c6b613c70565b01610c77815133614335565b15610c8b5760208360018455604051908152f35b60649250610cad610c9a613c9e565b338452601b6020526040842054906143d7565b90338352601a6020526040832054905191633b49de0f60e21b8452600452602452604452fd5b602082610d05610d2c9430337f000000000000000000000000000000000000000000000000000000000000000061524b565b604051636e553f6560e01b8152600481019190915230602482015292839081906044820190565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610db8578392610d7e575b50610d79610c6092339030614be4565b610c4b565b91506020823d602011610db0575b81610d9960209383613a57565b81010312610dac57905190610d79610d69565b5f80fd5b3d9150610d8c565b6040513d85823e3d90fd5b631e4ec46b60e01b8352600483fd5b503461042f578060031936011261042f576020604051600f8152f35b503461042f57604036600319011261042f57600435610e0b6139cd565b610e13614145565b610e1c336142a5565b6001600160a01b03168015610dc357610e336144d9565b505050338352601b6020526040832054610f1e575b610e53333084614659565b604051635d043b2960e11b815260048101929092526024820152306044820152602081606481857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610f1357610ee4575b506040610ebc613c70565b01610ec8815133614335565b15610ed557506001815580f35b90606491610cad610c9a613c9e565b610f059060203d602011610f0c575b610efd8183613a57565b810190613ce8565b505f610eb1565b503d610ef3565b6040513d84823e3d90fd5b610f26614163565b50610e48565b503461042f578060031936011261042f57610f45613ba8565b506080610f5061402c565b915091506001600160801b0360208183511692015116610f6e613dcc565b91604051938452602084015260408301526060820152f35b503461042f57604036600319011261042f57600435610fa36139cd565b90610fac614145565b6001600160a01b03821615610dc357906020610ff992610fca6144d9565b505050610d058130337f000000000000000000000000000000000000000000000000000000000000000061524b565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610db8578390611040575b610920925030614be4565b506020823d60201161106c575b8161105a60209383613a57565b81010312610dac576109209151611035565b3d915061104d565b503461042f578060031936011261042f5761072661109061402c565b9060409492945194859485613a87565b503461042f578060031936011261042f576020601c54604051908152f35b613ae1565b503461042f578060031936011261042f576020601854604051908152f35b503461042f57602036600319011261042f576110fb6139b7565b611103614145565b6001600160a01b0381811683526008602052604083205416801561112a5761092091614eab565b508061113591614eab565b610920565b503461042f578060031936011261042f576020600154604051908152f35b613b2f565b503461042f57602036600319011261042f5760406111796139b7565b61118b61118582613fab565b91613f10565b9082519182526020820152f35b503461042f57602036600319011261042f576020906040906001600160a01b036111c06139b7565b168152600383522054604051908152f35b503461042f57602036600319011261042f5760206104276111f06139b7565b613fab565b503461042f57604036600319011261042f576004356112126139cd565b61121a614145565b6001600160a01b03811615610dc35760209261126a60019261123a6144d9565b505050611245613c9e565b61124f86826143d7565b9561126261125c8861473e565b9161473e565b90339261476f565b55604051908152f35b503461042f578060031936011261042f576020600d54604051908152f35b503461042f578060031936011261042f576020600c54604051908152f35b503461042f5760a036600319011261042f576112c96139b7565b60243591906064356044356084356001600160401b03811161073f573660238201121561073f5780600401356112fe81613b4c565b9161130c6040519384613a57565b818352602083016024819360051b8301019136831161177657602401905b82821061175e5750505061133c614145565b611345336142a5565b859061134f6144d9565b50505061135a614163565b506001600160a01b0386168088526012602052604088205490969060ff161561174f576001600160a01b0361138e85613c1b565b517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169116819003611739575083515f198101908111611725576001600160a01b03906113e39086613c28565b517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169291168290036116e9578561163e575b61142b90610c5b8b61473e565b93604051926370a0823160e01b8452306004850152602084602481865afa938415611633578a946115ff575b50883b156115fb57604051634b4ecc5560e11b8152336004820152602481018c9052608060448201529151608483018190528a90839060a4820190835b8181106115d6575050819293503060648301520381838c5af180156115cb579089916115b2575b5050906020602492604051938480926370a0823160e01b82523060048301525afa80156115a7578890611573575b6114f39250613b9b565b9380851061155c5750836115119161150c338330614be4565b613d67565b9560405194855260208501526040840152606083015260808201527fb19ca0df3f3a01af950d8e6ad62aeff167cf14c73e98af6c52afef1add5c97ed60a03392a26040610c6b613c70565b633b5d56ed60e11b87526004526024849052604486fd5b506020823d60201161159f575b8161158d60209383613a57565b81010312610dac576114f391516114e9565b3d9150611580565b6040513d8a823e3d90fd5b816115bc91613a57565b6115c757875f6114bb565b8780fd5b6040513d8b823e3d90fd5b85516001600160a01b031683526020958601958f955087945090920191600101611494565b8980fd5b9093506020813d60201161162b575b8161161b60209383613a57565b81010312610dac5751925f611457565b3d915061160e565b6040513d8c823e3d90fd5b925061166c8530337f000000000000000000000000000000000000000000000000000000000000000061524b565b604051636e553f6560e01b8152600481018690523060248201526020816044818c865af180156115cb5789906116b5575b61142b91506116ad338230614be4565b93905061141e565b506020813d6020116116e1575b816116cf60209383613a57565b81010312610dac5761142b905161169d565b3d91506116c2565b8489838251925f198401938411610814576044936001600160a01b03916117109190613c28565b51169063b0b3262d60e01b8352600452602452fd5b634e487b7160e01b89526011600452602489fd5b60449089906001600160a01b0361171088613c1b565b631311dc6d60e01b8852600488fd5b6020809161176b846139f9565b81520191019061132a565b8880fd5b503461042f578060031936011261042f576080906040519050620186a08152620186a06020820152670de0b6b3a76400006040820152670de0b6b3a76400006060820152f35b503461042f578060031936011261042f576060601454604051906001600160401b03811682526001600160401b038160401c16602083015260801c6040820152f35b503461042f578060031936011261042f57602060405173d533a949740bb3306d119cc777fa900ba034cd528152f35b503461042f5760209061184336613b03565b9192509015611861576104279161185861402c565b925050506146f8565b6118729161186d613c9e565b6146f8565b610427565b503461042f578060031936011261042f57602061042761189561402c565b92505050615209565b503461042f578060031936011261042f576020600f54604051908152f35b503461042f57606036600319011261042f576118d66139cd565b60406118e06139e3565b9260043581526005602052209060018060a01b03165f5260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b503461042f578060031936011261042f576020600e54604051908152f35b503461042f57602036600319011261042f5760209060ff906040906001600160a01b036119646139b7565b168152601284522054166040519015158152f35b503461042f578060031936011261042f576020601d54604051908152f35b503461042f578060031936011261042f576119db337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b600a54806119e7575080f35b601e5580600a557fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f63866020604051838152a180f35b503461042f57602036600319011261042f576020906040906001600160a01b03611a436139b7565b168152600783522054604051908152f35b503461042f578060031936011261042f5760406017548151906001600160801b038116825260801c6020820152f35b503461042f57602036600319011261042f577fc98711414b05c67ac27ffb415026d97ad5094c5490747891a834cb44f64940d96020600435611aef337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b80600f55604051908152a180f35b503461042f57604036600319011261042f57611b176139cd565b611b1f614145565b611b28336142a5565b6001600160a01b0381161561083757611b6290611b436144d9565b505050338352601b6020526040832054611b6c575b3390600435614659565b6040610ebc613c70565b611b74614163565b50611b58565b503461042f57602090611b8c36613b03565b9192509015611baa5761042791611ba161402c565b92505050614475565b61187291611bb6613c9e565b614475565b503461042f57602036600319011261042f57600435611c04337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b81601d54828103611c3f575b507fa83ced135f4f6135be6fb52ae9183bf190452765f5b75b36caa332537c3ca7e5602083604051908152a180f35b604051631526fe2760e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169060c081602481855afa908115610db8578391611ee9575b506040516370a0823160e01b8152306004820152906001600160a01b0316602082602481845afa91821561089d578492611eb2575b5081611d95575b5090606460209260405194859384926321d0683360e11b84528860048501526024840152600160448401525af18015610db857611d37575b50601d819055817fa83ced135f4f6135be6fb52ae9183bf190452765f5b75b36caa332537c3ca7e5611c10565b6020813d602011611d8d575b81611d5060209383613a57565b810103126108a8577fa83ced135f4f6135be6fb52ae9183bf190452765f5b75b36caa332537c3ca7e591611d85602092613cf7565b509150611d0a565b3d9150611d43565b60209060446040959394955180948193636197390160e11b83528760048401528160248401525af18015611e7057611e7b575b506040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015611e705782918691611e3b575b5010611e2c579083915f611cd2565b6346bc68ed60e01b8452600484fd5b9150506020813d602011611e68575b81611e5760209383613a57565b81010312610dac578190515f611e1d565b3d9150611e4a565b6040513d87823e3d90fd5b6020813d602011611eaa575b81611e9460209383613a57565b8101031261073f57611ea590613cf7565b611dc8565b3d9150611e87565b935090506020833d602011611ee1575b81611ecf60209383613a57565b81010312610dac57849251905f611ccb565b3d9150611ec2565b611f0b915060c03d60c011611f17575b611f038183613a57565b810190613d74565b5050925050505f611c96565b503d611ef9565b503461042f578060031936011261042f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461042f57602036600319011261042f576040611f7f6139b7565b611fb3337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b612021611fbe613c70565b805184516001600160a01b03918216815290841660208201529092907fb9d23ad01dc54c1fad84c770708fbe314a369b505c073949334dad786229805e90604090a16001600160a01b0316808352601580546001600160a01b0319169091179055565b6020810151601580546001600160a01b031660a09290921b6001600160a01b031916919091179055015160165580f35b503461042f578060031936011261042f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461042f57602036600319011261042f576120a66139b7565b6120ae614145565b3380835260086020908152604080852080546001600160a01b0319166001600160a01b039590951694851790555192835290917ff4239ad0860f93469699dd4be8040b8838c5e25bb6cf24a1dfb381b937ff078c9190a26001815580f35b503461042f578060031936011261042f576020604051734e3fbd56cd56c3e72c1403e103b45db9da5b9d2b8152f35b503461042f578060031936011261042f57602061042761217b7f000000000000000000000000000000000000000000000000000000000000000042613b9b565b7f000000000000000000000000000000000000000000000000000000000000000090613d49565b503461042f57602036600319011261042f576004356121eb337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b620186a08111610be5577f1f93e1cc6afaef2ddc4d7ef7b0f45ac3278d548338c839e9be18695732a662746040600c548151908152836020820152a1600c5580f35b503461042f578060031936011261042f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461042f57604036600319011261042f5761228c6139b7565b6122946139cd565b61229c614145565b6001600160a01b0382163303612309576001600160a01b038116156122c45761092091614eab565b60405162461bcd60e51b815260206004820152601760248201527f66776420616464726573732063616e6e6f7420626520300000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b6044820152606490fd5b503461042f57602036600319011261042f5760043561237f337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b670de0b6b3a76400008111610be5576020817f3e0c428758b3ad6ab4fd85e8257e4eee404fb36e80c0251143635b549cd70b8892600d55604051908152a180f35b503461042f57604036600319011261042f576123da6139cd565b6123e2614145565b6001600160a01b0381161561083757610920906123fd6144d9565b50505060043533614be4565b503461042f57602036600319011261042f576109206124266139b7565b61243161090e61496f565b612439614145565b614a3b565b503461042f578060031936011261042f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461042f578060031936011261042f576020600254604051908152f35b503461042f578060031936011261042f5760609060405190600382528060208301526040820152f35b503461042f57602036600319011261042f5760206104276124df6139b7565b613f10565b503461042f57602036600319011261042f577f18e1a8f58cc03bc99f69c27336072db255c3f01827f2923f654ddc209e2b8db56020600435612550337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b80601055604051908152a180f35b503461042f578060031936011261042f576020610427613dcc565b503461042f57604036600319011261042f576125936139b7565b61259b613a78565b6125cf337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b612633575b601154604080516001600160a01b038084168252841660208201529192917f74cd8ef76f78382ae0f3ee4e21117be974af0041a24dc98f7aa8ddabb0b2960c9190a16001600160a01b03166001600160a01b0319919091161760115580f35b61263b6144d9565b5050506125d4565b503461042f578060031936011261042f5761265c614145565b6126646144d9565b5050604051630abca72960e41b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169150602081600481855afa908115610db857839161287d575b506040516379bd9e4160e01b81526001600160a01b03821690602081600481855afa908115611e7057859161284b575b5061271461217b7f000000000000000000000000000000000000000000000000000000000000000042613b9b565b90601c54821190811591612840575b5061283157601c5583601854936019549382601855826019556127468587613d67565b823b15610891576040516340c10f1960e01b81526001600160a01b0392909216600483015260248201529082908290604490829084905af18015610f135761281c575b5050803b15610891576040516362f2221960e01b8152836004820152826024820152848160448183865af18015611e7057612807575b506040937f9cc800ba322ea82ab3e1e911dd4ccd84129687c4952f4ee2f937e3ac68755131606060019387519081528660208201528588820152a15582519182526020820152f35b612812858092613a57565b610891575f6127bf565b8161282691613a57565b61089157835f612789565b630e1b248d60e01b8552600485fd5b90508114155f612723565b90506020813d602011612875575b8161286660209383613a57565b81010312610dac57515f6126e6565b3d9150612859565b90506020813d6020116128af575b8161289860209383613a57565b810103126108a8576128a990613d22565b5f6126b6565b3d915061288b565b503461042f578060031936011261042f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461042f578060031936011261042f57612941337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b600a541561294c5780f35b610a6e601e54614930565b503461042f57604036600319011261042f576129716139b7565b612979613a78565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015612a19575b15612a0a577fea1eefb4fd58778d7b274fe54045a9feeec8f2847899c2e71126d3a74d486da59160409160018060a01b03169081855260126020528285209015159060ff1981541660ff831617905582519182526020820152a180f35b631d1e647b60e01b8352600483fd5b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146129ad565b503461042f57604036600319011261042f576040612a676139b7565b91612a706139cd565b9260018060a01b031681526006602052209060018060a01b03165f52602052602060405f2054604051908152f35b503461042f57602036600319011261042f57612ab86139b7565b612ac0614145565b60405163d25adeb360e01b8152906020826004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610db8578392612eb1575b506001600160a01b0382169133839003612ea2576001600160a01b0382168015612e9357612b3a6144d9565b505050612b45614163565b612b4e846142a5565b612b588185614335565b612e8457612b64613c9e565b90828752601a602052604087205490838852601b602052612b88604089205461473e565b926001600160801b0384169260208201926001600160801b03845116155f14612ded57612bbe670de0b6b3a76400009186613d36565b04600c54620186a0019081620186a011612dd9576001600160801b0398969492620186a0612bf5612c739d9c9a9896948c94613d36565b0481811115612dcf57509a8b955b877f158ba9ab7bbbd08eeffa4753bad41f4d450e24831d293427308badf3eadd8c766060612c39612c348a896143d7565b61473e565b9d8e6040519b8c528a60208d015216998a6040820152a2612c598a614d44565b82612c678c828751166140ce565b168452828551166140ce565b168252848b52601b602052612c8c8360408d2054613b9b565b858c52601b6020528060408d20558015159081612dba575b50612dab5751905160801b6001600160801b0319166001600160801b03919091161760175588969594612d109490939092909188917fe4a1ae657f49cb1fb1c7d3a94ae6093565c4c8c0e03de488f79c377c3c3a24e0916040919082519182526020820152a386614659565b813b156108a857604051632be71c5f60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602481018590526001600160801b0391909116604482015291908290606490829084905af18015610db857612d92575b50600160209255604051908152f35b612d9d838092613a57565b612da7575f612d83565b5080fd5b631abfe8a760e01b8b5260048bfd5b612dc59150826143d7565b601054115f612ca4565b90509a8b95612c03565b634e487b7160e01b8c52601160045260248cfd5b612e15612e046001600160801b0385511687613d36565b6001600160801b0386511690613d49565b8b80612e54575b612e34575b670de0b6b3a764000091612bbe91613d36565b6001810180911115612e2157634e487b7160e01b8c52601160045260248cfd5b5085612e7e612e6d6001600160801b0388511684613d36565b6001600160801b0387511690613d49565b10612e1c565b633af2cafd60e11b8652600486fd5b631e4ec46b60e01b8552600485fd5b6387e9041360e01b8452600484fd5b9091506020813d602011612ee5575b81612ecd60209383613a57565b810103126108a857612ede90613d22565b905f612b0e565b3d9150612ec0565b503461042f578060031936011261042f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461042f578060031936011261042f576020601954604051908152f35b503461042f57602036600319011261042f576004358015158103612da757612f76613d04565b50610726604051612f8681613a0d565b5f81525f6020820152612f97614145565b83612fa06144d9565b96915094612fb9575b6001905560405194859485613a87565b9150506018546001612fc9613c9e565b929050612fa9565b503461042f578060031936011261042f57602060405164e8d4a510008152f35b503461042f578060031936011261042f576020600b54604051908152f35b503461042f578060031936011261042f576011546040516001600160a01b039091168152602090f35b5034610dac576080366003190112610dac576130526139b7565b60443591906064356024356001600160401b038211610dac5736602383011215610dac578160040135926001600160401b038411610dac576024830192602436918660051b010111610dac576130a6614145565b6130af336142a5565b6130b76144d9565b5050506130c2614163565b506130cb613c9e565b9260018060a01b03821694855f52601260205260ff60405f20541615613595578015613581576130fa82613cd4565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911681900361357857505f198101928184116135645761314e613149858486613cc4565b613cd4565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811695911685900361353257506001600160801b0386511615613523576131a090339086614659565b6040516370a0823160e01b815230600482015291602083602481875afa9283156134b6575f936134ef575b50863b15610dac57604051634b4ecc5560e11b815233600482015260248101869052608060448201526084810183905291829160a48301915f5b8181106134c15750505090805f923060648301520381838a5af180156134b6576134a1575b506040516370a0823160e01b8152306004820152602081602481865afa80156133ed578290889061346b575b6132609250613b9b565b968088106134545750856001600160801b03855116155f14613410575086935b338752601b60205260408720548086116133f8575b506132b6906132a38961473e565b339130916132b08961473e565b9161476f565b6040516370a0823160e01b8152306004820152602081602481865afa9081156133ed57908793929184916133b4575b50906132f091613b9b565b8061333f575b505050604051928352602083015283604083015260608201527f6b2b212085c14b2dc48ec56d19c05084e5d8ef233539cdd3dc0d70a4ec7f4f9e60803392a26040610c6b613c70565b60405163a9059cbb60e01b815233600482015260248101919091529160209183916044918391905af18015611e705761337b575b8085916132f6565b6020813d6020116133ac575b8161339460209383613a57565b8101031261073f576133a590613cf7565b505f613373565b3d9150613387565b919350506020813d6020116133e5575b816133d160209383613a57565b81010312610dac57518692906132f06132e5565b3d91506133c4565b6040513d89823e3d90fd5b945096506132b661340985896143d7565b9790613295565b9361343c61342b6001600160801b036020840151168a613d36565b6001600160801b0383511690613d49565b94156132805793600181018091116107525793613280565b633b5d56ed60e11b87526004526024879052604486fd5b50506020813d602011613499575b8161348660209383613a57565b81010312610dac57816132609151613256565b3d9150613479565b6134ae9196505f90613a57565b5f945f61322a565b6040513d5f823e3d90fd5b9193509160019060209081906001600160a01b036134de886139f9565b168152019401910191849392613205565b9092506020813d60201161351b575b8161350b60209383613a57565b81010312610dac5751915f6131cb565b3d91506134fe565b631abfe8a760e01b5f5260045ffd5b90506131499161354193613cc4565b63b0b3262d60e01b5f9081526004929092526001600160a01b0316602452604490fd5b634e487b7160e01b5f52601160045260245ffd5b61354183613cd4565b634e487b7160e01b5f52603260045260245ffd5b631311dc6d60e01b5f5260045ffd5b34610dac575f366003190112610dac576020601054604051908152f35b34610dac576020366003190112610dac57600435613609337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b620186a0811161364a577fe796e9ae748449310fcd1cc6718aab236c9b8d2e0e04dacb232ba564d5b338cc60406009548151908152836020820152a1600955005b630309cb8760e51b5f5260045ffd5b34610dac575f366003190112610dac576040515f90601354918260011c6001841693841561376c575b60208210851461375857818452602084019490811561373d57506001146136df575b50906136b4816040930382613a57565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b91905060135f527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090915f905b808210613723575090915081016020016136b46136a4565b91926001816020925483858801015201910190929161370b565b60ff1916855250151560051b820160200190506136b46136a4565b634e487b7160e01b5f52602260045260245ffd5b90607f1690613682565b34610dac576020366003190112610dac576004356137be337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c3c565b7f388cba11a61d4b31467a533c88eef75abfb6097ff2ab4652d086560fffcc2f836040600b548151908152836020820152a1600b55005b34610dac575f366003190112610dac5761380d614145565b6020613817614163565b60015f55604051908152f35b34610dac576020366003190112610dac5761383c6139b7565b613844614145565b61384d81614d44565b60015461385981613bc0565b916001600160a01b03165f5b8281106139405760015f5583515f19810190859082116135645761388882613bc0565b9160015b818111156138ee57836040518091602082016020835281518091526020604084019201905f5b8181106138c0575050500390f35b825180516001600160a01b0316855260209081015181860152869550604090940193909201916001016138b2565b60206138fa8285613c28565b510151905f1981018181116135645760019260206139188389613c28565b510152613938838060a01b0361392e8488613c28565b5151169187613c28565b51520161388c565b8061394c600192613b63565b5054828060a01b0381169081159081156139a9575b506139a157805f52600660205260405f20845f5260205260405f205460206139898489613c28565b5101526139968287613c28565b515201915b91613865565b50019161399b565b60ff915060a01c1687613961565b600435906001600160a01b0382168203610dac57565b602435906001600160a01b0382168203610dac57565b604435906001600160a01b0382168203610dac57565b35906001600160a01b0382168203610dac57565b604081019081106001600160401b03821117613a2857604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117613a2857604052565b90601f801991011681019081106001600160401b03821117613a2857604052565b602435908115158203610dac57565b926001600160801b0391959460209183604060c09660e089019a89526001600160401b03815116868a01526001600160401b038682015116828a0152015116606087015260808601528281511660a0860152015116910152565b34610dac575f366003190112610dac576020604051670de0b6b3a76400008152f35b6060906003190112610dac57600435906024358015158103610dac57906044358015158103610dac5790565b34610dac575f366003190112610dac576020604051620186a08152f35b6001600160401b038111613a285760051b60200190565b6001548110156135815760015f81815291901b7fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60191565b9190820391821161356457565b60405190613bb582613a0d565b5f6020838281520152565b90613bca82613b4c565b613bd76040519182613a57565b8281528092613be8601f1991613b4c565b01905f5b828110613bf857505050565b602090604051613c0781613a0d565b5f81525f8382015282828501015201613bec565b8051156135815760200190565b80518210156135815760209160051b010190565b15613c4357565b60405162461bcd60e51b815260206004820152600560248201526421636f726560d81b6044820152606490fd5b60405190613c7d82613a3c565b6015546001600160a01b038116835260a01c60208301526016546040830152565b60405190613cab82613a0d565b6017546001600160801b038116835260801c6020830152565b91908110156135815760051b0190565b356001600160a01b0381168103610dac5790565b90816020910312610dac575190565b51908115158203610dac57565b60405190613d1182613a3c565b5f6040838281528260208201520152565b51906001600160a01b0382168203610dac57565b8181029291811591840414171561356457565b8115613d53570490565b634e487b7160e01b5f52601260045260245ffd5b9190820180921161356457565b91908260c0910312610dac57613d8982613d22565b91613d9660208201613d22565b91613da360408301613d22565b91613db060608201613d22565b91613dc960a0613dc260808501613d22565b9301613cf7565b90565b601d548015613eb957604051631526fe2760e01b8152600481019190915260c0816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156134b6576024916020915f91613e94575b506040516370a0823160e01b815230600482015292839182906001600160a01b03165afa9081156134b6575f91613e65575090565b90506020813d602011613e8c575b81613e8060209383613a57565b81010312610dac575190565b3d9150613e73565b613ead915060c03d60c011611f1757611f038183613a57565b5050925050505f613e30565b506040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156134b6575f91613e65575090565b6001600160a01b03165f908152601b6020908152604080832054600254600390935292205491929190808210613f44575050565b909264e8d4a510006001915b04930192818414613f695764e8d4a51000600191613f50565b925050565b15613f7557565b60405162461bcd60e51b815260206004820152600e60248201526d10b932bbb0b93226b0b730b3b2b960911b6044820152606490fd5b613fb3614145565b613fbc816142a5565b6001600160a01b03165f908152601a6020526040902054613fdb613dcc565b9081811115613fed57505b9060015f55565b9050613fe6565b6040519061400182613a3c565b8160406014546001600160401b03811683526001600160401b0381831c16602084015260801c910152565b5f614035613d04565b5060405161404281613a0d565b5f81525f602082015250614054613ff4565b906001600160401b034216825261406a82615507565b8051909190156140bf57506060810151926001600160401b0360208301511660208401526001600160801b03604083015116604084015260806140b96018546001600160801b03871690613d67565b92015190565b92905060185490613dc9613c9e565b906001600160801b03809116911603906001600160801b03821161356457565b600a548015614138576001600160801b0361410761402c565b92505050511690670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561356457613dc991613d49565b50670de0b6b3a764000090565b60025f54146141545760025f55565b633ee5aeb560e01b5f5260045ffd5b61416b613c70565b9060208201916001600160601b038351164214155f1461429d5780516040516315caaba160e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015290929160209184916024918391165afa9182156134b6575f92614269575b508115613d53576001600160601b03429081169094526ec097ce7bc90715b34b9f1000000000919091046040808301829052915160a09490941b6001600160a01b0319166001600160a01b03909416939093176015556016839055518281527f4fc1b45960547ee95894b08a284c3c066cf5aca706a7420639c42c3ec2e118a490602090a1565b9091506020813d602011614295575b8161428560209383613a57565b81010312610dac5751905f6141e2565b3d9150614278565b604001519150565b6142ae81614d44565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f90815260066020908152604080832094909316808352938152828220805490839055601a9091529190205490620186a0900480821061432c5761431c91613b9b565b905b5f52601a60205260405f2055565b50505f9061431e565b906009549182156143cf5761436b61434b613c9e565b6001600160a01b039092165f818152601b602052604090205490926143d7565b9081156143c6575f52601a60205260405f20549182156143be5761438e91613d36565b90620186a0820291808304620186a0149015171561356457670de0b6b3a76400006143b99204613d49565b111590565b505050505f90565b50505050600190565b505050600190565b6020810180516001600160801b03166143f0575050905b565b90929161441b61440a6001600160801b0386511683613d36565b6001600160801b0384511690613d49565b936001600160801b0381511615159283614448575b50505061443957565b90600181018091116135645790565b61446c9293506144636001600160801b038092511687613d36565b91511690613d49565b105f8080614430565b909160208201916001600160801b03835116155f146144945750505090565b6144b0612e6d6001600160801b03839796949597511684613d36565b94836144c5575b836144485750505061443957565b81516001600160801b0316151593506144b7565b5f905f906144e5613d04565b506144ee613ff4565b906144f882615507565b8051151580614505575050565b9194509250926143ee6001600160801b03602060806060870151968287016001600160401b0381511690604089019186835116907f6b9ef8676ff86d806b7a7bd7a9b0266910c9fce560c26289d7ed7cd7743127c786888701926001600160401b038451169460408901958c875116916040519384528c84015260408301526060820152a17f939dcec711228d083924a0db6cecbb66bb8403ea7cdbfe2f928901cbac2cdfc160408d6001600160401b0384511682519182528a820152a151916001600160401b0383169052519186831690526001600160401b034216808a526fffffffffffffffff00000000000000006014549260401b169187191617176014558460145491811990821990861b161691161760145561462888601854613d67565b601855015182815116831960175416176017550151166001600160801b036017549181199060801b16911617601755565b9160207fba68c7a8c8efbddb7e938ee32ecc28a68930c18105a3a0ab9563eac7f051cf5a9160018060a01b031693845f52601a825260405f2061469d828254613b9b565b90556146a8816157e2565b6001600160a01b03841693813086036146c7575b5050604051908152a3565b6146f1917f00000000000000000000000000000000000000000000000000000000000000006158e3565b5f816146bc565b90916001600160801b03825116155f1461471157505090565b9092916020840161472f612e6d6001600160801b0383511684613d36565b94836144485750505061443957565b6001600160801b038111614758576001600160801b031690565b6306dfcc6560e41b5f52608060045260245260445ffd5b9391909161477c81614d44565b6001600160801b0361479184828851166140ce565b16855260208501906001600160801b036147ae84828551166140ce565b16825260018060a01b031694855f52601b6020526147db6001600160801b0360405f205494168094613b9b565b865f52601b6020528060405f2055801515908161491b575b506135235751905160801b6001600160801b0319166001600160801b0391909116176017556001600160a01b0383169283614865575b507fe4a1ae657f49cb1fb1c7d3a94ae6093565c4c8c0e03de488f79c377c3c3a24e0916040916001600160801b038351921682526020820152a3565b917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15610dac57604051632770a7eb60e21b81526001600160a01b039490941660048501526001600160801b03821660248501525f908490604490829084905af19182156134b6577fe4a1ae657f49cb1fb1c7d3a94ae6093565c4c8c0e03de488f79c377c3c3a24e09360409361490b575b50915091614829565b5f61491591613a57565b5f614902565b6149269150826143d7565b601054115f6147f3565b6001600160801b03811161364a576020817fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f638692600a55604051908152a1565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480156149a45790565b5060405163670fb82160e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156134b6575f91614a01575b506001600160a01b0316331490565b90506020813d602011614a33575b81614a1c60209383613a57565b81010312610dac57614a2d90613d22565b5f6149f2565b3d9150614a0f565b6001600160a01b038116903082148015614bdc575b8015614bcc575b614b9257815f52600760205260405f2054155f14614b5e57600154600f811015614b2b5768010000000000000000811015613a2857806001614a9c9201600155613b63565b50826001600160601b0360a01b825416179055600154825f52600760205260405f2055817fb13fd610fe4e1b384966826794a9b2f6100ad031f352cc5ec6f22667f60749805f80a2803b15614b2157506143ee906040519063a9059cbb60e01b60208301523060248301525f604483015260448252614b1c606483613a57565b615ce8565b6143ee9150615736565b60405162461bcd60e51b815260206004820152600b60248201526a6d6178207265776172647360a81b6044820152606490fd5b50805f52600760205260405f20545f19810190811161356457614b8090613b63565b5080546001600160a01b031615614b96575b5050565b80546001600160a01b031916821790557fb13fd610fe4e1b384966826794a9b2f6100ad031f352cc5ec6f22667f60749805f80a2565b50614bd68161591f565b15614a57565b508115614a50565b9160018060a01b031691825f52601a60205260405f20614c05838254613d67565b905581306001600160a01b03831603614d11575b5050601d5480614c52575b5060207f2ac90482c3b6bea30a2c085cf093016bad7f970d91c5fd233e6b848d3e231dc391604051908152a2565b6040516321d0683360e11b8152600481019190915260248101829052600160448201526020816064815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156134b65715614c24576020813d602011614d09575b81614ccc60209383613a57565b81010312610dac577f2ac90482c3b6bea30a2c085cf093016bad7f970d91c5fd233e6b848d3e231dc391614d01602092613cf7565b509150614c24565b3d9150614cbf565b614d3d9130907f000000000000000000000000000000000000000000000000000000000000000061524b565b5f81614c19565b5f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15610dac575f8091602460405180948193633bd73ee360e21b83523060048401525af180156134b657614e96575b506002549060015490835b5f198110614dba575050505050565b836001600160a01b03831680614e4d575b865b858110614e26575085821015614e1d57808752601b60205264e8d4a51000604088205404818852601b60205260408820556001820180921161075257865260036020526040862055600101614dab565b50505050505050565b80614e3e89876001948b889c999d9e9a979b98615990565b01919490939796929591614dcd565b8087526003602052604087205491508582141580614e82575b15614dcb57905084908087526003602052856040882055614dcb565b50808752601b602052604087205415614e66565b614ea39192505f90613a57565b5f905f614da0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b15610dac57604051633bd73ee360e21b81525f816024818380983060048401525af180156134b657614ffd575b506002549160015492845b5f198110614f2057505050505050565b816001600160a01b03841680614fb4575b875b878110614f8d575083821015614f8357808852601b60205264e8d4a51000604089205404818952601b6020526040892055600182018092116107dc57875260036020526040872055600101614f10565b5050505050505050565b80614fa5888860019489889d999e9f9b979c98615990565b01929691959094989792614f33565b8088526003602052604088205491508382141580614fe9575b15614f3157905082908088526003602052836040892055614f31565b50808852601b602052604088205415614fcd565b61500a9193505f90613a57565b5f915f614f05565b5f91907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15610dac575f8091602460405180948193633bd73ee360e21b83523060048401525af180156134b65761514b575b506002549060015491845b84811061508957505050505050565b816001600160a01b03841680615102575b875b8681106150ec575083821015614f8357808852601b60205264e8d4a51000604089205404818952601b6020526040892055600182018092116107dc5787526003602052604087205560010161507a565b806150fc8a886001948988615990565b0161509c565b8088526003602052604088205491508382141580615137575b1561509a5790508290808852600360205283604089205561509a565b50808852601b60205260408820541561511b565b6151589193505f90613a57565b5f915f61506f565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15610dac575f8091602460405180948193633bd73ee360e21b83523060048401525af180156134b6576151f6575b5060025460015491905f1982106151d157505050565b815b8381106151e05750505050565b806151f084806001948680615990565b016151d3565b61520291505f90613a57565b5f5f6151bb565b600a5490516001600160801b0316808211156152435761522891613b9b565b6001600160801b03811115613dc957506001600160801b0390565b50505f615228565b6040516323b872dd60e01b60208201526001600160a01b0392831660248201529290911660448301526064808301939093529181526143ee91614b1c608483613a57565b906001600160801b03809116911601906001600160801b03821161356457565b9190916152ba613c9e565b92601054916001600160801b03811692831061352357600b54620186a00180620186a011613564576152f0620186a09185613d36565b046152fa86615209565b8181106154f2575085516001600160801b031661549357805b61537b82976001600160801b036020820191816153546153368883875116613d67565b8261534c6153438a61473e565b8287511661528f565b16845261473e565b1692839052516001600160801b0391161660809190911b6001600160801b03191617601755565b335f52601b60205260405f20615392838254613d67565b9055848082111561548a576153a691613b9b565b915b82615476575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15610dac576040516340c10f1960e01b81526001600160a01b03861660048201526001600160801b039290921660248301525f908290604490829084905af180156134b657615466575b506040519384526020840152604083015260018060a01b0316907f10a0132d3bf8c82a7fb93a86160f3074ca5c3e5706fa2bcdf0e2b5fd495af09b60603392a3565b5f61547091613a57565b5f615424565b61548283601954613d67565b6019556153ae565b50505f916153a8565b6020860190806154da6154c46154b36001600160801b0386511684613d36565b6001600160801b038b511690613d49565b936001600160801b03614463818c511687613d36565b10156153135790600181018091116135645790615313565b63586ce21f60e11b5f5260045260245260445ffd5b9060405160a081018181106001600160401b03821117613a28576040525f8152602081015f815260408201935f855260608301915f8352608084019360405161554f81613a0d565b5f81525f6020820152855280966001600160401b038451164211615576575b505050505050565b600161560d9252615585613c9e565b8652604061559d6001600160401b0386511642613b9b565b6011549582015182516356fb8f2d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490526001600160801b0390921660448201529196919485929190911690829081906064820190565b03915afa80156134b6575f925f916156cf575b50670de0b6b3a7640000946001600160401b03615667959481946001600160801b0361565e951690521684526001600160801b038851511690613d36565b91511690613d36565b0480825280151590816156ae575b50156156a5576156966001600160801b03809251169251928284511661528f565b1690525b5f808080808061556e565b5f91505261569a565b6001600160801b0391506156c790828551511690613d67565b11155f615675565b939250506040833d60401161572e575b816156ec60409383613a57565b81010312610dac578251926001600160401b0384168403610dac5760200151906001600160801b0382168203610dac5791929190670de0b6b3a7640000615620565b3d91506156df565b6001600160a01b03165f8181526007602052604090205480615756575050565b5f1981019081116135645761576a90613b63565b5080546001600160a01b03168290036157b15780546001600160a01b03191690557f646cfe9445aed85f4853d501d1924d2bdabb1bbf12531df29f929f07ba4169e05f80a2565b60405162461bcd60e51b8152602060048201526009602482015268042dad2e6dac2e8c6d60bb1b6044820152606490fd5b601d54806157ee575050565b604051631526fe2760e01b8152600481019190915260c0816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156134b6575f9260209284926158b9575b50604051636197390160e11b815260048101919091526024810184905292839160449183916001600160a01b03165af180156134b6576158845750565b6020813d6020116158b1575b8161589d60209383613a57565b81010312610dac576158ae90613cf7565b50565b3d9150615890565b60449192506158d69060c03d60c011611f1757611f038183613a57565b5050925050509190615847565b60405163a9059cbb60e01b60208201526001600160a01b039290921660248301526044808301939093529181526143ee91614b1c606483613a57565b6001600160a01b03908116907f000000000000000000000000000000000000000000000000000000000000000016811461598b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461598757600190565b5f90565b505f90565b93929161599c90613b63565b5080546001600160a01b03169290831561556e576040516370a0823160e01b815230600482015293602085602481845afa9485156134b6575f95615cb4575b508496600183019687549582149686888099615ca6575b80615c9d575b615c1c575b50505f8281526004602090815260408083206001600160a01b03878116855292529091205495169384615a4e575b50505050505081615a43575b50615a40575050565b55565b90508214155f615a37565b825f52600560205260405f2060018060a01b0385165f5260205260405f20855f5260205260405f20548860018060a01b03841692831580158091615c13575b615a9b575b50505050615a2b565b82615c0b575b5081615bfb575b5015615b9b57615af690855f52600660205260405f20875f5260205269021e19e0c9bab2400000615aef60405f205492895f52601b60205261060260405f2054918c613b9b565b0490613d67565b9182615b38575b5050505b5f52600560205260405f209060018060a01b03165f5260205260405f20905f5260205260405f20555f808080808080888180615a92565b90615b6183615b92959c93875f52600660205260405f20895f526020525f6040812055876158e3565b84867fce405e67b4d6e56e438257e15f160ae28b450e6e7659bbc4c1f4e09a1ac846cb6020604051878152a4613b9b565b965f8080615afd565b9050615bdf9150835f52600660205260405f20855f5260205269021e19e0c9bab2400000615aef60405f205492875f52601b60205261060260405f2054918a613b9b565b825f52600660205260405f20845f5260205260405f2055615b01565b60ff91505460a01c16155f615aa8565b91505f615aa1565b50898410615a8d565b615c2591613b9b565b69021e19e0c9bab240000081029080820469021e19e0c9bab2400000149015171561356457615c5a9060175460801c90613d49565b8015615c9357825f52600460205260405f2060018060a01b0385165f52602052615c8960405f20918254613d67565b90555b5f866159fd565b5097508497615c8c565b508082116159f8565b5060175460801c15156159f2565b9094506020813d602011615ce0575b81615cd060209383613a57565b81010312610dac5751935f6159db565b3d9150615cc3565b905f602091828151910182855af1156134b6575f513d615d3757506001600160a01b0381163b155b615d175750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415615d1056fea164736f6c634300081c000a60a034606c57601f61033038819003918201601f19168301916001600160401b03831184841017607057808492602094604052833981010312606c57516001600160a01b0381168103606c576080526040516102ab9081610085823960805181818160ae015261017e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461020a57806318160ddd146101ee578063313ce567146101d357806370a08231146101ad5780638da5cb5b1461016957806395d89b4114610103578063a0712d681461009a5763a9059cbb14610071575f80fd5b346100965760403660031901126100965761008a610288565b50602060405160018152f35b5f80fd5b3461009657602036600319011261009657337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146100dd57005b5f5460043581018091116100ef575f55005b634e487b7160e01b5f52601160045260245ffd5b34610096575f36600319011261009657604051604081019080821067ffffffffffffffff8311176101555761015191604052600381526215d3d560ea1b60208201526040519182918261025e565b0390f35b634e487b7160e01b5f52604160045260245ffd5b34610096575f366003190112610096576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610096576020366003190112610096576101c6610288565b5060205f54604051908152f35b34610096575f36600319011261009657602060405160128152f35b34610096575f3660031901126100965760205f54604051908152f35b34610096575f36600319011261009657604051604081019080821067ffffffffffffffff8311176101555761015191604052600d81526c2bb934ba32a7b3332a37b5b2b760991b6020820152604051918291825b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100965756fea164736f6c634300081c000af3af3b9da6ac33569932110b27324f490cadff82974ce0ccd88561c89e289b4ab13fd610fe4e1b384966826794a9b2f6100ad031f352cc5ec6f22667f6074980000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52646cfe9445aed85f4853d501d1924d2bdabb1bbf12531df29f929f07ba4169e0b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6ed4c9b3ad13d2bf45175455fec325ef1713cf4b0f709952687da6d7332a081ba0000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b000000000000000000000000c07e000044f95655c11fda4cd37f70a94d7e0a7d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000008087346b8865e5b0bf9f8a49742c2d83f6a50a6c000000000000000000000000cb7e25fbbd8afe4ce73d7dac647dbc3d847f3c8200000000000000000000000077777777729c405efb6ac823493e6111f0070d67000000000000000000000000000000000000000000000000000000000001731800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000010101010e0c3171d894b71b3400668af311e7d9400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000419905009e4656fdc02418c7df35b1e61ed5f72600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c5265737570706c7920506169722028467261786c656e643a206672785553442f7363727655534429202d20310000000000000000000000000000000000000000