14 txs
4.1k calls
constructor
constructor()
functions
adjustForDecimals
viewfunction adjustForDecimals(uint256 _amount, address _tokenDiv, address _tokenMul) view returns (uint256)
allWhitelistedTokens
viewfunction allWhitelistedTokens(uint256) view returns (address)
allWhitelistedTokensLength
viewfunction allWhitelistedTokensLength() view returns (uint256)
approvedRouters
viewfunction approvedRouters(address, address) view returns (bool)
BASIS_POINTS_DIVISOR
viewfunction BASIS_POINTS_DIVISOR() view returns (uint256)
bufferAmounts
viewfunction bufferAmounts(address) view returns (uint256)
cumulativeFundingRates
viewfunction cumulativeFundingRates(address) view returns (uint256)
errorController
viewfunction errorController() view returns (address)
errors
viewfunction errors(uint256) view returns (string)
feeReserves
viewfunction feeReserves(address) view returns (uint256)
FUNDING_RATE_PRECISION
viewfunction FUNDING_RATE_PRECISION() view returns (uint256)
fundingInterval
viewfunction fundingInterval() view returns (uint256)
fundingRateFactor
viewfunction fundingRateFactor() view returns (uint256)
getDelta
viewfunction getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) view returns (bool, uint256)
getEntryFundingRate
viewfunction getEntryFundingRate(address _collateralToken, address _indexToken, bool _isLong) view returns (uint256)
getFeeBasisPoints
viewfunction getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) view returns (uint256)
getFundingFee
viewfunction getFundingFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate) view returns (uint256)
getGlobalShortDelta
viewfunction getGlobalShortDelta(address _token) view returns (bool, uint256)
getMaxPrice
viewfunction getMaxPrice(address _token) view returns (uint256)
getMinPrice
viewfunction getMinPrice(address _token) view returns (uint256)
getNextAveragePrice
viewfunction getNextAveragePrice(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _nextPrice, uint256 _sizeDelta, uint256 _lastIncreasedTime) view returns (uint256)
getNextFundingRate
viewfunction getNextFundingRate(address _token) view returns (uint256)
getNextGlobalShortAveragePrice
viewfunction getNextGlobalShortAveragePrice(address _indexToken, uint256 _nextPrice, uint256 _sizeDelta) view returns (uint256)
getPosition
viewfunction getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256)
getPositionDelta
viewfunction getPositionDelta(address _account, address _collateralToken, address _indexToken, bool _isLong) view returns (bool, uint256)
getPositionFee
viewfunction getPositionFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta) view returns (uint256)
getPositionKey
purefunction getPositionKey(address _account, address _collateralToken, address _indexToken, bool _isLong) pure returns (bytes32)
getPositionLeverage
viewfunction getPositionLeverage(address _account, address _collateralToken, address _indexToken, bool _isLong) view returns (uint256)
getRedemptionAmount
viewfunction getRedemptionAmount(address _token, uint256 _usdgAmount) view returns (uint256)
getRedemptionCollateral
viewfunction getRedemptionCollateral(address _token) view returns (uint256)
getRedemptionCollateralUsd
viewfunction getRedemptionCollateralUsd(address _token) view returns (uint256)
getTargetUsdgAmount
viewfunction getTargetUsdgAmount(address _token) view returns (uint256)
getUtilisation
viewfunction getUtilisation(address _token) view returns (uint256)
globalShortAveragePrices
viewfunction globalShortAveragePrices(address) view returns (uint256)
globalShortSizes
viewfunction globalShortSizes(address) view returns (uint256)
gov
viewfunction gov() view returns (address)
guaranteedUsd
viewfunction guaranteedUsd(address) view returns (uint256)
hasDynamicFees
viewfunction hasDynamicFees() view returns (bool)
includeAmmPrice
viewfunction includeAmmPrice() view returns (bool)
inManagerMode
viewfunction inManagerMode() view returns (bool)
inPrivateLiquidationMode
viewfunction inPrivateLiquidationMode() view returns (bool)
isLeverageEnabled
viewfunction isLeverageEnabled() view returns (bool)
isLiquidator
viewfunction isLiquidator(address) view returns (bool)
isManager
viewfunction isManager(address) view returns (bool)
isSwapEnabled
viewfunction isSwapEnabled() view returns (bool)
lastFundingTimes
viewfunction lastFundingTimes(address) view returns (uint256)
liquidationFeeUsd
viewfunction liquidationFeeUsd() view returns (uint256)
marginFeeBasisPoints
viewfunction marginFeeBasisPoints() view returns (uint256)
MAX_FEE_BASIS_POINTS
viewfunction MAX_FEE_BASIS_POINTS() view returns (uint256)
MAX_FUNDING_RATE_FACTOR
viewfunction MAX_FUNDING_RATE_FACTOR() view returns (uint256)
MAX_LIQUIDATION_FEE_USD
viewfunction MAX_LIQUIDATION_FEE_USD() view returns (uint256)
maxGasPrice
viewfunction maxGasPrice() view returns (uint256)
maxGlobalShortSizes
viewfunction maxGlobalShortSizes(address) view returns (uint256)
maxLeverage
viewfunction maxLeverage() view returns (uint256)
maxUsdgAmounts
viewfunction maxUsdgAmounts(address) view returns (uint256)
MIN_FUNDING_RATE_INTERVAL
viewfunction MIN_FUNDING_RATE_INTERVAL() view returns (uint256)
MIN_LEVERAGE
viewfunction MIN_LEVERAGE() view returns (uint256)
minProfitBasisPoints
viewfunction minProfitBasisPoints(address) view returns (uint256)
minProfitTime
viewfunction minProfitTime() view returns (uint256)
mintBurnFeeBasisPoints
viewfunction mintBurnFeeBasisPoints() view returns (uint256)
poolAmounts
viewfunction poolAmounts(address) view returns (uint256)
positions
viewfunction positions(bytes32) view returns (uint256 size, uint256 collateral, uint256 averagePrice, uint256 entryFundingRate, uint256 reserveAmount, int256 realisedPnl, uint256 lastIncreasedTime)
PRICE_PRECISION
viewfunction PRICE_PRECISION() view returns (uint256)
priceFeed
viewfunction priceFeed() view returns (address)
reservedAmounts
viewfunction reservedAmounts(address) view returns (uint256)
router
viewfunction router() view returns (address)
shortableTokens
viewfunction shortableTokens(address) view returns (bool)
stableFundingRateFactor
viewfunction stableFundingRateFactor() view returns (uint256)
stableSwapFeeBasisPoints
viewfunction stableSwapFeeBasisPoints() view returns (uint256)
stableTaxBasisPoints
viewfunction stableTaxBasisPoints() view returns (uint256)
stableTokens
viewfunction stableTokens(address) view returns (bool)
swapFeeBasisPoints
viewfunction swapFeeBasisPoints() view returns (uint256)
taxBasisPoints
viewfunction taxBasisPoints() view returns (uint256)
tokenBalances
viewfunction tokenBalances(address) view returns (uint256)
tokenDecimals
viewfunction tokenDecimals(address) view returns (uint256)
tokenToUsdMin
viewfunction tokenToUsdMin(address _token, uint256 _tokenAmount) view returns (uint256)
tokenWeights
viewfunction tokenWeights(address) view returns (uint256)
totalTokenWeights
viewfunction totalTokenWeights() view returns (uint256)
USDG_DECIMALS
viewfunction USDG_DECIMALS() view returns (uint256)
usdg
viewfunction usdg() view returns (address)
usdgAmounts
viewfunction usdgAmounts(address) view returns (uint256)
usdToToken
viewfunction usdToToken(address _token, uint256 _usdAmount, uint256 _price) view returns (uint256)
usdToTokenMax
viewfunction usdToTokenMax(address _token, uint256 _usdAmount) view returns (uint256)
usdToTokenMin
viewfunction usdToTokenMin(address _token, uint256 _usdAmount) view returns (uint256)
useSwapPricing
viewfunction useSwapPricing() view returns (bool)
validateLiquidation
viewfunction validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) view returns (uint256, uint256)
vaultUtils
viewfunction vaultUtils() view returns (address)
whitelistedTokenCount
viewfunction whitelistedTokenCount() view returns (uint256)
whitelistedTokens
viewfunction whitelistedTokens(address) view returns (bool)
addRouter
nonpayablefunction addRouter(address _router)
buyUSDG
nonpayablefunction buyUSDG(address _token, address _receiver) returns (uint256)
clearTokenConfig
nonpayablefunction clearTokenConfig(address _token)
decreasePosition
nonpayablefunction decreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) returns (uint256)
directPoolDeposit
nonpayablefunction directPoolDeposit(address _token)
increasePosition
nonpayablefunction increasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong)
initialize
nonpayablefunction initialize(address _router, address _usdg, address _priceFeed, uint256 _liquidationFeeUsd, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor)
liquidatePosition
nonpayablefunction liquidatePosition(address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver)
removeRouter
nonpayablefunction removeRouter(address _router)
sellUSDG
nonpayablefunction sellUSDG(address _token, address _receiver) returns (uint256)
setBufferAmount
nonpayablefunction setBufferAmount(address _token, uint256 _amount)
setError
nonpayablefunction setError(uint256 _errorCode, string _error)
setErrorController
nonpayablefunction setErrorController(address _errorController)
setFees
nonpayablefunction setFees(uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees)
setFundingRate
nonpayablefunction setFundingRate(uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor)
setGov
nonpayablefunction setGov(address _gov)
setInManagerMode
nonpayablefunction setInManagerMode(bool _inManagerMode)
setInPrivateLiquidationMode
nonpayablefunction setInPrivateLiquidationMode(bool _inPrivateLiquidationMode)
setIsLeverageEnabled
nonpayablefunction setIsLeverageEnabled(bool _isLeverageEnabled)
setIsSwapEnabled
nonpayablefunction setIsSwapEnabled(bool _isSwapEnabled)
setLiquidator
nonpayablefunction setLiquidator(address _liquidator, bool _isActive)
setManager
nonpayablefunction setManager(address _manager, bool _isManager)
setMaxGasPrice
nonpayablefunction setMaxGasPrice(uint256 _maxGasPrice)
setMaxGlobalShortSize
nonpayablefunction setMaxGlobalShortSize(address _token, uint256 _amount)
setMaxLeverage
nonpayablefunction setMaxLeverage(uint256 _maxLeverage)
setPriceFeed
nonpayablefunction setPriceFeed(address _priceFeed)
setTokenConfig
nonpayablefunction setTokenConfig(address _token, uint256 _tokenDecimals, uint256 _tokenWeight, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable)
setUsdgAmount
nonpayablefunction setUsdgAmount(address _token, uint256 _amount)
setVaultUtils
nonpayablefunction setVaultUtils(address _vaultUtils)
swap
nonpayablefunction swap(address _tokenIn, address _tokenOut, address _receiver) returns (uint256)
updateCumulativeFundingRate
nonpayablefunction updateCumulativeFundingRate(address _collateralToken, address _indexToken)
upgradeVault
nonpayablefunction upgradeVault(address _newVault, address _token, uint256 _amount)
withdrawFees
nonpayablefunction withdrawFees(address _token, address _receiver) returns (uint256)
events
BuyUSDG
event BuyUSDG(address account, address token, uint256 tokenAmount, uint256 usdgAmount, uint256 feeBasisPoints)
ClosePosition
event ClosePosition(bytes32 key, uint256 size, uint256 collateral, uint256 averagePrice, uint256 entryFundingRate, uint256 reserveAmount, int256 realisedPnl)
CollectMarginFees
event CollectMarginFees(address token, uint256 feeUsd, uint256 feeTokens)
CollectSwapFees
event CollectSwapFees(address token, uint256 feeUsd, uint256 feeTokens)
DecreaseGuaranteedUsd
event DecreaseGuaranteedUsd(address token, uint256 amount)
DecreasePoolAmount
event DecreasePoolAmount(address token, uint256 amount)
DecreasePosition
event DecreasePosition(bytes32 key, address account, address collateralToken, address indexToken, uint256 collateralDelta, uint256 sizeDelta, bool isLong, uint256 price, uint256 fee)
DecreaseReservedAmount
event DecreaseReservedAmount(address token, uint256 amount)
DecreaseUsdgAmount
event DecreaseUsdgAmount(address token, uint256 amount)
DirectPoolDeposit
event DirectPoolDeposit(address token, uint256 amount)
IncreaseGuaranteedUsd
event IncreaseGuaranteedUsd(address token, uint256 amount)
IncreasePoolAmount
event IncreasePoolAmount(address token, uint256 amount)
IncreasePosition
event IncreasePosition(bytes32 key, address account, address collateralToken, address indexToken, uint256 collateralDelta, uint256 sizeDelta, bool isLong, uint256 price, uint256 fee)
IncreaseReservedAmount
event IncreaseReservedAmount(address token, uint256 amount)
IncreaseUsdgAmount
event IncreaseUsdgAmount(address token, uint256 amount)
LiquidatePosition
event LiquidatePosition(bytes32 key, address account, address collateralToken, address indexToken, bool isLong, uint256 size, uint256 collateral, uint256 reserveAmount, int256 realisedPnl, uint256 markPrice)
SellUSDG
event SellUSDG(address account, address token, uint256 usdgAmount, uint256 tokenAmount, uint256 feeBasisPoints)
Swap
event Swap(address account, address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut, uint256 amountOutAfterFees, uint256 feeBasisPoints)
UpdateFundingRate
event UpdateFundingRate(address token, uint256 fundingRate)
UpdatePnl
event UpdatePnl(bytes32 key, bool hasProfit, uint256 delta)
UpdatePosition
event UpdatePosition(bytes32 key, uint256 size, uint256 collateral, uint256 averagePrice, uint256 entryFundingRate, uint256 reserveAmount, int256 realisedPnl, uint256 markPrice)
errors
No errors.
creation bytecode
0x60806040526001805461ffff1916610101178155620f42406008556032600a9081556014600b55601e600c819055600d556004600e55600f556011805460ff191690556170806012556016805463ffffffff1916909117905534801561006457600080fd5b506001600055600680546001600160a01b03191633179055615ac9806200008c6000396000f3fe608060405234801561001057600080fd5b506004361061074e5760003560e01c8063870d917c116103be578063c7e074c3116101ff578063df73a26711610125578063f3ae2415116100b8578063fbfded6d11610087578063fbfded6d146111b0578063fce28c10146111c3578063fdaf6ac3146111cc578063fed1a606146111df57600080fd5b8063f3ae241514611154578063f5b91b7b14611177578063f887ea401461118a578063fa12dbc01461119d57600080fd5b8063efa10a6e116100f4578063efa10a6e146110fb578063f07456ce1461110e578063f07bbf771461112e578063f25552781461114157600080fd5b8063df73a267146110b9578063e124e6d2146110c2578063e468baf0146110d5578063e67f59a7146110e857600080fd5b8063d8f897c31161019d578063db3555fb1161016c578063db3555fb14611068578063db97495f1461108a578063dc8f5fac1461109d578063de2ea948146110a657600080fd5b8063d8f897c314611009578063d9ac422514611029578063da76524c14611032578063daf9c2101461104557600080fd5b8063d2fa635e116101d9578063d2fa635e14610fa8578063d3127e6314610fbb578063d54d5a9f14610fce578063d66b000d14610ff657600080fd5b8063c7e074c314610f6f578063cea0c32814610f82578063cfad57a214610f9557600080fd5b8063a22f2392116102e4578063ae3302c211610282578063b364accb11610251578063b364accb14610f13578063c3c7b9e914610f26578063c4f718bf14610f46578063c65bc7b114610f4f57600080fd5b8063ae3302c214610ed2578063b06423f314610edb578063b136ca4914610eed578063b1cc53ab14610f0057600080fd5b8063a93acac2116102be578063a93acac214610e72578063ab08c1c614610e85578063ab2f3ad414610e92578063ad1e4f8d14610eb257600080fd5b8063a22f239214610e43578063a42ab3d214610e4c578063a5e90eee14610e5f57600080fd5b80639060b1ca1161035c5780639849e4121161032b5780639849e41214610e075780639899cd0214610e105780639d7432ca14610e235780639f392eb314610e3657600080fd5b80639060b1ca14610dae5780639331621214610dc157806395082d2514610dd45780639698d25a14610de757600080fd5b80638a39735a116103985780638a39735a146107a55780638a78daa814610d5b5780638ee573ac14610d7b5780638f7b840414610d9b57600080fd5b8063870d917c14610d2057806388b1fbdf14610d285780638a27d46814610d4857600080fd5b806345a6f3701161059357806362287a32116104b9578063728cdbca1161044c578063817bb8571161041b578063817bb85714610cd457806381a612d614610ce757806382a0849014610cfa5780638585f4d214610d0d57600080fd5b8063728cdbca14610c92578063741bef1a14610ca55780637a210a2b14610cb85780637c2eb9f714610cc157600080fd5b80636be6026b116104885780636be6026b14610c4f57806371089f4d14610c59578063711e619014610c6c578063724e78da14610c7f57600080fd5b806362287a3214610bd15780636274980314610bda5780636abbe0c814610bfa5780636ae0b15414610c1357600080fd5b8063514ea4bf1161053157806352f55eed1161050057806352f55eed14610b5d5780635c07eaab14610b7d5780635f7bc11914610b905780636092219914610ba357600080fd5b8063514ea4bf14610a8757806351723e8214610b07578063523fba7f14610b1a578063529a356f14610b3a57600080fd5b80634a3f088d1161056d5780634a3f088d14610a055780634a993ee914610a555780634befe2ca14610a755780634d47b30414610a7e57600080fd5b806345a6f370146109b557806348d91abf146109df57806348f35cbb146109f257600080fd5b806329ff9615116106785780633a05dcc11161061657806340eb3802116105e557806340eb380214610959578063421528731461096c57806342b60b031461097f5780634453a374146109a257600080fd5b80633a05dcc1146109185780633c5a6e351461092b5780633de39c111461093e5780633e72a2621461094757600080fd5b806330455ede1161065257806330455ede146108ef578063318bc6891461090257806334c1557d146107a5578063351a964d1461090b57600080fd5b806329ff9615146108b65780632c668ec1146108c95780632d4b0576146108dc57600080fd5b8063134ca63b116106f05780631ce9cb8f116106bf5780631ce9cb8f1461082f57806324b0c04d1461084f57806324ca984e1461086457806328e67be5146108a357600080fd5b8063134ca63b146107d9578063174d2694146107e2578063181e210e146107eb5780631aa4ace51461080f57600080fd5b80630a48d5a91161072c5780630a48d5a91461078957806310eb56c21461079c578063126082cf146107a557806312d43a51146107ae57600080fd5b806304fef1db1461075357806307c58752146107795780630842b07614610781575b600080fd5b610766610761366004614e94565b6111ff565b6040519081526020015b60405180910390f35b61076661125f565b601b54610766565b610766610797366004614eb1565b611279565b610766600b5481565b61076661271081565b6006546107c1906001600160a01b031681565b6040516001600160a01b039091168152602001610770565b61076660145481565b61076660095481565b6016546107ff906301000000900460ff1681565b6040519015158152602001610770565b61076661081d366004614e94565b60236020526000908152604090205481565b61076661083d366004614e94565b602c6020526000908152604090205481565b61086261085d366004614eeb565b6112d2565b005b610862610872366004614e94565b3360009081526018602090815260408083206001600160a01b0394909416835292905220805460ff19166001179055565b6108626108b1366004614f08565b6112f6565b6107666108c4366004614e94565b611374565b6107666108d7366004614eb1565b611383565b6107666108ea366004614f84565b6113c8565b6108626108fd366004614eeb565b61142a565b610766600f5481565b6001546107ff9060ff1681565b610766610926366004614e94565b611445565b610862610939366004614fe0565b6114f9565b61076660175481565b6001546107ff90610100900460ff1681565b610862610967366004615052565b61163b565b61076661097a3660046150c6565b6116fe565b6107ff61098d366004614e94565b601f6020526000908152604090205460ff1681565b6108626109b0366004615108565b6117a4565b6109c86109c3366004614f84565b6117d7565b604080519215158352602083019190915201610770565b6108626109ed366004615141565b61186a565b6002546107c1906001600160a01b031681565b610a18610a13366004614f84565b611c2f565b604080519889526020890197909752958701949094526060860192909252608085015260a0840152151560c083015260e082015261010001610770565b610766610a63366004614e94565b60276020526000908152604090205481565b6107666101f481565b610766600c5481565b610ad2610a953660046151a9565b602b602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610770565b610766610b15366004614f84565b611d18565b610766610b28366004614e94565b60216020526000908152604090205481565b6107ff610b48366004614e94565b60196020526000908152604090205460ff1681565b610766610b6b366004614e94565b60256020526000908152604090205481565b6109c8610b8b3660046151c2565b611db7565b610862610b9e366004614e94565b611eaf565b6107ff610bb1366004615214565b601860209081526000928352604080842090915290825290205460ff1681565b61076660075481565b610766610be8366004614e94565b602e6020526000908152604090205481565b6001546107c1906201000090046001600160a01b031681565b610862610c21366004614e94565b3360009081526018602090815260408083206001600160a01b0394909416835292905220805460ff19169055565b610766620f424081565b610862610c67366004614e94565b611f4a565b610766610c7a366004615214565b611f7c565b610862610c8d366004614e94565b6121b7565b610862610ca0366004615242565b6121e1565b6004546107c1906001600160a01b031681565b610766600a5481565b610862610ccf366004614eeb565b612252565b610766610ce2366004615214565b612274565b610766610cf5366004614e94565b6124e9565b610766610d083660046152a7565b612585565b610862610d1b366004614eb1565b6125bb565b610766601281565b610766610d36366004614e94565b601e6020526000908152604090205481565b610862610d5636600461531b565b6125df565b610766610d69366004614e94565b602d6020526000908152604090205481565b610766610d89366004614e94565b601d6020526000908152604090205481565b610862610da9366004614e94565b612625565b6016546107ff9062010000900460ff1681565b610766610dcf366004615347565b61264f565b61076668327cb2734119d3b7a9601e1b81565b610766610df5366004614e94565b602f6020526000908152604090205481565b61076660125481565b610766610e1e366004614eb1565b6128e2565b610766610e31366004615377565b6128ff565b6011546107ff9060ff1681565b610766600d5481565b610766610e5a366004614eb1565b6129a8565b610862610e6d366004615108565b6129c5565b610766610e80366004614e94565b6129f8565b6016546107ff9060ff1681565b610766610ea0366004614e94565b60226020526000908152604090205481565b610766610ec0366004614e94565b60246020526000908152604090205481565b61076660085481565b6016546107ff90610100900460ff1681565b610766610efb366004614e94565b612af5565b610766610f0e3660046153ac565b612b93565b6109c8610f21366004614e94565b612c18565b610766610f34366004614e94565b60266020526000908152604090205481565b61076660135481565b610766610f5d366004614e94565b60296020526000908152604090205481565b610766610f7d3660046153ec565b612cae565b610862610f90366004615434565b612d41565b610862610fa3366004614e94565b612d62565b610862610fb63660046151a9565b612d8c565b610862610fc93660046151a9565b612d99565b610fe1610fdc366004615475565b612db5565b60408051928352602083019190915201610770565b610862611004366004614eb1565b612e5c565b610766611017366004614e94565b602a6020526000908152604090205481565b61076660105481565b6107666110403660046154d8565b612eab565b6107ff611053366004614e94565b601c6020526000908152604090205460ff1681565b6107ff611076366004614e94565b602080526000908152604090205460ff1681565b610766611098366004615546565b612f46565b61076660155481565b6108626110b43660046155ab565b612fd7565b610766600e5481565b6107666110d0366004614e94565b613360565b6107c16110e33660046151a9565b6133be565b6108626110f6366004614e94565b6133e8565b610862611109366004614eb1565b6134bb565b61076661111c366004614e94565b60286020526000908152604090205481565b61086261113c366004614eeb565b6134df565b61076661114f366004615214565b613505565b6107ff611162366004614e94565b601a6020526000908152604090205460ff1681565b6005546107c1906001600160a01b031681565b6003546107c1906001600160a01b031681565b6107666111ab366004615377565b61355b565b6108626111be366004615214565b61359c565b610766610e1081565b6107666111da36600461560e565b613769565b6111f26111ed3660046151a9565b6137c1565b604051610770919061568d565b6001600160a01b038116600090815260256020526040812054806112265750600092915050565b6001600160a01b03831660009081526026602052604090205461125890829061125290620f424061385b565b90613867565b9392505050565b61127668327cb2734119d3b7a9601e1b60646156d6565b81565b600081611288575060006112cc565b6000611293846124e9565b6001600160a01b0385166000908152601d60205260409020549091506112c76112bd82600a6157d9565b611252868561385b565b925050505b92915050565b6112da613873565b60168054911515620100000262ff000019909216919091179055565b6002546001600160a01b031633146113555760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20696e76616c6964206572726f72436f6e74726f6c6c6572000060448201526064015b60405180910390fd5b600083815260306020526040902061136e908383614de6565b50505050565b60006112cc8261079784612af5565b60008061138f84613360565b905060006113ad826112528668327cb2734119d3b7a9601e1b61385b565b6005549091506112c79082906001600160a01b0316876116fe565b6040516bffffffffffffffffffffffff19606086811b8216602084015285811b8216603484015284901b16604882015281151560f81b605c820152600090605d016040516020818303038152906040528051906020012090505b949350505050565b611432613873565b6001805460ff1916911515919091179055565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf91906157e5565b9050806114cf5750600092915050565b6001600160a01b03831660009081526022602052604090205460155461142290611252838561385b565b611501613873565b6001600160a01b0387166000908152601c602052604090205460ff1661157e5760075461152f90600161388e565b600755601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319166001600160a01b0389161790555b6015546001600160a01b0388166000908152602260205260409020546115a590829061389a565b6001600160a01b0389166000908152601c602090815260408083208054600160ff1991821617909155601d83528184208c9055602283528184208b9055601e83528184208a905560248352818420899055601f83528184208054821689151517905591805290912080549091168415151790559050611624818761388e565b60155561163088613360565b505050505050505050565b611643613873565b6116536101f48a111560036138a6565b6116636101f489111560046138a6565b6116736101f488111560056138a6565b6116836101f487111560066138a6565b6116936101f486111560076138a6565b6116a36101f485111560086138a6565b6116c76116bd68327cb2734119d3b7a9601e1b60646156d6565b84111560096138a6565b600a98909855600b96909655600c94909455600d92909255600e55600f556009556010556011805460ff1916911515919091179055565b60055460009081906001600160a01b03858116911614611736576001600160a01b0384166000908152601d6020526040902054611739565b60125b6005549091506000906001600160a01b03858116911614611772576001600160a01b0384166000908152601d6020526040902054611775565b60125b905061179a61178583600a6157d9565b61125261179384600a6157d9565b899061385b565b9695505050505050565b6117ac613873565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60008060006117e8878787876113c8565b6000818152602b6020908152604091829020825160e081018452815480825260018301549382019390935260028201549381018490526003820154606082015260048201546080820152600582015460a082015260069091015460c082018190529394509261185b928992918990611db7565b93509350505094509492505050565b6118726138d2565b60015461188890610100900460ff16601c6138a6565b61189061392c565b61189985613945565b6118a48484836139a1565b600154604051634eae147d60e11b81526001600160a01b038781166004830152868116602483015285811660448301526064820185905283151560848301526201000090920490911690639d5c28fa9060a40160006040518083038186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b50505050611931848461359c565b600061193f868686856113c8565b6000818152602b60205260408120919250836119635761195e866124e9565b61196c565b61196c86613360565b825490915061197d57600282018190555b81541580159061198d5750600085115b156119b3576119ad868360000154846002015487858a8860060154612f46565b60028301555b60006119cc898989888a88600001548960030154613ab1565b905060006119d989613b80565b905060006119e78a83611279565b60018601549091506119f9908261388e565b60018601819055611a0e90841115601d6138a6565b6001850154611a1d908461389a565b6001860155611a2d8a8a89612b93565b60038601558454611a3e908961388e565b808655426006870155611a54901515601e6138a6565b611a6685600001548660010154613c24565b611a748b8b8b8a6001612db5565b50506000611a828b8a6129a8565b6004870154909150611a94908261388e565b6004870155611aa38b82613c47565b8715611ae857611abc8b611ab78b8761388e565b613cdc565b611ac68b83613d4d565b611ad08b84613dbe565b611ae38b611ade8d876128e2565b613ec2565b611b54565b6001600160a01b038a166000908152602d6020526040902054611b25576001600160a01b038a166000908152602e60205260409020859055611b4a565b611b308a868b6128ff565b6001600160a01b038b166000908152602e60205260409020555b611b548a8a613f81565b7f2fe68525253654c21998f35787a8d0f361905ef647c854092430ab65f2f15022878d8d8d868e8e8c8c604051611b93999897969594939291906157fe565b60405180910390a1855460018701546002880154600389015460048a015460058b0154604080518e815260208101979097528601949094526060850192909252608084015260a083015260c082015260e081018690527f20853733b590dce729d9f4628682ebd9a34d2354e72679e66f43a008fc03b773906101000160405180910390a150505050505050611c286001600055565b5050505050565b6000806000806000806000806000611c498d8d8d8d6113c8565b6000818152602b60209081526040808320815160e081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830181905260069091015460c0830152929350918112611cc6578160a00151611cc19061584c565b611ccc565b8160a001515b9050816000015182602001518360400151846060015185608001518560008860a0015112158860c001519a509a509a509a509a509a509a509a5050505094995094995094999196509450565b600080611d27868686866113c8565b6000818152602b6020908152604091829020825160e0810184528154815260018201549281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a08401526006015460c083015291925090611d9490151560256138a6565b60208101518151611dac91906112529061271061385b565b979650505050505050565b600080611dc86000861160266138a6565b600084611ddd57611dd888613360565b611de6565b611de6886124e9565b90506000818711611e0057611dfb828861389a565b611e0a565b611e0a878361389a565b90506000611e1c886112528b8561385b565b905060008715611e2f5750878311611e34565b508288115b6000611e4b6010548961388e90919063ffffffff16565b4211611e6f576001600160a01b038c166000908152601e6020526040902054611e72565b60005b9050818015611e955750611e868b8261385b565b611e928461271061385b565b11155b15611e9f57600092505b509a909950975050505050505050565b611eb76138d2565b6001600160a01b0381166000908152601c6020526040902054611ede9060ff16600e6138a6565b6000611ee982613b80565b9050611ef960008211600f6138a6565b611f038282613dbe565b7fa5a389190ebf6170a133bda5c769b77f4d6715b8aa172ec0ddf8473d0b4944bd8282604051611f34929190615869565b60405180910390a150611f476001600055565b50565b611f52613873565b600180546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000611f866138d2565b611f8e614037565b6001600160a01b0383166000908152601c6020526040902054611fb59060ff1660136138a6565b6016805461ff001916610100179055600554600090611fdc906001600160a01b0316613b80565b9050611fec6000821160146138a6565b611ff6848561359c565b60006120028583611383565b90506120126000821160156138a6565b61201c8583614055565b6120268582613ec2565b600554604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906120589030908690600401615869565b600060405180830381600087803b15801561207257600080fd5b505af1158015612086573d6000803e3d6000fd5b50506005546120a092506001600160a01b0316905061411a565b60015460405163eb0835bf60e01b81526000916201000090046001600160a01b03169063eb0835bf906120d99089908790600401615869565b602060405180830381865afa1580156120f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211a91906157e5565b905060006121298784846141a5565b90506121396000821160166138a6565b612144878288614266565b604080516001600160a01b0380891682528916602082015290810185905260608101829052608081018390527fd732b7828fa6cee72c285eac756fc66a7477e3dc22e22e7c432f1c265d40b4839060a00160405180910390a16016805461ff001916905593505050506112cc6001600055565b6121bf613873565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6121e9613873565b600380546001600160a01b03199081166001600160a01b039889161790915560058054821696881696909617909555600480549095169390951692909217909255600991909155601355601455336000908152601a60205260409020805460ff19166001179055565b61225a613873565b600180549115156101000261ff0019909216919091179055565b600061227e6138d2565b612286614037565b6001600160a01b0383166000908152601c60205260409020546122ad9060ff1660106138a6565b6016805461ff00191661010017905560006122c784613b80565b90506122d76000821160116138a6565b6122e1848561359c565b60006122ec856124e9565b9050600061230a68327cb2734119d3b7a9601e1b611252858561385b565b60055490915061232690829088906001600160a01b03166116fe565b90506123366000821160126138a6565b60015460405163256f6ee360e11b81526000916201000090046001600160a01b031690634adeddc69061236f908a908690600401615869565b602060405180830381865afa15801561238c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b091906157e5565b905060006123bf8886846141a5565b905060006123dd68327cb2734119d3b7a9601e1b611252848861385b565b6005549091506123f99082908b906001600160a01b03166116fe565b90506124058982614303565b61240f8983613dbe565b6005546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990612441908b908590600401615869565b600060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b5050604080516001600160a01b03808d1682528d16602082015290810189905260608101849052608081018690527fab4c77c74cd32c85f35416cf03e7ce9e2d4387f7b7f2c1f4bf53daaecf8ea72d925060a001905060405180910390a16016805461ff0019169055955050505050506112cc6001600055565b600480546016546040516317e1d38560e11b81526001600160a01b038581169482019490945260006024820181905260ff8084161515604484015261010090930490921615156064820152909290911690632fc3a70a906084015b602060405180830381865afa158015612561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc91906157e5565b600061258f6138d2565b61259761392c565b6125a088613945565b6125af888888888888886143a9565b9050611dac6001600055565b6125c3613873565b6001600160a01b03909116600090815260276020526040902055565b6125e7613873565b6125f7610e10841015600a6138a6565b612607612710831115600b6138a6565b612617612710821115600c6138a6565b601292909255601355601455565b61262d613873565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006126596138d2565b60015461266a9060ff1660176138a6565b6001600160a01b0384166000908152601c60205260409020546126919060ff1660186138a6565b6001600160a01b0383166000908152601c60205260409020546126b89060ff1660196138a6565b6126d8836001600160a01b0316856001600160a01b03161415601a6138a6565b6016805461ff0019166101001790556126f1848061359c565b6126fb838461359c565b600061270685613b80565b905061271660008211601b6138a6565b6000612721866124e9565b9050600061272e86613360565b9050600061274082611252868661385b565b905061274d8189896116fe565b9050600061276b68327cb2734119d3b7a9601e1b611252878761385b565b6005549091506127879082908b906001600160a01b03166116fe565b600154604051636d099c0b60e11b81526001600160a01b038c811660048301528b8116602483015260448201849052929350600092620100009092049091169063da13381690606401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281191906157e5565b905060006128208a85846141a5565b905061282c8b84614303565b6128368a84614055565b6128408b88613dbe565b61284a8a85613ec2565b6128538a6147ea565b61285e8a828b614266565b604080516001600160a01b038b811682528d811660208301528c1681830152606081018990526080810186905260a0810183905260c0810184905290517f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db9181900360e00190a16016805461ff001916905596505050505050506112586001600055565b6000816128f1575060006112cc565b61125883836111ab86613360565b6001600160a01b0383166000908152602d6020908152604080832054602e9092528220548285821161293a57612935868361389a565b612944565b612944828761389a565b9050600061295683611252868561385b565b90508683116000612967868961388e565b905060008261297f5761297a828561388e565b612989565b612989828561389a565b9050612999816112528c8561385b565b9b9a5050505050505050505050565b6000816129b7575060006112cc565b61125883836111ab866124e9565b6129cd613873565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6012546001600160a01b0382166000908152602a602052604081205490914291612a219161388e565b1115612a2f57506000919050565b6012546001600160a01b0383166000908152602a60205260408120549091612a5c9161125290429061389a565b6001600160a01b03841660009081526025602052604090205490915080612a87575060009392505050565b6001600160a01b0384166000908152601f602052604081205460ff16612aaf57601354612ab3565b6014545b6001600160a01b038616600090815260266020526040902054909150612aec908390611252908690612ae690869061385b565b9061385b565b95945050505050565b6001600160a01b0381166000908152601f602052604081205460ff1615612b3257506001600160a01b031660009081526025602052604090205490565b6001600160a01b038216600090815260286020526040812054612b569084906128e2565b6001600160a01b03841660009081526026602090815260408083205460259092529091205491925061125891612b8d90849061388e565b9061389a565b60015460405163b1cc53ab60e01b81526001600160a01b03858116600483015284811660248301528315156044830152600092620100009004169063b1cc53ab90606401602060405180830381865afa158015612bf4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142291906157e5565b6001600160a01b0381166000908152602d6020526040812054819080612c445750600093849350915050565b6000612c4f85613360565b6001600160a01b0386166000908152602e6020526040812054919250828211612c8157612c7c838361389a565b612c8b565b612c8b828461389a565b90506000612c9d83611252878561385b565b939092119792965091945050505050565b60015460405163c7e074c360e01b81526001600160a01b0387811660048301526024820187905260448201869052606482018590528315156084830152600092620100009004169063c7e074c39060a4015b602060405180830381865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179a91906157e5565b612d49614037565b612d5d6001600160a01b038316848361485d565b505050565b612d6a613873565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b612d94613873565b601755565b612da1613873565b612db0612710821160026138a6565b600855565b60015460405163d54d5a9f60e01b81526001600160a01b03878116600483015286811660248301528581166044830152841515606483015283151560848301526000928392620100009091049091169063d54d5a9f9060a4016040805180830381865afa158015612e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4e9190615882565b915091509550959350505050565b612e64613873565b6001600160a01b03821660009081526023602052604090205480821115612e9857612d5d83612e93848461389a565b614303565b612d5d83612ea6838561389a565b614055565b60015460405163369d949360e21b81526001600160a01b0388811660048301528781166024830152868116604483015285151560648301526084820185905260a48201849052600092620100009004169063da76524c9060c401602060405180830381865afa158015612f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac91906157e5565b6000806000612f588a8a8a8a88611db7565b90925090506000612f698a8761388e565b905060008815612f985783612f8757612f82828461389a565b612f91565b612f91828461388e565b9050612fb9565b83612fac57612fa7828461388e565b612fb6565b612fb6828461389a565b90505b612fc7816112528a8561385b565b9c9b505050505050505050505050565b612fdf6138d2565b6016546301000000900460ff161561300f573360009081526019602052604090205461300f9060ff1660226138a6565b6016805460ff19169055613023848461359c565b6000613031868686866113c8565b6000818152602b6020908152604091829020825160e08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a08401526006015460c0830152919250906130a090151560236138a6565b6000806130b1898989896000612db5565b915091506130c4826000141560246138a6565b81600214156130f9576130e1898989600087600001518b8f6143a9565b50506016805460ff1916600117905550613356915050565b600061310589836128e2565b6001600160a01b038a166000908152602c602052604090205490915061312b908261388e565b6001600160a01b038a166000818152602c60209081526040918290209390935580519182529181018490529081018290527f5d0c0019d3d45fadeb74eff9d2c9924d146d000ac6bcf3c28bf0ac3c9baa011a9060600160405180910390a16131978985608001516148b3565b86156131c657602084015184516131b8918b916131b39161389a565b613d4d565b6131c689611ade8b856128e2565b6000876131db576131d689613360565b6131e4565b6131e4896124e9565b90507f2e1f85a64a2f22cf2f0c42584e7c919ed4abe8d53675cff0f62bf1e95a1c676f868c8c8c8c8a600001518b602001518c608001518d60a001518a6040516132869a99989796959493929190998a526001600160a01b0398891660208b015296881660408a0152949096166060880152911515608087015260a086015260c085015260e08401929092526101008301919091526101208201526101400190565b60405180910390a18715801561329f5750846020015183105b156132cd5760208501516000906132b6908561389a565b90506132cb8b6132c68d846128e2565b613dbe565b505b876132e0576132e089866000015161495c565b6000868152602b6020526040812081815560018101829055600281018290556003810182905560048101829055600581018290556006015560095461332c908b90611ade9082906128e2565b6133428a61333c8c6009546128e2565b89614266565b50506016805460ff19166001179055505050505b611c286001600055565b600480546016546040516317e1d38560e11b81526001600160a01b03858116948201949094526001602482015260ff808316151560448301526101009092049091161515606482015260009290911690632fc3a70a90608401612544565b601b81815481106133ce57600080fd5b6000918252602090912001546001600160a01b0316905081565b6133f0613873565b6001600160a01b0381166000908152601c60205260409020546134179060ff16600d6138a6565b6001600160a01b03811660009081526022602052604090205460155461343c9161389a565b6015556001600160a01b0381166000908152601c60209081526040808320805460ff19908116909155601d835281842084905560228352818420849055601e835281842084905560248352818420849055601f8352818420805482169055918052909120805490911690556007546134b590600161389a565b60075550565b6134c3613873565b6001600160a01b039091166000908152602f6020526040902055565b6134e7613873565b6016805491151563010000000263ff00000019909216919091179055565b600061350f613873565b6001600160a01b0383166000908152602c6020526040902054806135375760009150506112cc565b6001600160a01b0384166000908152602c6020526040812055611258848285614266565b60008261356a57506000611258565b6001600160a01b0384166000908152601d6020526040902054612aec8361125261359584600a6157d9565b879061385b565b60015460405163fbfded6d60e01b81526001600160a01b0384811660048301528381166024830152600092620100009004169063fbfded6d906044016020604051808303816000875af11580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906158a6565b90508061362757505050565b6001600160a01b0383166000908152602a60205260409020546136765760125461365590612ae64282613867565b6001600160a01b039093166000908152602a60205260409020929092555050565b6012546001600160a01b0384166000908152602a6020526040902054429161369e919061388e565b11156136a957505050565b60006136b4846129f8565b6001600160a01b0385166000908152602960205260409020549091506136da908261388e565b6001600160a01b03851660009081526029602052604090205560125461370490612ae64282613867565b6001600160a01b0385166000908152602a6020908152604080832093909355602990528190205490517fa146fc154e1913322e9817d49f0d5c37466c24326e15de10e739a948be815eab9161375b91879190615869565b60405180910390a150505050565b60015460405163fdaf6ac360e01b81526001600160a01b03878116600483015286811660248301528581166044830152841515606483015260848201849052600092620100009004169063fdaf6ac39060a401612d00565b603060205260009081526040902080546137da906158c3565b80601f0160208091040260200160405190810160405280929190818152602001828054613806906158c3565b80156138535780601f1061382857610100808354040283529160200191613853565b820191906000526020600020905b81548152906001019060200180831161383657829003601f168201915b505050505081565b600061125882846156d6565b600061125882846158fe565b60065461388c906001600160a01b0316331460356138a6565b565b60006112588284615920565b60006112588284615938565b600081815260306020526040902082612d5d5760405162461bcd60e51b815260040161134c919061594f565b600260005414156139255760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161134c565b6002600055565b60175461393557565b61388c6017543a111560376138a6565b336001600160a01b03821614156139595750565b6003546001600160a01b031633141561396f5750565b6001600160a01b0381166000908152601860209081526040808320338452909152902054611f479060ff1660296138a6565b8015613a15576139c6826001600160a01b0316846001600160a01b031614602a6138a6565b6001600160a01b0383166000908152601c60205260409020546139ed9060ff16602b6138a6565b6001600160a01b0383166000908152601f6020526040902054612d5d9060ff1615602c6138a6565b6001600160a01b0383166000908152601c6020526040902054613a3c9060ff16602d6138a6565b6001600160a01b0383166000908152601f6020526040902054613a639060ff16602e6138a6565b6001600160a01b0382166000908152601f6020526040902054613a8b9060ff1615602f6138a6565b6001600160a01b0382166000908152602080526040902054612d5d9060ff1660306138a6565b600080613ac18989898989613769565b90506000613ad38a8a8a8a8989612eab565b9050613adf828261388e565b91506000613aed8a846128e2565b6001600160a01b038b166000908152602c6020526040902054909150613b13908261388e565b6001600160a01b038b166000818152602c60209081526040918290209390935580519182529181018590529081018290527f5d0c0019d3d45fadeb74eff9d2c9924d146d000ac6bcf3c28bf0ac3c9baa011a9060600160405180910390a150909998505050505050505050565b6001600160a01b0381166000818152602160205260408082205490516370a0823160e01b8152306004820152919290918391906370a0823190602401602060405180830381865afa158015613bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfd91906157e5565b6001600160a01b03851660009081526021602052604090208190559050611422818361389a565b81613c3957613c35811560276138a6565b5050565b613c358183101560286138a6565b6001600160a01b038216600090815260266020526040902054613c6a908261388e565b6001600160a01b038316600090815260266020818152604080842085905560258252909220549152613c9f91111560346138a6565b7faa5649d82f5462be9d19b0f2b31a59b2259950a6076550bac9f3a1c07db9f66d8282604051613cd0929190615869565b60405180910390a15050565b6001600160a01b038216600090815260286020526040902054613cff908261388e565b6001600160a01b0383166000908152602860205260409081902091909155517fd9d4761f75e0d0103b5cbeab941eeb443d7a56a35b5baf2a0787c03f03f4e47490613cd09084908490615869565b6001600160a01b038216600090815260286020526040902054613d70908261389a565b6001600160a01b0383166000908152602860205260409081902091909155517f34e07158b9db50df5613e591c44ea2ebc82834eff4a4dc3a46e000e608261d6890613cd09084908490615869565b6001600160a01b038216600090815260256020526040902054613de1908261388e565b6001600160a01b0383166000818152602560205260408082209390935591516370a0823160e01b81523060048201526370a0823190602401602060405180830381865afa158015613e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5a91906157e5565b6001600160a01b038416600090815260256020526040902054909150613e849082101560316138a6565b7f976177fbe09a15e5e43f848844963a42b41ef919ef17ff21a17a5421de8f47378383604051613eb5929190615869565b60405180910390a1505050565b604080518082018252601a81527f5661756c743a20706f6f6c416d6f756e742065786365656465640000000000006020808301919091526001600160a01b038516600090815260259091529190912054613f1d9183906149c4565b6001600160a01b03831660009081526025602090815260408083208490556026909152902054613f5091101560326138a6565b7f112726233fbeaeed0f5b1dba5cb0b2b81883dee49fb35ff99fd98ed9f6d31eb08282604051613cd0929190615869565b6001600160a01b0382166000908152602d6020526040902054613fa4908261388e565b6001600160a01b0383166000908152602d6020908152604080832093909355602f905220548015612d5d576001600160a01b0383166000908152602d6020526040902054811015612d5d5760405162461bcd60e51b815260206004820152601a60248201527f5661756c743a206d61782073686f727473206578636565646564000000000000604482015260640161134c565b336000908152601a602052604090205461388c9060ff1660366138a6565b6001600160a01b0382166000908152602360205260409020548181116140c2576001600160a01b03831660009081526023602052604080822091909155517fe1e812596aac93a06ecc4ca627014d18e30f5c33b825160cc9d5c0ba61e4522790613eb59085908490615869565b6140cc818361389a565b6001600160a01b0384166000908152602360205260409081902091909155517fe1e812596aac93a06ecc4ca627014d18e30f5c33b825160cc9d5c0ba61e4522790613eb59085908590615869565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418591906157e5565b6001600160a01b0390921660009081526021602052604090209190915550565b6000806141bb612710611252613595828761389a565b905060006141c9858361389a565b6001600160a01b0387166000908152602c60205260409020549091506141ef908261388e565b6001600160a01b0387166000908152602c60205260409020557f47cd9dda0e50ce30bcaaacd0488452b596221c07ac402a581cfae4d3933cac2b866142348184611279565b604080516001600160a01b0390931683526020830191909152810183905260600160405180910390a150949350505050565b61427a6001600160a01b038416828461485d565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156142be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e291906157e5565b6001600160a01b039093166000908152602160205260409020929092555050565b6001600160a01b038216600090815260236020526040902054614326908261388e565b6001600160a01b0383166000908152602360209081526040808320939093556024905220548015614378576001600160a01b0383166000908152602360205260409020546143789082101560336138a6565b7f64243679a443432e2293343b77d411ff6144370404618f00ca0d2025d9ca98828383604051613eb5929190615869565b6001546040516381d11a2360e01b81526001600160a01b03898116600483015288811660248301528781166044830152606482018790526084820186905284151560a483015283811660c483015260009262010000900416906381d11a239060e40160006040518083038186803b15801561442357600080fd5b505afa158015614437573d6000803e3d6000fd5b50505050614445878761359c565b6000614453898989876113c8565b6000818152602b60205260409020805491925090614474901515601f6138a6565b614486868260000154101560206138a6565b614498878260010154101560216138a6565b6001810154815460048301546000916144b591611252908b61385b565b60048401549091506144c7908261389a565b60048401556144d68b826148b3565b506000806144e88d8d8d8d8d8d6149f0565b855491935091508914614650576145008c8c8a612b93565b60038501558354614511908a61389a565b80855560018501546145239190613c24565b6145318d8d8d8b6001612db5565b5050871561455e576145548c611ab786600101548661389a90919063ffffffff16565b61455e8c8a613d4d565b6000886145735761456e8c613360565b61457c565b61457c8c6124e9565b90507f93d75d64d1f84fc6f430a64fc578bdd4c1e090e90ea2d51773e626d19de56d30868f8f8f8f8f8f886145b18c8c61389a565b6040516145c6999897969594939291906157fe565b60405180910390a18454600186015460028701546003880154600489015460058a0154604080518d815260208101979097528601949094526060850192909252608084015260a083015260c082015260e081018290527f20853733b590dce729d9f4628682ebd9a34d2354e72679e66f43a008fc03b773906101000160405180910390a150614788565b871561466a576146608c84613cdc565b61466a8c8a613d4d565b60008861467f5761467a8c613360565b614688565b6146888c6124e9565b90507f93d75d64d1f84fc6f430a64fc578bdd4c1e090e90ea2d51773e626d19de56d30868f8f8f8f8f8f886146bd8c8c61389a565b6040516146d2999897969594939291906157fe565b60405180910390a18454600186015460028701546003880154600489015460058a0154604080518d815260208101979097528601949094526060850192909252608084015260a083015260c08201527f73af1d417d82c240fdb6d319b34ad884487c6bf2845d98980cc52ad9171cb4559060e00160405180910390a1506000858152602b602052604081208181556001810182905560028101829055600381018290556004810182905560058101829055600601555b87614797576147978b8a61495c565b81156147d75787156147b1576147b18c611ade8e856128e2565b60006147bd8d836128e2565b90506147ca8d828a614266565b9550611dac945050505050565b5060009c9b505050505050505050505050565b6001600160a01b0381166000908152602760209081526040808320546025909252909120541015611f475760405162461bcd60e51b815260206004820152601a60248201527f5661756c743a20706f6f6c416d6f756e74203c20627566666572000000000000604482015260640161134c565b612d5d8363a9059cbb60e01b848460405160240161487c929190615869565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614c01565b604080518082018252601b81527f5661756c743a20696e73756666696369656e74207265736572766500000000006020808301919091526001600160a01b03851660009081526026909152919091205461490e9183906149c4565b6001600160a01b0383166000908152602660205260409081902091909155517f533cb5ed32be6a90284e96b5747a1bfc2d38fdb5768a6b5f67ff7d62144ed67b90613cd09084908490615869565b6001600160a01b0382166000908152602d6020526040902054808211156149995750506001600160a01b03166000908152602d6020526040812055565b6149a3818361389a565b6001600160a01b039093166000908152602d60205260409020929092555050565b600081848411156149e85760405162461bcd60e51b815260040161134c919061568d565b505050900390565b6000806000614a01898989876113c8565b6000818152602b60205260408120805460038201549394509092614a2e918d918d918d918b918d91613ab1565b9050600080600080614a4f8d876000015488600201548d8a60060154611db7565b87549195508593509150614a67906112528d8461385b565b925050506000828015614a7a5750600082115b15614ab657819050818560050154614a9291906159f7565b600586015588614ab6576000614aa88e846128e2565b9050614ab48e82613ec2565b505b82158015614ac45750600082115b15614b12576001850154614ad8908361389a565b600186015588614afc576000614aee8e846128e2565b9050614afa8e82613dbe565b505b818560050154614b0c9190615a38565b60058601555b8a15614b3a57614b22818c61388e565b6001860154909150614b34908c61389a565b60018601555b84548a1415614b5d576001850154614b5390829061388e565b6000600187015590505b8084811115614b7757614b70828661389a565b9050614bab565b6001860154614b86908661389a565b60018701558915614bab576000614b9d8f876128e2565b9050614ba98f82613ec2565b505b6040805188815285151560208201529081018490527f3ff41bdde87755b687ae83d0221a232b6be51a803330ed9661c1b5d0105e0d8a9060600160405180910390a1909e909d509b505050505050505050505050565b6000614c56826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614cd69092919063ffffffff16565b9050805160001480614c77575080806020019051810190614c7791906158a6565b612d5d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161134c565b6060611422848460008585600080866001600160a01b03168587604051614cfd9190615a77565b60006040518083038185875af1925050503d8060008114614d3a576040519150601f19603f3d011682016040523d82523d6000602084013e614d3f565b606091505b5091509150611dac8783838760608315614db7578251614db0576001600160a01b0385163b614db05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161134c565b5081611422565b6114228383815115614dcc5781518083602001fd5b8060405162461bcd60e51b815260040161134c919061568d565b828054614df2906158c3565b90600052602060002090601f016020900481019282614e145760008555614e5a565b82601f10614e2d5782800160ff19823516178555614e5a565b82800160010185558215614e5a579182015b82811115614e5a578235825591602001919060010190614e3f565b50614e66929150614e6a565b5090565b5b80821115614e665760008155600101614e6b565b6001600160a01b0381168114611f4757600080fd5b600060208284031215614ea657600080fd5b813561125881614e7f565b60008060408385031215614ec457600080fd5b8235614ecf81614e7f565b946020939093013593505050565b8015158114611f4757600080fd5b600060208284031215614efd57600080fd5b813561125881614edd565b600080600060408486031215614f1d57600080fd5b83359250602084013567ffffffffffffffff80821115614f3c57600080fd5b818601915086601f830112614f5057600080fd5b813581811115614f5f57600080fd5b876020828501011115614f7157600080fd5b6020830194508093505050509250925092565b60008060008060808587031215614f9a57600080fd5b8435614fa581614e7f565b93506020850135614fb581614e7f565b92506040850135614fc581614e7f565b91506060850135614fd581614edd565b939692955090935050565b600080600080600080600060e0888a031215614ffb57600080fd5b873561500681614e7f565b96506020880135955060408801359450606088013593506080880135925060a088013561503281614edd565b915060c088013561504281614edd565b8091505092959891949750929550565b60008060008060008060008060006101208a8c03121561507157600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a01356150b581614edd565b809150509295985092959850929598565b6000806000606084860312156150db57600080fd5b8335925060208401356150ed81614e7f565b915060408401356150fd81614e7f565b809150509250925092565b6000806040838503121561511b57600080fd5b823561512681614e7f565b9150602083013561513681614edd565b809150509250929050565b600080600080600060a0868803121561515957600080fd5b853561516481614e7f565b9450602086013561517481614e7f565b9350604086013561518481614e7f565b925060608601359150608086013561519b81614edd565b809150509295509295909350565b6000602082840312156151bb57600080fd5b5035919050565b600080600080600060a086880312156151da57600080fd5b85356151e581614e7f565b94506020860135935060408601359250606086013561520381614edd565b949793965091946080013592915050565b6000806040838503121561522757600080fd5b823561523281614e7f565b9150602083013561513681614e7f565b60008060008060008060c0878903121561525b57600080fd5b863561526681614e7f565b9550602087013561527681614e7f565b9450604087013561528681614e7f565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a0312156152c257600080fd5b87356152cd81614e7f565b965060208801356152dd81614e7f565b955060408801356152ed81614e7f565b9450606088013593506080880135925060a088013561530b81614edd565b915060c088013561504281614e7f565b60008060006060848603121561533057600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561535c57600080fd5b833561536781614e7f565b925060208401356150ed81614e7f565b60008060006060848603121561538c57600080fd5b833561539781614e7f565b95602085013595506040909401359392505050565b6000806000606084860312156153c157600080fd5b83356153cc81614e7f565b925060208401356153dc81614e7f565b915060408401356150fd81614edd565b600080600080600060a0868803121561540457600080fd5b853561540f81614e7f565b9450602086013593506040860135925060608601359150608086013561519b81614edd565b60008060006060848603121561544957600080fd5b833561545481614e7f565b9250602084013561546481614e7f565b929592945050506040919091013590565b600080600080600060a0868803121561548d57600080fd5b853561549881614e7f565b945060208601356154a881614e7f565b935060408601356154b881614e7f565b925060608601356154c881614edd565b9150608086013561519b81614edd565b60008060008060008060c087890312156154f157600080fd5b86356154fc81614e7f565b9550602087013561550c81614e7f565b9450604087013561551c81614e7f565b9350606087013561552c81614edd565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a03121561556157600080fd5b873561556c81614e7f565b96506020880135955060408801359450606088013561558a81614edd565b9699959850939660808101359560a0820135955060c0909101359350915050565b600080600080600060a086880312156155c357600080fd5b85356155ce81614e7f565b945060208601356155de81614e7f565b935060408601356155ee81614e7f565b925060608601356155fe81614edd565b9150608086013561519b81614e7f565b600080600080600060a0868803121561562657600080fd5b853561563181614e7f565b9450602086013561564181614e7f565b9350604086013561565181614e7f565b9250606086013561520381614edd565b60005b8381101561567c578181015183820152602001615664565b8381111561136e5750506000910152565b60208152600082518060208401526156ac816040850160208701615661565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156156f0576156f06156c0565b500290565b600181815b80851115615730578160001904821115615716576157166156c0565b8085161561572357918102915b93841c93908002906156fa565b509250929050565b600082615747575060016112cc565b81615754575060006112cc565b816001811461576a576002811461577457615790565b60019150506112cc565b60ff841115615785576157856156c0565b50506001821b6112cc565b5060208310610133831016604e8410600b84101617156157b3575081810a6112cc565b6157bd83836156f5565b80600019048211156157d1576157d16156c0565b029392505050565b60006112588383615738565b6000602082840312156157f757600080fd5b5051919050565b9889526001600160a01b0397881660208a01529587166040890152939095166060870152608086019190915260a085015291151560c084015260e08301919091526101008201526101200190565b6000600160ff1b821415615862576158626156c0565b5060000390565b6001600160a01b03929092168252602082015260400190565b6000806040838503121561589557600080fd5b505080516020909101519092909150565b6000602082840312156158b857600080fd5b815161125881614edd565b600181811c908216806158d757607f821691505b602082108114156158f857634e487b7160e01b600052602260045260246000fd5b50919050565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115615933576159336156c0565b500190565b60008282101561594a5761594a6156c0565b500390565b600060208083526000845481600182811c91508083168061597157607f831692505b85831081141561598f57634e487b7160e01b85526022600452602485fd5b8786018381526020018180156159ac57600181146159bd576159e8565b60ff198616825287820196506159e8565b60008b81526020902060005b868110156159e2578154848201529085019089016159c9565b83019750505b50949998505050505050505050565b600080821280156001600160ff1b0384900385131615615a1957615a196156c0565b600160ff1b8390038412811615615a3257615a326156c0565b50500190565b60008083128015600160ff1b850184121615615a5657615a566156c0565b6001600160ff1b0384018313811615615a7157615a716156c0565b50500390565b60008251615a89818460208701615661565b919091019291505056fea2646970667358221220d31034695767f2d9a21f36f45e42b2f243a81528b9da425b0ba88c8b8ef9e2da64736f6c634300080c0033