Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 403 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Usdq Supp... | 18078257 | 25 hrs ago | IN | 0 ETH | 0.00003063 | ||||
Set Token Config | 18078251 | 25 hrs ago | IN | 0 ETH | 0.00007065 | ||||
Set Token Config | 18078248 | 25 hrs ago | IN | 0 ETH | 0.00007044 | ||||
Set Token Config | 18078245 | 25 hrs ago | IN | 0 ETH | 0.00007063 | ||||
Set Token Config | 18078235 | 25 hrs ago | IN | 0 ETH | 0.00007064 | ||||
Set Token Config | 18078230 | 25 hrs ago | IN | 0 ETH | 0.00006903 | ||||
Set Token Config | 18078225 | 25 hrs ago | IN | 0 ETH | 0.00007327 | ||||
Batch Withdraw F... | 18053602 | 2 days ago | IN | 0 ETH | 0.00004025 | ||||
Batch Withdraw F... | 17859831 | 10 days ago | IN | 0 ETH | 0.00001484 | ||||
Batch Withdraw F... | 17812440 | 12 days ago | IN | 0 ETH | 0.00003032 | ||||
Update Usdq Supp... | 17812055 | 12 days ago | IN | 0 ETH | 0.00003063 | ||||
Set Token Config | 17812044 | 12 days ago | IN | 0 ETH | 0.00007047 | ||||
Set Token Config | 17812041 | 12 days ago | IN | 0 ETH | 0.00007063 | ||||
Set Token Config | 17812038 | 12 days ago | IN | 0 ETH | 0.00007043 | ||||
Set Token Config | 17812036 | 12 days ago | IN | 0 ETH | 0.00006924 | ||||
Set Token Config | 17812033 | 12 days ago | IN | 0 ETH | 0.00007061 | ||||
Set Token Config | 17812028 | 12 days ago | IN | 0 ETH | 0.00007168 | ||||
Set Token Config | 17811994 | 12 days ago | IN | 0 ETH | 0.00007187 | ||||
Batch Withdraw F... | 17788698 | 12 days ago | IN | 0 ETH | 0.00002463 | ||||
Batch Withdraw F... | 17747878 | 14 days ago | IN | 0 ETH | 0.00005943 | ||||
Batch Withdraw F... | 17738178 | 15 days ago | IN | 0 ETH | 0.00001111 | ||||
Batch Withdraw F... | 17716116 | 15 days ago | IN | 0 ETH | 0.00001982 | ||||
Update Usdq Supp... | 17714150 | 16 days ago | IN | 0 ETH | 0.00003086 | ||||
Set Token Config | 17714140 | 16 days ago | IN | 0 ETH | 0.00007065 | ||||
Set Token Config | 17714130 | 16 days ago | IN | 0 ETH | 0.00007044 |
Loading...
Loading
Contract Name:
Timelock
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 1 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./interfaces/ITimelockTarget.sol"; import "./interfaces/ITimelock.sol"; import "./interfaces/IHandlerTarget.sol"; import "../access/interfaces/IAdmin.sol"; import "../core/interfaces/IVault.sol"; import "../core/interfaces/IVaultUtils.sol"; import "../core/interfaces/IQlpManager.sol"; import "../referrals/interfaces/IReferralStorage.sol"; import "../tokens/interfaces/IYieldToken.sol"; import "../tokens/interfaces/IBaseToken.sol"; import "../tokens/interfaces/IMintable.sol"; import "../tokens/interfaces/IUSDQ.sol"; import "../staking/interfaces/IRewardRouterV2.sol"; import "../libraries/math/SafeMath.sol"; import "../libraries/token/IERC20.sol"; contract Timelock is ITimelock { using SafeMath for uint256; uint256 public constant PRICE_PRECISION = 10 ** 30; uint256 public constant MAX_BUFFER = 5 days; uint256 public constant MAX_FUNDING_RATE_FACTOR = 200; // 0.02% uint256 public constant MAX_LEVERAGE_VALIDATION = 500000; // 50x uint256 public buffer; address public admin; address public tokenManager; address public mintReceiver; address public qlpManager; address public rewardRouter; uint256 public override marginFeeBasisPoints; uint256 public maxMarginFeeBasisPoints; bool public shouldToggleIsLeverageEnabled; mapping (bytes32 => uint256) public pendingActions; mapping (address => bool) public isHandler; mapping (address => bool) public isKeeper; event SignalPendingAction(bytes32 action); event SignalApprove(address token, address spender, uint256 amount, bytes32 action); event SignalWithdrawToken(address target, address token, address receiver, uint256 amount, bytes32 action); event SignalMint(address token, address receiver, uint256 amount, bytes32 action); event SignalSetGov(address target, address gov, bytes32 action); event SignalSetHandler(address target, address handler, bool isActive, bytes32 action); event SignalSetPriceFeed(address vault, address priceFeed, bytes32 action); event SignalRedeemUsdq(address vault, address token, uint256 amount); event SignalVaultSetTokenConfig( address vault, address token, uint256 tokenDecimals, uint256 tokenWeight, uint256 minProfitBps, uint256 maxUsdqAmount, bool isStable, bool isShortable ); event ClearAction(bytes32 action); modifier onlyAdmin() { require(msg.sender == admin, "Timelock: forbidden"); _; } modifier onlyHandlerAndAbove() { require(msg.sender == admin || isHandler[msg.sender], "Timelock: forbidden"); _; } modifier onlyKeeperAndAbove() { require(msg.sender == admin || isHandler[msg.sender] || isKeeper[msg.sender], "Timelock: forbidden"); _; } modifier onlyTokenManager() { require(msg.sender == tokenManager, "Timelock: forbidden"); _; } constructor( address _admin, uint256 _buffer, address _tokenManager, address _mintReceiver, address _qlpManager, address _rewardRouter, uint256 _marginFeeBasisPoints, uint256 _maxMarginFeeBasisPoints ) public { require(_buffer <= MAX_BUFFER, "Timelock: invalid _buffer"); admin = _admin; buffer = _buffer; tokenManager = _tokenManager; mintReceiver = _mintReceiver; qlpManager = _qlpManager; rewardRouter = _rewardRouter; marginFeeBasisPoints = _marginFeeBasisPoints; maxMarginFeeBasisPoints = _maxMarginFeeBasisPoints; } function setAdmin(address _admin) external override onlyTokenManager { admin = _admin; } function setExternalAdmin(address _target, address _admin) external onlyAdmin { require(_target != address(this), "Timelock: invalid _target"); IAdmin(_target).setAdmin(_admin); } function setContractHandler(address _handler, bool _isActive) external onlyAdmin { isHandler[_handler] = _isActive; } function initQlpManager() external onlyAdmin { IQlpManager _qlpManager = IQlpManager(qlpManager); IMintable qlp = IMintable(_qlpManager.qlp()); qlp.setMinter(qlpManager, true); IUSDQ usdq = IUSDQ(_qlpManager.usdq()); usdq.addVault(qlpManager); IVault vault = _qlpManager.vault(); vault.setManager(qlpManager, true); } function initRewardRouter() external onlyAdmin { IRewardRouterV2 _rewardRouter = IRewardRouterV2(rewardRouter); IHandlerTarget(_rewardRouter.feeQlpTracker()).setHandler(rewardRouter, true); IHandlerTarget(_rewardRouter.stakedQlpTracker()).setHandler(rewardRouter, true); IHandlerTarget(qlpManager).setHandler(rewardRouter, true); } function setKeeper(address _keeper, bool _isActive) external onlyAdmin { isKeeper[_keeper] = _isActive; } function setBuffer(uint256 _buffer) external onlyAdmin { require(_buffer <= MAX_BUFFER, "Timelock: invalid _buffer"); require(_buffer > buffer, "Timelock: buffer cannot be decreased"); buffer = _buffer; } function setMaxLeverage(address _vault, uint256 _maxLeverage) external onlyAdmin { require(_maxLeverage > MAX_LEVERAGE_VALIDATION, "Timelock: invalid _maxLeverage"); IVault(_vault).setMaxLeverage(_maxLeverage); } function setFundingRate(address _vault, uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor) external onlyKeeperAndAbove { require(_fundingRateFactor < MAX_FUNDING_RATE_FACTOR, "Timelock: invalid _fundingRateFactor"); require(_stableFundingRateFactor < MAX_FUNDING_RATE_FACTOR, "Timelock: invalid _stableFundingRateFactor"); IVault(_vault).setFundingRate(_fundingInterval, _fundingRateFactor, _stableFundingRateFactor); } function setShouldToggleIsLeverageEnabled(bool _shouldToggleIsLeverageEnabled) external onlyHandlerAndAbove { shouldToggleIsLeverageEnabled = _shouldToggleIsLeverageEnabled; } function setMarginFeeBasisPoints(uint256 _marginFeeBasisPoints, uint256 _maxMarginFeeBasisPoints) external onlyHandlerAndAbove { marginFeeBasisPoints = _marginFeeBasisPoints; maxMarginFeeBasisPoints = _maxMarginFeeBasisPoints; } function setSwapFees( address _vault, uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints ) external onlyKeeperAndAbove { IVault vault = IVault(_vault); vault.setFees( _taxBasisPoints, _stableTaxBasisPoints, _mintBurnFeeBasisPoints, _swapFeeBasisPoints, _stableSwapFeeBasisPoints, maxMarginFeeBasisPoints, vault.liquidationFeeUsd(), vault.minProfitTime(), vault.hasDynamicFees() ); } // assign _marginFeeBasisPoints to this.marginFeeBasisPoints // because enableLeverage would update Vault.marginFeeBasisPoints to this.marginFeeBasisPoints // and disableLeverage would reset the Vault.marginFeeBasisPoints to this.maxMarginFeeBasisPoints function setFees( address _vault, uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees ) external onlyKeeperAndAbove { marginFeeBasisPoints = _marginFeeBasisPoints; IVault(_vault).setFees( _taxBasisPoints, _stableTaxBasisPoints, _mintBurnFeeBasisPoints, _swapFeeBasisPoints, _stableSwapFeeBasisPoints, maxMarginFeeBasisPoints, _liquidationFeeUsd, _minProfitTime, _hasDynamicFees ); } function enableLeverage(address _vault) external override onlyHandlerAndAbove { IVault vault = IVault(_vault); if (shouldToggleIsLeverageEnabled) { vault.setIsLeverageEnabled(true); } vault.setFees( vault.taxBasisPoints(), vault.stableTaxBasisPoints(), vault.mintBurnFeeBasisPoints(), vault.swapFeeBasisPoints(), vault.stableSwapFeeBasisPoints(), marginFeeBasisPoints, vault.liquidationFeeUsd(), vault.minProfitTime(), vault.hasDynamicFees() ); } function disableLeverage(address _vault) external override onlyHandlerAndAbove { IVault vault = IVault(_vault); if (shouldToggleIsLeverageEnabled) { vault.setIsLeverageEnabled(false); } vault.setFees( vault.taxBasisPoints(), vault.stableTaxBasisPoints(), vault.mintBurnFeeBasisPoints(), vault.swapFeeBasisPoints(), vault.stableSwapFeeBasisPoints(), maxMarginFeeBasisPoints, // marginFeeBasisPoints vault.liquidationFeeUsd(), vault.minProfitTime(), vault.hasDynamicFees() ); } function setIsLeverageEnabled(address _vault, bool _isLeverageEnabled) external override onlyHandlerAndAbove { IVault(_vault).setIsLeverageEnabled(_isLeverageEnabled); } function setTokenConfig( address _vault, address _token, uint256 _tokenWeight, uint256 _minProfitBps, uint256 _maxUsdqAmount, uint256 _bufferAmount, uint256 _usdqAmount ) external onlyKeeperAndAbove { require(_minProfitBps <= 500, "Timelock: invalid _minProfitBps"); IVault vault = IVault(_vault); require(vault.whitelistedTokens(_token), "Timelock: token not yet whitelisted"); uint256 tokenDecimals = vault.tokenDecimals(_token); bool isStable = vault.stableTokens(_token); bool isShortable = vault.shortableTokens(_token); IVault(_vault).setTokenConfig( _token, tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdqAmount, isStable, isShortable ); IVault(_vault).setBufferAmount(_token, _bufferAmount); IVault(_vault).setUsdqAmount(_token, _usdqAmount); } function setUsdqAmounts(address _vault, address[] memory _tokens, uint256[] memory _usdqAmounts) external onlyKeeperAndAbove { for (uint256 i = 0; i < _tokens.length; i++) { IVault(_vault).setUsdqAmount(_tokens[i], _usdqAmounts[i]); } } function updateUsdqSupply(uint256 usdqAmount) external onlyKeeperAndAbove { address usdq = IQlpManager(qlpManager).usdq(); uint256 balance = IERC20(usdq).balanceOf(qlpManager); IUSDQ(usdq).addVault(address(this)); if (usdqAmount > balance) { uint256 mintAmount = usdqAmount.sub(balance); IUSDQ(usdq).mint(qlpManager, mintAmount); } else { uint256 burnAmount = balance.sub(usdqAmount); IUSDQ(usdq).burn(qlpManager, burnAmount); } IUSDQ(usdq).removeVault(address(this)); } function setShortsTrackerAveragePriceWeight(uint256 _shortsTrackerAveragePriceWeight) external onlyAdmin { IQlpManager(qlpManager).setShortsTrackerAveragePriceWeight(_shortsTrackerAveragePriceWeight); } function setQlpCooldownDuration(uint256 _cooldownDuration) external onlyAdmin { require(_cooldownDuration < 2 hours, "Timelock: invalid _cooldownDuration"); IQlpManager(qlpManager).setCooldownDuration(_cooldownDuration); } function setMaxGlobalShortSize(address _vault, address _token, uint256 _amount) external onlyAdmin { IVault(_vault).setMaxGlobalShortSize(_token, _amount); } function removeAdmin(address _token, address _account) external onlyAdmin { IYieldToken(_token).removeAdmin(_account); } function setIsSwapEnabled(address _vault, bool _isSwapEnabled) external onlyKeeperAndAbove { IVault(_vault).setIsSwapEnabled(_isSwapEnabled); } function setTier(address _referralStorage, uint256 _tierId, uint256 _totalRebate, uint256 _discountShare) external onlyKeeperAndAbove { IReferralStorage(_referralStorage).setTier(_tierId, _totalRebate, _discountShare); } function setReferrerTier(address _referralStorage, address _referrer, uint256 _tierId) external onlyKeeperAndAbove { IReferralStorage(_referralStorage).setReferrerTier(_referrer, _tierId); } function govSetCodeOwner(address _referralStorage, bytes32 _code, address _newAccount) external onlyKeeperAndAbove { IReferralStorage(_referralStorage).govSetCodeOwner(_code, _newAccount); } function setVaultUtils(address _vault, IVaultUtils _vaultUtils) external onlyAdmin { IVault(_vault).setVaultUtils(_vaultUtils); } function setMaxGasPrice(address _vault, uint256 _maxGasPrice) external onlyAdmin { require(_maxGasPrice > 5000000000, "Invalid _maxGasPrice"); IVault(_vault).setMaxGasPrice(_maxGasPrice); } function withdrawFees(address _vault, address _token, address _receiver) external onlyAdmin { IVault(_vault).withdrawFees(_token, _receiver); } function batchWithdrawFees(address _vault, address[] memory _tokens) external onlyKeeperAndAbove { for (uint256 i = 0; i < _tokens.length; i++) { IVault(_vault).withdrawFees(_tokens[i], admin); } } function setInPrivateLiquidationMode(address _vault, bool _inPrivateLiquidationMode) external onlyAdmin { IVault(_vault).setInPrivateLiquidationMode(_inPrivateLiquidationMode); } function setLiquidator(address _vault, address _liquidator, bool _isActive) external onlyAdmin { IVault(_vault).setLiquidator(_liquidator, _isActive); } function setInPrivateTransferMode(address _token, bool _inPrivateTransferMode) external onlyAdmin { IBaseToken(_token).setInPrivateTransferMode(_inPrivateTransferMode); } function transferIn(address _sender, address _token, uint256 _amount) external onlyAdmin { IERC20(_token).transferFrom(_sender, address(this), _amount); } function signalApprove(address _token, address _spender, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("approve", _token, _spender, _amount)); _setPendingAction(action); emit SignalApprove(_token, _spender, _amount, action); } function approve(address _token, address _spender, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("approve", _token, _spender, _amount)); _validateAction(action); _clearAction(action); IERC20(_token).approve(_spender, _amount); } function signalWithdrawToken(address _target, address _token, address _receiver, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("withdrawToken", _target, _token, _receiver, _amount)); _setPendingAction(action); emit SignalWithdrawToken(_target, _token, _receiver, _amount, action); } function withdrawToken(address _target, address _token, address _receiver, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("withdrawToken", _target, _token, _receiver, _amount)); _validateAction(action); _clearAction(action); IBaseToken(_target).withdrawToken(_token, _receiver, _amount); } function signalSetGov(address _target, address _gov) external override onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setGov", _target, _gov)); _setPendingAction(action); emit SignalSetGov(_target, _gov, action); } function setGov(address _target, address _gov) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setGov", _target, _gov)); _validateAction(action); _clearAction(action); ITimelockTarget(_target).setGov(_gov); } function signalSetHandler(address _target, address _handler, bool _isActive) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setHandler", _target, _handler, _isActive)); _setPendingAction(action); emit SignalSetHandler(_target, _handler, _isActive, action); } function setHandler(address _target, address _handler, bool _isActive) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setHandler", _target, _handler, _isActive)); _validateAction(action); _clearAction(action); IHandlerTarget(_target).setHandler(_handler, _isActive); } function signalSetPriceFeed(address _vault, address _priceFeed) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setPriceFeed", _vault, _priceFeed)); _setPendingAction(action); emit SignalSetPriceFeed(_vault, _priceFeed, action); } function setPriceFeed(address _vault, address _priceFeed) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setPriceFeed", _vault, _priceFeed)); _validateAction(action); _clearAction(action); IVault(_vault).setPriceFeed(_priceFeed); } function signalRedeemUsdq(address _vault, address _token, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("redeemUsdq", _vault, _token, _amount)); _setPendingAction(action); emit SignalRedeemUsdq(_vault, _token, _amount); } function redeemUsdq(address _vault, address _token, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("redeemUsdq", _vault, _token, _amount)); _validateAction(action); _clearAction(action); address usdq = IVault(_vault).usdq(); IVault(_vault).setManager(address(this), true); IUSDQ(usdq).addVault(address(this)); IUSDQ(usdq).mint(address(this), _amount); IERC20(usdq).transfer(address(_vault), _amount); IVault(_vault).sellUSDQ(_token, mintReceiver); IVault(_vault).setManager(address(this), false); IUSDQ(usdq).removeVault(address(this)); } function signalVaultSetTokenConfig( address _vault, address _token, uint256 _tokenDecimals, uint256 _tokenWeight, uint256 _minProfitBps, uint256 _maxUsdqAmount, bool _isStable, bool _isShortable ) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked( "vaultSetTokenConfig", _vault, _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdqAmount, _isStable, _isShortable )); _setPendingAction(action); emit SignalVaultSetTokenConfig( _vault, _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdqAmount, _isStable, _isShortable ); } function vaultSetTokenConfig( address _vault, address _token, uint256 _tokenDecimals, uint256 _tokenWeight, uint256 _minProfitBps, uint256 _maxUsdqAmount, bool _isStable, bool _isShortable ) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked( "vaultSetTokenConfig", _vault, _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdqAmount, _isStable, _isShortable )); _validateAction(action); _clearAction(action); IVault(_vault).setTokenConfig( _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdqAmount, _isStable, _isShortable ); } function cancelAction(bytes32 _action) external onlyAdmin { _clearAction(_action); } function _setPendingAction(bytes32 _action) private { require(pendingActions[_action] == 0, "Timelock: action already signalled"); pendingActions[_action] = block.timestamp.add(buffer); emit SignalPendingAction(_action); } function _validateAction(bytes32 _action) private view { require(pendingActions[_action] != 0, "Timelock: action not signalled"); require(pendingActions[_action] < block.timestamp, "Timelock: action time not yet passed"); } function _clearAction(bytes32 _action) private { require(pendingActions[_action] != 0, "Timelock: invalid _action"); delete pendingActions[_action]; emit ClearAction(_action); } }
//SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IAdmin { function setAdmin(address _admin) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./IVault.sol"; interface IQlpManager { function qlp() external view returns (address); function usdq() external view returns (address); function vault() external view returns (IVault); function cooldownDuration() external returns (uint256); function getAumInUsdq(bool maximise) external view returns (uint256); function lastAddedAt(address _account) external returns (uint256); function addLiquidity(address _token, uint256 _amount, uint256 _minUsdq, uint256 _minQlp) external returns (uint256); function addLiquidityForAccount(address _fundingAccount, address _account, address _token, uint256 _amount, uint256 _minUsdq, uint256 _minQlp) external returns (uint256); function removeLiquidity(address _tokenOut, uint256 _qlpAmount, uint256 _minOut, address _receiver) external returns (uint256); function removeLiquidityForAccount(address _account, address _tokenOut, uint256 _qlpAmount, uint256 _minOut, address _receiver) external returns (uint256); function setShortsTrackerAveragePriceWeight(uint256 _shortsTrackerAveragePriceWeight) external; function setCooldownDuration(uint256 _cooldownDuration) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./IVaultUtils.sol"; interface IVault { function isInitialized() external view returns (bool); function isSwapEnabled() external view returns (bool); function isLeverageEnabled() external view returns (bool); function setVaultUtils(IVaultUtils _vaultUtils) external; function setError(uint256 _errorCode, string calldata _error) external; function router() external view returns (address); function usdq() external view returns (address); function gov() external view returns (address); function vaultUtils() external view returns (IVaultUtils); function whitelistedTokenCount() external view returns (uint256); function maxLeverage() external view returns (uint256); function minProfitTime() external view returns (uint256); function hasDynamicFees() external view returns (bool); function fundingInterval() external view returns (uint256); function totalTokenWeights() external view returns (uint256); function getTargetUsdqAmount(address _token) external view returns (uint256); function inManagerMode() external view returns (bool); function inPrivateLiquidationMode() external view returns (bool); function maxGasPrice() external view returns (uint256); function approvedRouters(address _account, address _router) external view returns (bool); function isLiquidator(address _account) external view returns (bool); function isManager(address _account) external view returns (bool); function minProfitBasisPoints(address _token) external view returns (uint256); function tokenBalances(address _token) external view returns (uint256); function lastFundingTimes(address _token) external view returns (uint256); function setMaxLeverage(uint256 _maxLeverage) external; function setInManagerMode(bool _inManagerMode) external; function setManager(address _manager, bool _isManager) external; function setIsSwapEnabled(bool _isSwapEnabled) external; function setIsLeverageEnabled(bool _isLeverageEnabled) external; function setMaxGasPrice(uint256 _maxGasPrice) external; function setUsdqAmount(address _token, uint256 _amount) external; function setBufferAmount(address _token, uint256 _amount) external; function setMaxGlobalShortSize(address _token, uint256 _amount) external; function setInPrivateLiquidationMode(bool _inPrivateLiquidationMode) external; function setLiquidator(address _liquidator, bool _isActive) external; function setFundingRate(uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor) external; function setFees( uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees ) external; function setTokenConfig( address _token, uint256 _tokenDecimals, uint256 _redemptionBps, uint256 _minProfitBps, uint256 _maxUsdqAmount, bool _isStable, bool _isShortable ) external; function setPriceFeed(address _priceFeed) external; function withdrawFees(address _token, address _receiver) external returns (uint256); function directPoolDeposit(address _token) external; function buyUSDQ(address _token, address _receiver) external returns (uint256); function sellUSDQ(address _token, address _receiver) external returns (uint256); function swap(address _tokenIn, address _tokenOut, address _receiver) external returns (uint256); function increasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external; function decreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external returns (uint256); function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256); function liquidatePosition(address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver) external; function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256); function priceFeed() external view returns (address); function fundingRateFactor() external view returns (uint256); function stableFundingRateFactor() external view returns (uint256); function cumulativeFundingRates(address _token) external view returns (uint256); function getNextFundingRate(address _token) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdqDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); function liquidationFeeUsd() external view returns (uint256); function taxBasisPoints() external view returns (uint256); function stableTaxBasisPoints() external view returns (uint256); function mintBurnFeeBasisPoints() external view returns (uint256); function swapFeeBasisPoints() external view returns (uint256); function stableSwapFeeBasisPoints() external view returns (uint256); function marginFeeBasisPoints() external view returns (uint256); function allWhitelistedTokensLength() external view returns (uint256); function allWhitelistedTokens(uint256) external view returns (address); function whitelistedTokens(address _token) external view returns (bool); function stableTokens(address _token) external view returns (bool); function shortableTokens(address _token) external view returns (bool); function feeReserves(address _token) external view returns (uint256); function globalShortSizes(address _token) external view returns (uint256); function globalShortAveragePrices(address _token) external view returns (uint256); function maxGlobalShortSizes(address _token) external view returns (uint256); function tokenDecimals(address _token) external view returns (uint256); function tokenWeights(address _token) external view returns (uint256); function guaranteedUsd(address _token) external view returns (uint256); function poolAmounts(address _token) external view returns (uint256); function bufferAmounts(address _token) external view returns (uint256); function reservedAmounts(address _token) external view returns (uint256); function usdqAmounts(address _token) external view returns (uint256); function maxUsdqAmounts(address _token) external view returns (uint256); function getRedemptionAmount(address _token, uint256 _usdqAmount) external view returns (uint256); function getMaxPrice(address _token) external view returns (uint256); function getMinPrice(address _token) external view returns (uint256); function getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) external view returns (bool, uint256); function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IVaultUtils { function updateCumulativeFundingRate(address _collateralToken, address _indexToken) external returns (bool); function validateIncreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external view; function validateDecreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external view; function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256); function getEntryFundingRate(address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256); function getPositionFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta) external view returns (uint256); function getFundingFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate) external view returns (uint256); function getBuyUsdqFeeBasisPoints(address _token, uint256 _usdqAmount) external view returns (uint256); function getSellUsdqFeeBasisPoints(address _token, uint256 _usdqAmount) external view returns (uint256); function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdqAmount) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdqDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); function getMaxAmountIn( address _tokenIn, address _tokenOut ) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IHandlerTarget { function isHandler(address _account) external returns (bool); function setHandler(address _handler, bool _isActive) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface ITimelock { function marginFeeBasisPoints() external returns (uint256); function setAdmin(address _admin) external; function enableLeverage(address _vault) external; function disableLeverage(address _vault) external; function setIsLeverageEnabled(address _vault, bool _isLeverageEnabled) external; function signalSetGov(address _target, address _gov) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface ITimelockTarget { function setGov(address _gov) external; function withdrawToken(address _token, address _account, uint256 _amount) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IReferralStorage { function codeOwners(bytes32 _code) external view returns (address); function traderReferralCodes(address _account) external view returns (bytes32); function referrerDiscountShares(address _account) external view returns (uint256); function referrerTiers(address _account) external view returns (uint256); function getTraderReferralInfo(address _account) external view returns (bytes32, address); function setTraderReferralCode(address _account, bytes32 _code) external; function setTier(uint256 _tierId, uint256 _totalRebate, uint256 _discountShare) external; function setReferrerTier(address _referrer, uint256 _tierId) external; function govSetCodeOwner(bytes32 _code, address _newAccount) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IRewardRouterV2 { function feeQlpTracker() external view returns (address); function stakedQlpTracker() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IBaseToken { function totalStaked() external view returns (uint256); function stakedBalance(address _account) external view returns (uint256); function removeAdmin(address _account) external; function setInPrivateTransferMode(bool _inPrivateTransferMode) external; function withdrawToken( address _token, address _account, uint256 _amount ) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IMintable { function isMinter(address _account) external returns (bool); function setMinter(address _minter, bool _isActive) external; function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IUSDQ { function addVault(address _vault) external; function removeVault(address _vault) external; function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IYieldToken { function totalStaked() external view returns (uint256); function stakedBalance(address _account) external view returns (uint256); function removeAdmin(address _account) external; }
{ "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 1 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_buffer","type":"uint256"},{"internalType":"address","name":"_tokenManager","type":"address"},{"internalType":"address","name":"_mintReceiver","type":"address"},{"internalType":"address","name":"_qlpManager","type":"address"},{"internalType":"address","name":"_rewardRouter","type":"address"},{"internalType":"uint256","name":"_marginFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_maxMarginFeeBasisPoints","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"ClearAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalApprove","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalPendingAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SignalRedeemUsdq","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"gov","type":"address"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalSetGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"handler","type":"address"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalSetHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"address","name":"priceFeed","type":"address"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalSetPriceFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenDecimals","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenWeight","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minProfitBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxUsdqAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isStable","type":"bool"},{"indexed":false,"internalType":"bool","name":"isShortable","type":"bool"}],"name":"SignalVaultSetTokenConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalWithdrawToken","type":"event"},{"inputs":[],"name":"MAX_BUFFER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FUNDING_RATE_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LEVERAGE_VALIDATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"batchWithdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_action","type":"bytes32"}],"name":"cancelAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"disableLeverage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"enableLeverage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referralStorage","type":"address"},{"internalType":"bytes32","name":"_code","type":"bytes32"},{"internalType":"address","name":"_newAccount","type":"address"}],"name":"govSetCodeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initQlpManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initRewardRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marginFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMarginFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingActions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qlpManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeemUsdq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buffer","type":"uint256"}],"name":"setBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setContractHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"name":"setExternalAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_taxBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_stableTaxBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_mintBurnFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_swapFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_stableSwapFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_marginFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_liquidationFeeUsd","type":"uint256"},{"internalType":"uint256","name":"_minProfitTime","type":"uint256"},{"internalType":"bool","name":"_hasDynamicFees","type":"bool"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_fundingInterval","type":"uint256"},{"internalType":"uint256","name":"_fundingRateFactor","type":"uint256"},{"internalType":"uint256","name":"_stableFundingRateFactor","type":"uint256"}],"name":"setFundingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_inPrivateLiquidationMode","type":"bool"}],"name":"setInPrivateLiquidationMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_inPrivateTransferMode","type":"bool"}],"name":"setInPrivateTransferMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_isLeverageEnabled","type":"bool"}],"name":"setIsLeverageEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_isSwapEnabled","type":"bool"}],"name":"setIsSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_liquidator","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setLiquidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marginFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_maxMarginFeeBasisPoints","type":"uint256"}],"name":"setMarginFeeBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_maxGasPrice","type":"uint256"}],"name":"setMaxGasPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxGlobalShortSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_maxLeverage","type":"uint256"}],"name":"setMaxLeverage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_priceFeed","type":"address"}],"name":"setPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cooldownDuration","type":"uint256"}],"name":"setQlpCooldownDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referralStorage","type":"address"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_tierId","type":"uint256"}],"name":"setReferrerTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shortsTrackerAveragePriceWeight","type":"uint256"}],"name":"setShortsTrackerAveragePriceWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_shouldToggleIsLeverageEnabled","type":"bool"}],"name":"setShouldToggleIsLeverageEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_taxBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_stableTaxBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_mintBurnFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_swapFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_stableSwapFeeBasisPoints","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referralStorage","type":"address"},{"internalType":"uint256","name":"_tierId","type":"uint256"},{"internalType":"uint256","name":"_totalRebate","type":"uint256"},{"internalType":"uint256","name":"_discountShare","type":"uint256"}],"name":"setTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_tokenWeight","type":"uint256"},{"internalType":"uint256","name":"_minProfitBps","type":"uint256"},{"internalType":"uint256","name":"_maxUsdqAmount","type":"uint256"},{"internalType":"uint256","name":"_bufferAmount","type":"uint256"},{"internalType":"uint256","name":"_usdqAmount","type":"uint256"}],"name":"setTokenConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_usdqAmounts","type":"uint256[]"}],"name":"setUsdqAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"contract IVaultUtils","name":"_vaultUtils","type":"address"}],"name":"setVaultUtils","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldToggleIsLeverageEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"signalApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"signalRedeemUsdq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"name":"signalSetGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"signalSetHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_priceFeed","type":"address"}],"name":"signalSetPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_tokenDecimals","type":"uint256"},{"internalType":"uint256","name":"_tokenWeight","type":"uint256"},{"internalType":"uint256","name":"_minProfitBps","type":"uint256"},{"internalType":"uint256","name":"_maxUsdqAmount","type":"uint256"},{"internalType":"bool","name":"_isStable","type":"bool"},{"internalType":"bool","name":"_isShortable","type":"bool"}],"name":"signalVaultSetTokenConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"signalWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdqAmount","type":"uint256"}],"name":"updateUsdqSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_tokenDecimals","type":"uint256"},{"internalType":"uint256","name":"_tokenWeight","type":"uint256"},{"internalType":"uint256","name":"_minProfitBps","type":"uint256"},{"internalType":"uint256","name":"_maxUsdqAmount","type":"uint256"},{"internalType":"bool","name":"_isStable","type":"bool"},{"internalType":"bool","name":"_isShortable","type":"bool"}],"name":"vaultSetTokenConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200555c3803806200555c83398181016040526101008110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e09097015195969495939492939192909162069780871115620000c4576040805162461bcd60e51b815260206004820152601960248201527f54696d656c6f636b3a20696e76616c6964205f62756666657200000000000000604482015290519081900360640190fd5b600180546001600160a01b03998a166001600160a01b031991821617909155600097909755600280549689169688169690961790955560038054948816948716949094179093556004805492871692861692909217909155600580549190951693169290921790925560065560075561541980620001436000396000f3fe608060405234801561001057600080fd5b50600436106102f65760003560e01c80630b93b584146102fb5780630e0dc426146103335780630e9587f3146103815780631154e808146103b9578063117cf204146103f1578063185051c11461041f578063204bbc541461044d57806321754d9e1461048357806321bd0592146104bf578063227f03eb146104ed57806323aaad121461052557806324ccbe3014610541578063250e4f5114610579578063268959e51461059d5780632a709b14146105cb5780632ba3725a146105d3578063318bc689146105ed578063428976f9146105f557806346ea87af1461061257806347de43e2146106385780634cd23f3b146106705780634f5f6b5e146106ac5780634fdc3a1e146106c957806351a6de0d146106d157806355818294146106ff57806355ef1395146107375780635a3bb9891461076557806361d075691461076d578063689ccee3146107755780636ba42aaa146108a85780636d63c1d0146108ce5780636e5227d4146108f4578063704b6c021461095557806376e112861461097b578063781cc3d3146109a95780637b6f775a146109c65780637f8d853e146109f257806380894d6214610a2857806386803c7214610a565780638a39735a14610a845780638bf22c4614610a8c5780638e34c98f14610ab857806395082d2514610ad7578063996a7a1e14610adf578063996e2bc914610b0d578063a3bd203514610b15578063adc7ea3714610b32578063afd14deb14610b4f578063bc476dfd14610b57578063c142940a14610b85578063c7bb26a014610bbb578063cd2b123014610bc3578063d1b9e85314610bf1578063d3c87bbb14610c1f578063da76231614610c45578063db1c844114610c89578063dce6e18d14610ce2578063df3a66d914610d18578063e1f21c6714610d4e578063e21b459114610d84578063e30569e514610da7578063e3cbeb0f14610dc4578063e4652f4914610e1d578063e8ae227114610e53578063edaafe2014610f04578063f851a44014610f0c575b600080fd5b6103316004803603606081101561031157600080fd5b506001600160a01b03813581169160208101359091169060400135610f14565b005b610331600480360360e081101561034957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c00135611012565b6103316004803603606081101561039757600080fd5b506001600160a01b03813581169160208101358216916040909101351661148b565b610331600480360360608110156103cf57600080fd5b506001600160a01b038135811691602081013590911690604001351515611569565b6103316004803603604081101561040757600080fd5b506001600160a01b038135169060200135151561169a565b6103316004803603604081101561043557600080fd5b506001600160a01b038135169060200135151561177f565b6103316004803603606081101561046357600080fd5b506001600160a01b038135811691602081013591604090910135166117f7565b6103316004803603608081101561049957600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356118ec565b610331600480360360408110156104d557600080fd5b506001600160a01b0381351690602001351515611a37565b6103316004803603608081101561050357600080fd5b506001600160a01b038135169060208101359060408101359060600135611acc565b61052d611c21565b604080519115158252519081900360200190f35b6103316004803603606081101561055757600080fd5b506001600160a01b038135811691602081013590911690604001351515611c2a565b610581611d33565b604080516001600160a01b039092168252519081900360200190f35b610331600480360360408110156105b357600080fd5b506001600160a01b0381358116916020013516611d42565b610581611dde565b6105db611ded565b60408051918252519081900360200190f35b6105db611df4565b6103316004803603602081101561060b57600080fd5b5035611dfa565b61052d6004803603602081101561062857600080fd5b50356001600160a01b0316611ee6565b6103316004803603606081101561064e57600080fd5b506001600160a01b038135811691602081013590911690604001351515611efb565b6103316004803603608081101561068657600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611fa1565b610331600480360360208110156106c257600080fd5b50356120bc565b610331612154565b610331600480360360408110156106e757600080fd5b506001600160a01b0381358116916020013516612418565b6103316004803603608081101561071557600080fd5b506001600160a01b038135169060208101359060408101359060600135612512565b6103316004803603604081101561074d57600080fd5b506001600160a01b03813581169160200135166125e9565b6105816126df565b6105db6126ee565b6103316004803603606081101561078b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107b557600080fd5b8201836020820111156107c757600080fd5b803590602001918460208302840111600160201b831117156107e857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561083757600080fd5b82018360208201111561084957600080fd5b803590602001918460208302840111600160201b8311171561086a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126f5945050505050565b61052d600480360360208110156108be57600080fd5b50356001600160a01b0316612829565b610331600480360360208110156108e457600080fd5b50356001600160a01b031661283e565b610331600480360361014081101561090b57600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612cf4565b6103316004803603602081101561096b57600080fd5b50356001600160a01b0316612e24565b6103316004803603604081101561099157600080fd5b506001600160a01b0381358116916020013516612e93565b610331600480360360208110156109bf57600080fd5b5035612f92565b610331600480360360408110156109dc57600080fd5b506001600160a01b038135169060200135612feb565b61033160048036036060811015610a0857600080fd5b506001600160a01b038135811691602081013590911690604001356130d5565b61033160048036036040811015610a3e57600080fd5b506001600160a01b03813581169160200135166134d3565b61033160048036036040811015610a6c57600080fd5b506001600160a01b03813516906020013515156135c9565b6105db61365e565b61033160048036036040811015610aa257600080fd5b506001600160a01b038135169060200135613663565b61033160048036036020811015610ace57600080fd5b50351515613746565b6105db6137c0565b61033160048036036040811015610af557600080fd5b506001600160a01b03813581169160200135166137d0565b6105db6138c1565b61033160048036036020811015610b2b57600080fd5b50356138c7565b61033160048036036020811015610b4857600080fd5b5035613bf8565b610331613cde565b61033160048036036040811015610b6d57600080fd5b506001600160a01b0381358116916020013516613f34565b61033160048036036060811015610b9b57600080fd5b506001600160a01b03813581169160208101359091169060400135613fd0565b6105816140a8565b61033160048036036040811015610bd957600080fd5b506001600160a01b03813516906020013515156140b7565b61033160048036036040811015610c0757600080fd5b506001600160a01b0381351690602001351515614166565b61033160048036036020811015610c3557600080fd5b50356001600160a01b03166141de565b610331600480360360c0811015610c5b57600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135614518565b6103316004803603610100811015610ca057600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614789565b61033160048036036060811015610cf857600080fd5b506001600160a01b038135811691602081013590911690604001356148e6565b61033160048036036060811015610d2e57600080fd5b506001600160a01b038135811691602081013590911690604001356149e8565b61033160048036036060811015610d6457600080fd5b506001600160a01b03813581169160208101359091169060400135614a8c565b61033160048036036040811015610d9a57600080fd5b5080359060200135614bc1565b6105db60048036036020811015610dbd57600080fd5b5035614c33565b6103316004803603610100811015610ddb57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614c45565b61033160048036036060811015610e3357600080fd5b506001600160a01b03813581169160208101359091169060400135614dca565b61033160048036036040811015610e6957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610e9357600080fd5b820183602082011115610ea557600080fd5b803590602001918460208302840111600160201b83111715610ec657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614e70945050505050565b6105db614fac565b610581614fb2565b6001546001600160a01b03163314610f61576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516972656465656d5573647160b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015260528083018590528351808403909101815260729092019092528051910120610fc281614fc1565b604080516001600160a01b0380871682528516602082015280820184905290517fe0714afe218c10983b185b03ba760606e3328b13199a0bc641a9235545f9f05b9181900360600190a150505050565b6001546001600160a01b031633148061103a5750336000908152600a602052604090205460ff165b806110545750336000908152600b602052604090205460ff165b611093576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6101f48411156110ea576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b505161119b5760405162461bcd60e51b81526004018080602001828103825260238152602001806153586023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156111ea57600080fd5b505afa1580156111fe573d6000803e3d6000fd5b505050506040513d602081101561121457600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d602081101561129057600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050508a6001600160a01b031663379789b58b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b031633146114d8576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b5050505050565b6001546001600160a01b031633146115b6576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b6052830152825160338184030181526053909201909252805191012061161a81615065565b61162381615111565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b03163314806116c25750336000908152600a602052604090205460ff165b806116dc5750336000908152600b602052604090205460ff165b61171b576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b505050505050565b6001546001600160a01b031633146117cc576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001546001600160a01b031633148061181f5750336000908152600a602052604090205460ff165b806118395750336000908152600b602052604090205460ff165b611878576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b03163314611939576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b166055830152606980830185905283518084039091018152608990920190925280519101206119a781615065565b6119b081615111565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611a1857600080fd5b505af1158015611a2c573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611a84576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b0316331480611af45750336000908152600a602052604090205460ff165b80611b0e5750336000908152600b602052604090205460ff165b611b4d576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60c88210611b8c5760405162461bcd60e51b81526004018080602001828103825260248152602001806152ef6024913960400191505060405180910390fd5b60c88110611bcb5760405162461bcd60e51b815260040180806020018281038252602a8152602001806153e3602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b15801561167c57600080fd5b60085460ff1681565b6001546001600160a01b03163314611c77576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611cdb81614fc1565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6004546001600160a01b031681565b6001546001600160a01b03163314611d8f576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561176357600080fd5b6002546001600160a01b031681565b6207a12081565b60065481565b6001546001600160a01b03163314611e47576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b611c208110611e875760405162461bcd60e51b81526004018080602001828103825260238152602001806153136023913960400191505060405180910390fd5b600480546040805163966be07560e01b8152928301849052516001600160a01b039091169163966be07591602480830192600092919082900301818387803b158015611ed257600080fd5b505af1158015611562573d6000803e3d6000fd5b600a6020526000908152604090205460ff1681565b6001546001600160a01b03163314611f48576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b03163314611fee576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061205c81614fc1565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b6001546001600160a01b03163314612109576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60048054604080516327afb5af60e11b8152928301849052516001600160a01b0390911691634f5f6b5e91602480830192600092919082900301818387803b158015611ed257600080fd5b6001546001600160a01b031633146121a1576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6004805460408051637135577d60e11b815290516001600160a01b0390921692600092849263e26aaefa9281810192602092909190829003018186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d602081101561221457600080fd5b5051600480546040805163cf456ae760e01b81526001600160a01b0392831693810193909352600160248401525192935083169163cf456ae79160448082019260009290919082900301818387803b15801561226f57600080fd5b505af1158015612283573d6000803e3d6000fd5b505050506000826001600160a01b031663566231856040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c257600080fd5b505afa1580156122d6573d6000803e3d6000fd5b505050506040513d60208110156122ec57600080fd5b505160048054604080516312b5ad0160e11b81526001600160a01b03928316938101939093525192935083169163256b5a029160248082019260009290919082900301818387803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506000836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561239357600080fd5b505afa1580156123a7573d6000803e3d6000fd5b505050506040513d60208110156123bd57600080fd5b505160048054604080516352f4877760e11b81526001600160a01b0392831693810193909352600160248401525192935083169163a5e90eee9160448082019260009290919082900301818387803b15801561167c57600080fd5b6001546001600160a01b03163314612465576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e90920190925280519101206124ba81615065565b6124c381615111565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b031633148061253a5750336000908152600a602052604090205460ff165b806125545750336000908152600b602052604090205460ff165b612593576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b15801561167c57600080fd5b6001546001600160a01b03163314612636576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6001600160a01b038216301415612690576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561176357600080fd5b6005546001600160a01b031681565b6206978081565b6001546001600160a01b031633148061271d5750336000908152600a602052604090205460ff165b806127375750336000908152600b602052604090205460ff165b612776576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60005b825181101561282357836001600160a01b031663379789b584838151811061279d57fe5b60200260200101518484815181106127b157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b5050600190920191506127799050565b50505050565b600b6020526000908152604090205460ff1681565b6001546001600160a01b03163314806128665750336000908152600a602052604090205460ff165b6128a5576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600854819060ff16156129135760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b1580156128fa57600080fd5b505af115801561290e573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561295b57600080fd5b505afa15801561296f573d6000803e3d6000fd5b505050506040513d602081101561298557600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d60208110156129f157600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b158015612a3357600080fd5b505afa158015612a47573d6000803e3d6000fd5b505050506040513d6020811015612a5d57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015612a9f57600080fd5b505afa158015612ab3573d6000803e3d6000fd5b505050506040513d6020811015612ac957600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d6020811015612b3557600080fd5b5051600654604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612b7a57600080fd5b505afa158015612b8e573d6000803e3d6000fd5b505050506040513d6020811015612ba457600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612be657600080fd5b505afa158015612bfa573d6000803e3d6000fd5b505050506040513d6020811015612c1057600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612c5257600080fd5b505afa158015612c66573d6000803e3d6000fd5b505050506040513d6020811015612c7c57600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b15801561176357600080fd5b6001546001600160a01b0316331480612d1c5750336000908152600a602052604090205460ff165b80612d365750336000908152600b602052604090205460ff165b612d75576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6006849055600754604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612e0057600080fd5b505af1158015612e14573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612e71576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612ee0576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b16828401528251603481840301815260549092019092528051910120612f3a81615065565b612f4381615111565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b03163314612fdf576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b612fe881615111565b50565b6001546001600160a01b03163314613038576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6207a120811161308f576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b03163314613122576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516972656465656d5573647160b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061318381615065565b61318c81615111565b6000846001600160a01b031663566231856040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c757600080fd5b505afa1580156131db573d6000803e3d6000fd5b505050506040513d60208110156131f157600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b15801561324557600080fd5b505af1158015613259573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b15801561330a57600080fd5b505af115801561331e573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b50506003546040805163058cd2db60e51b81526001600160a01b038781166004830152928316602482015290519187169163b19a5b60916044808201926020929091908290030181600087803b1580156133fc57600080fd5b505af1158015613410573d6000803e3d6000fd5b505050506040513d602081101561342657600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561347457600080fd5b505af1158015613488573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611a1857600080fd5b6001546001600160a01b03163314613520576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061357a81614fc1565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314613616576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b60c881565b6001546001600160a01b031633146136b0576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b64012a05f2008111613700576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b031633148061376e5750336000908152600a602052604090205460ff165b6137ad576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6008805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b0316331461381d576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061387281614fc1565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60075481565b6001546001600160a01b03163314806138ef5750336000908152600a602052604090205460ff165b806139095750336000908152600b602052604090205460ff165b613948576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663566231856040518163ffffffff1660e01b815260040160206040518083038186803b15801561399857600080fd5b505afa1580156139ac573d6000803e3d6000fd5b505050506040513d60208110156139c257600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b158015613a1857600080fd5b505afa158015613a2c573d6000803e3d6000fd5b505050506040513d6020811015613a4257600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b158015613a8f57600080fd5b505af1158015613aa3573d6000803e3d6000fd5b5050505080831115613b32576000613abb84836151b6565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b158015613b1457600080fd5b505af1158015613b28573d6000803e3d6000fd5b5050505050613bb1565b6000613b3e82856151b6565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b158015613b9757600080fd5b505af1158015613bab573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b1580156118cf57600080fd5b6001546001600160a01b03163314613c45576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b62069780811115613c99576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b6000548111613cd95760405162461bcd60e51b815260040180806020018281038252602481526020018061539f6024913960400191505060405180910390fd5b600055565b6001546001600160a01b03163314613d2b576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60055460408051635242abb960e01b815290516001600160a01b03909216918291635242abb9916004808301926020929190829003018186803b158015613d7157600080fd5b505afa158015613d85573d6000803e3d6000fd5b505050506040513d6020811015613d9b57600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b158015613df257600080fd5b505af1158015613e06573d6000803e3d6000fd5b50505050806001600160a01b031663c67c2bb76040518163ffffffff1660e01b815260040160206040518083038186803b158015613e4357600080fd5b505afa158015613e57573d6000803e3d6000fd5b505050506040513d6020811015613e6d57600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b158015613ec457600080fd5b505af1158015613ed8573d6000803e3d6000fd5b50506004805460055460408051639cb7de4b60e01b81526001600160a01b0392831694810194909452600160248501525191169350639cb7de4b9250604480830192600092919082900301818387803b158015611ed257600080fd5b6001546001600160a01b03163314613f81576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b0316331480613ff85750336000908152600a602052604090205460ff165b806140125750336000908152600b602052604090205460ff165b614051576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156118cf57600080fd5b6003546001600160a01b031681565b6001546001600160a01b03163314806140df5750336000908152600a602052604090205460ff165b61411e576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b031633146141b3576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806142065750336000908152600a602052604090205460ff165b614245576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600854819060ff16156142b15760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561429857600080fd5b505af11580156142ac573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142f957600080fd5b505afa15801561430d573d6000803e3d6000fd5b505050506040513d602081101561432357600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b15801561436557600080fd5b505afa158015614379573d6000803e3d6000fd5b505050506040513d602081101561438f57600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b1580156143d157600080fd5b505afa1580156143e5573d6000803e3d6000fd5b505050506040513d60208110156143fb57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b15801561443d57600080fd5b505afa158015614451573d6000803e3d6000fd5b505050506040513d602081101561446757600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b1580156144a957600080fd5b505afa1580156144bd573d6000803e3d6000fd5b505050506040513d60208110156144d357600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612b7a57600080fd5b6001546001600160a01b03163314806145405750336000908152600a602052604090205460ff165b8061455a5750336000908152600b602052604090205460ff165b614599576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600754886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ee57600080fd5b505afa158015614602573d6000803e3d6000fd5b505050506040513d602081101561461857600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b15801561465a57600080fd5b505afa15801561466e573d6000803e3d6000fd5b505050506040513d602081101561468457600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b1580156146c657600080fd5b505afa1580156146da573d6000803e3d6000fd5b505050506040513d60208110156146f057600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b15801561476857600080fd5b505af115801561477c573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b031633146147d6576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd909201909252805191012061486b81614fc1565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b03163314614933576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f909201909252805191012061499181614fc1565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b03163314614a35576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b03163314614ad9576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f9092019092528051910120614b3781615065565b614b4081615111565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015614b9757600080fd5b505af1158015614bab573d6000803e3d6000fd5b505050506040513d602081101561177757600080fd5b6001546001600160a01b0316331480614be95750336000908152600a602052604090205460ff165b614c28576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600691909155600755565b60096020526000908152604090205481565b6001546001600160a01b03163314614c92576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614d2781615065565b614d3081615111565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b158015614da757600080fd5b505af1158015614dbb573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b03163314614e17576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b15801561153857600080fd5b6001546001600160a01b0316331480614e985750336000908152600a602052604090205460ff165b80614eb25750336000908152600b602052604090205460ff165b614ef1576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60005b8151811015614fa757826001600160a01b031663f2555278838381518110614f1857fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b158015614f7357600080fd5b505af1158015614f87573d6000803e3d6000fd5b505050506040513d6020811015614f9d57600080fd5b5050600101614ef4565b505050565b60005481565b6001546001600160a01b031681565b6000818152600960205260409020541561500c5760405162461bcd60e51b81526004018080602001828103825260228152602001806153366022913960400191505060405180910390fd5b60005461501a9042906151ff565b60008281526009602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000818152600960205260409020546150c5576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b6000818152600960205260409020544211612fe85760405162461bcd60e51b815260040180806020018281038252602481526020018061537b6024913960400191505060405180910390fd5b60008181526009602052604090205461516d576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b600081815260096020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b60006151f883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615257565b9392505050565b6000828201838110156151f8576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600081848411156152e65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152ab578181015183820152602001615293565b50505050905090810190601f1680156152d85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20696e76616c6964205f636f6f6c646f776e4475726174696f6e54696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a206275666665722063616e6e6f742062652064656372656173656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a164736f6c634300060c000a00000000000000000000000026c2710e3c232461159a4564677a24a80ab2253c000000000000000000000000000000000000000000000000000000000001518000000000000000000000000064486300799ee3c8a1391abaaf112782a01dd6f100000000000000000000000064486300799ee3c8a1391abaaf112782a01dd6f100000000000000000000000087bcd3914ed3dcd5886ba1c0f0da25150b56fe54000000000000000000000000527d5cffd31a21f1c09c4cebf440e218a9fd8683000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000096
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102f65760003560e01c80630b93b584146102fb5780630e0dc426146103335780630e9587f3146103815780631154e808146103b9578063117cf204146103f1578063185051c11461041f578063204bbc541461044d57806321754d9e1461048357806321bd0592146104bf578063227f03eb146104ed57806323aaad121461052557806324ccbe3014610541578063250e4f5114610579578063268959e51461059d5780632a709b14146105cb5780632ba3725a146105d3578063318bc689146105ed578063428976f9146105f557806346ea87af1461061257806347de43e2146106385780634cd23f3b146106705780634f5f6b5e146106ac5780634fdc3a1e146106c957806351a6de0d146106d157806355818294146106ff57806355ef1395146107375780635a3bb9891461076557806361d075691461076d578063689ccee3146107755780636ba42aaa146108a85780636d63c1d0146108ce5780636e5227d4146108f4578063704b6c021461095557806376e112861461097b578063781cc3d3146109a95780637b6f775a146109c65780637f8d853e146109f257806380894d6214610a2857806386803c7214610a565780638a39735a14610a845780638bf22c4614610a8c5780638e34c98f14610ab857806395082d2514610ad7578063996a7a1e14610adf578063996e2bc914610b0d578063a3bd203514610b15578063adc7ea3714610b32578063afd14deb14610b4f578063bc476dfd14610b57578063c142940a14610b85578063c7bb26a014610bbb578063cd2b123014610bc3578063d1b9e85314610bf1578063d3c87bbb14610c1f578063da76231614610c45578063db1c844114610c89578063dce6e18d14610ce2578063df3a66d914610d18578063e1f21c6714610d4e578063e21b459114610d84578063e30569e514610da7578063e3cbeb0f14610dc4578063e4652f4914610e1d578063e8ae227114610e53578063edaafe2014610f04578063f851a44014610f0c575b600080fd5b6103316004803603606081101561031157600080fd5b506001600160a01b03813581169160208101359091169060400135610f14565b005b610331600480360360e081101561034957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c00135611012565b6103316004803603606081101561039757600080fd5b506001600160a01b03813581169160208101358216916040909101351661148b565b610331600480360360608110156103cf57600080fd5b506001600160a01b038135811691602081013590911690604001351515611569565b6103316004803603604081101561040757600080fd5b506001600160a01b038135169060200135151561169a565b6103316004803603604081101561043557600080fd5b506001600160a01b038135169060200135151561177f565b6103316004803603606081101561046357600080fd5b506001600160a01b038135811691602081013591604090910135166117f7565b6103316004803603608081101561049957600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356118ec565b610331600480360360408110156104d557600080fd5b506001600160a01b0381351690602001351515611a37565b6103316004803603608081101561050357600080fd5b506001600160a01b038135169060208101359060408101359060600135611acc565b61052d611c21565b604080519115158252519081900360200190f35b6103316004803603606081101561055757600080fd5b506001600160a01b038135811691602081013590911690604001351515611c2a565b610581611d33565b604080516001600160a01b039092168252519081900360200190f35b610331600480360360408110156105b357600080fd5b506001600160a01b0381358116916020013516611d42565b610581611dde565b6105db611ded565b60408051918252519081900360200190f35b6105db611df4565b6103316004803603602081101561060b57600080fd5b5035611dfa565b61052d6004803603602081101561062857600080fd5b50356001600160a01b0316611ee6565b6103316004803603606081101561064e57600080fd5b506001600160a01b038135811691602081013590911690604001351515611efb565b6103316004803603608081101561068657600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611fa1565b610331600480360360208110156106c257600080fd5b50356120bc565b610331612154565b610331600480360360408110156106e757600080fd5b506001600160a01b0381358116916020013516612418565b6103316004803603608081101561071557600080fd5b506001600160a01b038135169060208101359060408101359060600135612512565b6103316004803603604081101561074d57600080fd5b506001600160a01b03813581169160200135166125e9565b6105816126df565b6105db6126ee565b6103316004803603606081101561078b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107b557600080fd5b8201836020820111156107c757600080fd5b803590602001918460208302840111600160201b831117156107e857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561083757600080fd5b82018360208201111561084957600080fd5b803590602001918460208302840111600160201b8311171561086a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126f5945050505050565b61052d600480360360208110156108be57600080fd5b50356001600160a01b0316612829565b610331600480360360208110156108e457600080fd5b50356001600160a01b031661283e565b610331600480360361014081101561090b57600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612cf4565b6103316004803603602081101561096b57600080fd5b50356001600160a01b0316612e24565b6103316004803603604081101561099157600080fd5b506001600160a01b0381358116916020013516612e93565b610331600480360360208110156109bf57600080fd5b5035612f92565b610331600480360360408110156109dc57600080fd5b506001600160a01b038135169060200135612feb565b61033160048036036060811015610a0857600080fd5b506001600160a01b038135811691602081013590911690604001356130d5565b61033160048036036040811015610a3e57600080fd5b506001600160a01b03813581169160200135166134d3565b61033160048036036040811015610a6c57600080fd5b506001600160a01b03813516906020013515156135c9565b6105db61365e565b61033160048036036040811015610aa257600080fd5b506001600160a01b038135169060200135613663565b61033160048036036020811015610ace57600080fd5b50351515613746565b6105db6137c0565b61033160048036036040811015610af557600080fd5b506001600160a01b03813581169160200135166137d0565b6105db6138c1565b61033160048036036020811015610b2b57600080fd5b50356138c7565b61033160048036036020811015610b4857600080fd5b5035613bf8565b610331613cde565b61033160048036036040811015610b6d57600080fd5b506001600160a01b0381358116916020013516613f34565b61033160048036036060811015610b9b57600080fd5b506001600160a01b03813581169160208101359091169060400135613fd0565b6105816140a8565b61033160048036036040811015610bd957600080fd5b506001600160a01b03813516906020013515156140b7565b61033160048036036040811015610c0757600080fd5b506001600160a01b0381351690602001351515614166565b61033160048036036020811015610c3557600080fd5b50356001600160a01b03166141de565b610331600480360360c0811015610c5b57600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135614518565b6103316004803603610100811015610ca057600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614789565b61033160048036036060811015610cf857600080fd5b506001600160a01b038135811691602081013590911690604001356148e6565b61033160048036036060811015610d2e57600080fd5b506001600160a01b038135811691602081013590911690604001356149e8565b61033160048036036060811015610d6457600080fd5b506001600160a01b03813581169160208101359091169060400135614a8c565b61033160048036036040811015610d9a57600080fd5b5080359060200135614bc1565b6105db60048036036020811015610dbd57600080fd5b5035614c33565b6103316004803603610100811015610ddb57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614c45565b61033160048036036060811015610e3357600080fd5b506001600160a01b03813581169160208101359091169060400135614dca565b61033160048036036040811015610e6957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610e9357600080fd5b820183602082011115610ea557600080fd5b803590602001918460208302840111600160201b83111715610ec657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614e70945050505050565b6105db614fac565b610581614fb2565b6001546001600160a01b03163314610f61576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516972656465656d5573647160b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015260528083018590528351808403909101815260729092019092528051910120610fc281614fc1565b604080516001600160a01b0380871682528516602082015280820184905290517fe0714afe218c10983b185b03ba760606e3328b13199a0bc641a9235545f9f05b9181900360600190a150505050565b6001546001600160a01b031633148061103a5750336000908152600a602052604090205460ff165b806110545750336000908152600b602052604090205460ff165b611093576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6101f48411156110ea576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b505161119b5760405162461bcd60e51b81526004018080602001828103825260238152602001806153586023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156111ea57600080fd5b505afa1580156111fe573d6000803e3d6000fd5b505050506040513d602081101561121457600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d602081101561129057600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050508a6001600160a01b031663379789b58b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b031633146114d8576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b5050505050565b6001546001600160a01b031633146115b6576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b6052830152825160338184030181526053909201909252805191012061161a81615065565b61162381615111565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b03163314806116c25750336000908152600a602052604090205460ff165b806116dc5750336000908152600b602052604090205460ff165b61171b576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b505050505050565b6001546001600160a01b031633146117cc576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001546001600160a01b031633148061181f5750336000908152600a602052604090205460ff165b806118395750336000908152600b602052604090205460ff165b611878576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b03163314611939576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b166055830152606980830185905283518084039091018152608990920190925280519101206119a781615065565b6119b081615111565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611a1857600080fd5b505af1158015611a2c573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611a84576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b0316331480611af45750336000908152600a602052604090205460ff165b80611b0e5750336000908152600b602052604090205460ff165b611b4d576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60c88210611b8c5760405162461bcd60e51b81526004018080602001828103825260248152602001806152ef6024913960400191505060405180910390fd5b60c88110611bcb5760405162461bcd60e51b815260040180806020018281038252602a8152602001806153e3602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b15801561167c57600080fd5b60085460ff1681565b6001546001600160a01b03163314611c77576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611cdb81614fc1565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6004546001600160a01b031681565b6001546001600160a01b03163314611d8f576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561176357600080fd5b6002546001600160a01b031681565b6207a12081565b60065481565b6001546001600160a01b03163314611e47576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b611c208110611e875760405162461bcd60e51b81526004018080602001828103825260238152602001806153136023913960400191505060405180910390fd5b600480546040805163966be07560e01b8152928301849052516001600160a01b039091169163966be07591602480830192600092919082900301818387803b158015611ed257600080fd5b505af1158015611562573d6000803e3d6000fd5b600a6020526000908152604090205460ff1681565b6001546001600160a01b03163314611f48576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b03163314611fee576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061205c81614fc1565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b6001546001600160a01b03163314612109576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60048054604080516327afb5af60e11b8152928301849052516001600160a01b0390911691634f5f6b5e91602480830192600092919082900301818387803b158015611ed257600080fd5b6001546001600160a01b031633146121a1576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6004805460408051637135577d60e11b815290516001600160a01b0390921692600092849263e26aaefa9281810192602092909190829003018186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d602081101561221457600080fd5b5051600480546040805163cf456ae760e01b81526001600160a01b0392831693810193909352600160248401525192935083169163cf456ae79160448082019260009290919082900301818387803b15801561226f57600080fd5b505af1158015612283573d6000803e3d6000fd5b505050506000826001600160a01b031663566231856040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c257600080fd5b505afa1580156122d6573d6000803e3d6000fd5b505050506040513d60208110156122ec57600080fd5b505160048054604080516312b5ad0160e11b81526001600160a01b03928316938101939093525192935083169163256b5a029160248082019260009290919082900301818387803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506000836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561239357600080fd5b505afa1580156123a7573d6000803e3d6000fd5b505050506040513d60208110156123bd57600080fd5b505160048054604080516352f4877760e11b81526001600160a01b0392831693810193909352600160248401525192935083169163a5e90eee9160448082019260009290919082900301818387803b15801561167c57600080fd5b6001546001600160a01b03163314612465576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e90920190925280519101206124ba81615065565b6124c381615111565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b031633148061253a5750336000908152600a602052604090205460ff165b806125545750336000908152600b602052604090205460ff165b612593576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b15801561167c57600080fd5b6001546001600160a01b03163314612636576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6001600160a01b038216301415612690576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561176357600080fd5b6005546001600160a01b031681565b6206978081565b6001546001600160a01b031633148061271d5750336000908152600a602052604090205460ff165b806127375750336000908152600b602052604090205460ff165b612776576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60005b825181101561282357836001600160a01b031663379789b584838151811061279d57fe5b60200260200101518484815181106127b157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b5050600190920191506127799050565b50505050565b600b6020526000908152604090205460ff1681565b6001546001600160a01b03163314806128665750336000908152600a602052604090205460ff165b6128a5576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600854819060ff16156129135760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b1580156128fa57600080fd5b505af115801561290e573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561295b57600080fd5b505afa15801561296f573d6000803e3d6000fd5b505050506040513d602081101561298557600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d60208110156129f157600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b158015612a3357600080fd5b505afa158015612a47573d6000803e3d6000fd5b505050506040513d6020811015612a5d57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015612a9f57600080fd5b505afa158015612ab3573d6000803e3d6000fd5b505050506040513d6020811015612ac957600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d6020811015612b3557600080fd5b5051600654604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612b7a57600080fd5b505afa158015612b8e573d6000803e3d6000fd5b505050506040513d6020811015612ba457600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612be657600080fd5b505afa158015612bfa573d6000803e3d6000fd5b505050506040513d6020811015612c1057600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612c5257600080fd5b505afa158015612c66573d6000803e3d6000fd5b505050506040513d6020811015612c7c57600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b15801561176357600080fd5b6001546001600160a01b0316331480612d1c5750336000908152600a602052604090205460ff165b80612d365750336000908152600b602052604090205460ff165b612d75576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6006849055600754604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612e0057600080fd5b505af1158015612e14573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612e71576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612ee0576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b16828401528251603481840301815260549092019092528051910120612f3a81615065565b612f4381615111565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b03163314612fdf576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b612fe881615111565b50565b6001546001600160a01b03163314613038576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6207a120811161308f576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b03163314613122576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516972656465656d5573647160b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061318381615065565b61318c81615111565b6000846001600160a01b031663566231856040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c757600080fd5b505afa1580156131db573d6000803e3d6000fd5b505050506040513d60208110156131f157600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b15801561324557600080fd5b505af1158015613259573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b15801561330a57600080fd5b505af115801561331e573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b50506003546040805163058cd2db60e51b81526001600160a01b038781166004830152928316602482015290519187169163b19a5b60916044808201926020929091908290030181600087803b1580156133fc57600080fd5b505af1158015613410573d6000803e3d6000fd5b505050506040513d602081101561342657600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561347457600080fd5b505af1158015613488573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611a1857600080fd5b6001546001600160a01b03163314613520576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061357a81614fc1565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314613616576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b60c881565b6001546001600160a01b031633146136b0576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b64012a05f2008111613700576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b031633148061376e5750336000908152600a602052604090205460ff165b6137ad576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6008805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b0316331461381d576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061387281614fc1565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60075481565b6001546001600160a01b03163314806138ef5750336000908152600a602052604090205460ff165b806139095750336000908152600b602052604090205460ff165b613948576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663566231856040518163ffffffff1660e01b815260040160206040518083038186803b15801561399857600080fd5b505afa1580156139ac573d6000803e3d6000fd5b505050506040513d60208110156139c257600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b158015613a1857600080fd5b505afa158015613a2c573d6000803e3d6000fd5b505050506040513d6020811015613a4257600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b158015613a8f57600080fd5b505af1158015613aa3573d6000803e3d6000fd5b5050505080831115613b32576000613abb84836151b6565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b158015613b1457600080fd5b505af1158015613b28573d6000803e3d6000fd5b5050505050613bb1565b6000613b3e82856151b6565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b158015613b9757600080fd5b505af1158015613bab573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b1580156118cf57600080fd5b6001546001600160a01b03163314613c45576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b62069780811115613c99576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b6000548111613cd95760405162461bcd60e51b815260040180806020018281038252602481526020018061539f6024913960400191505060405180910390fd5b600055565b6001546001600160a01b03163314613d2b576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60055460408051635242abb960e01b815290516001600160a01b03909216918291635242abb9916004808301926020929190829003018186803b158015613d7157600080fd5b505afa158015613d85573d6000803e3d6000fd5b505050506040513d6020811015613d9b57600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b158015613df257600080fd5b505af1158015613e06573d6000803e3d6000fd5b50505050806001600160a01b031663c67c2bb76040518163ffffffff1660e01b815260040160206040518083038186803b158015613e4357600080fd5b505afa158015613e57573d6000803e3d6000fd5b505050506040513d6020811015613e6d57600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b158015613ec457600080fd5b505af1158015613ed8573d6000803e3d6000fd5b50506004805460055460408051639cb7de4b60e01b81526001600160a01b0392831694810194909452600160248501525191169350639cb7de4b9250604480830192600092919082900301818387803b158015611ed257600080fd5b6001546001600160a01b03163314613f81576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b0316331480613ff85750336000908152600a602052604090205460ff165b806140125750336000908152600b602052604090205460ff165b614051576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156118cf57600080fd5b6003546001600160a01b031681565b6001546001600160a01b03163314806140df5750336000908152600a602052604090205460ff165b61411e576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561176357600080fd5b6001546001600160a01b031633146141b3576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806142065750336000908152600a602052604090205460ff165b614245576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600854819060ff16156142b15760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561429857600080fd5b505af11580156142ac573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142f957600080fd5b505afa15801561430d573d6000803e3d6000fd5b505050506040513d602081101561432357600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b15801561436557600080fd5b505afa158015614379573d6000803e3d6000fd5b505050506040513d602081101561438f57600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b1580156143d157600080fd5b505afa1580156143e5573d6000803e3d6000fd5b505050506040513d60208110156143fb57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b15801561443d57600080fd5b505afa158015614451573d6000803e3d6000fd5b505050506040513d602081101561446757600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b1580156144a957600080fd5b505afa1580156144bd573d6000803e3d6000fd5b505050506040513d60208110156144d357600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612b7a57600080fd5b6001546001600160a01b03163314806145405750336000908152600a602052604090205460ff165b8061455a5750336000908152600b602052604090205460ff165b614599576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600754886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ee57600080fd5b505afa158015614602573d6000803e3d6000fd5b505050506040513d602081101561461857600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b15801561465a57600080fd5b505afa15801561466e573d6000803e3d6000fd5b505050506040513d602081101561468457600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b1580156146c657600080fd5b505afa1580156146da573d6000803e3d6000fd5b505050506040513d60208110156146f057600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b15801561476857600080fd5b505af115801561477c573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b031633146147d6576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd909201909252805191012061486b81614fc1565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b03163314614933576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f909201909252805191012061499181614fc1565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b03163314614a35576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156118cf57600080fd5b6001546001600160a01b03163314614ad9576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f9092019092528051910120614b3781615065565b614b4081615111565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015614b9757600080fd5b505af1158015614bab573d6000803e3d6000fd5b505050506040513d602081101561177757600080fd5b6001546001600160a01b0316331480614be95750336000908152600a602052604090205460ff165b614c28576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b600691909155600755565b60096020526000908152604090205481565b6001546001600160a01b03163314614c92576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614d2781615065565b614d3081615111565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b158015614da757600080fd5b505af1158015614dbb573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b03163314614e17576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b15801561153857600080fd5b6001546001600160a01b0316331480614e985750336000908152600a602052604090205460ff165b80614eb25750336000908152600b602052604090205460ff165b614ef1576040805162461bcd60e51b815260206004820152601360248201526000805160206153c3833981519152604482015290519081900360640190fd5b60005b8151811015614fa757826001600160a01b031663f2555278838381518110614f1857fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b158015614f7357600080fd5b505af1158015614f87573d6000803e3d6000fd5b505050506040513d6020811015614f9d57600080fd5b5050600101614ef4565b505050565b60005481565b6001546001600160a01b031681565b6000818152600960205260409020541561500c5760405162461bcd60e51b81526004018080602001828103825260228152602001806153366022913960400191505060405180910390fd5b60005461501a9042906151ff565b60008281526009602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000818152600960205260409020546150c5576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b6000818152600960205260409020544211612fe85760405162461bcd60e51b815260040180806020018281038252602481526020018061537b6024913960400191505060405180910390fd5b60008181526009602052604090205461516d576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b600081815260096020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b60006151f883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615257565b9392505050565b6000828201838110156151f8576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600081848411156152e65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152ab578181015183820152602001615293565b50505050905090810190601f1680156152d85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20696e76616c6964205f636f6f6c646f776e4475726174696f6e54696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a206275666665722063616e6e6f742062652064656372656173656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a164736f6c634300060c000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000026c2710e3c232461159a4564677a24a80ab2253c000000000000000000000000000000000000000000000000000000000001518000000000000000000000000064486300799ee3c8a1391abaaf112782a01dd6f100000000000000000000000064486300799ee3c8a1391abaaf112782a01dd6f100000000000000000000000087bcd3914ed3dcd5886ba1c0f0da25150b56fe54000000000000000000000000527d5cffd31a21f1c09c4cebf440e218a9fd8683000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000096
-----Decoded View---------------
Arg [0] : _admin (address): 0x26c2710e3c232461159a4564677a24a80ab2253C
Arg [1] : _buffer (uint256): 86400
Arg [2] : _tokenManager (address): 0x64486300799ee3c8a1391aBaaF112782A01dd6F1
Arg [3] : _mintReceiver (address): 0x64486300799ee3c8a1391aBaaF112782A01dd6F1
Arg [4] : _qlpManager (address): 0x87BcD3914eD3dcd5886BA1c0f0DA25150b56fE54
Arg [5] : _rewardRouter (address): 0x527D5Cffd31a21F1c09C4Cebf440e218A9Fd8683
Arg [6] : _marginFeeBasisPoints (uint256): 10
Arg [7] : _maxMarginFeeBasisPoints (uint256): 150
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000026c2710e3c232461159a4564677a24a80ab2253c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [2] : 00000000000000000000000064486300799ee3c8a1391abaaf112782a01dd6f1
Arg [3] : 00000000000000000000000064486300799ee3c8a1391abaaf112782a01dd6f1
Arg [4] : 00000000000000000000000087bcd3914ed3dcd5886ba1c0f0da25150b56fe54
Arg [5] : 000000000000000000000000527d5cffd31a21f1c09c4cebf440e218a9fd8683
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000096
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.