Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 19 from a total of 19 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Withdraw F... | 5834823 | 5 days ago | IN | 0 S | 0.01026498 | ||||
Batch Withdraw F... | 5059298 | 12 days ago | IN | 0 S | 0.00942491 | ||||
Batch Withdraw F... | 5059144 | 12 days ago | IN | 0 S | 0.00483202 | ||||
Set Buffer | 4927036 | 12 days ago | IN | 0 S | 0.00252829 | ||||
Vault Set Token ... | 4927023 | 12 days ago | IN | 0 S | 0.00922839 | ||||
Signal Vault Set... | 4927002 | 12 days ago | IN | 0 S | 0.00300184 | ||||
Set Buffer | 4926440 | 12 days ago | IN | 0 S | 0.00132181 | ||||
Set Liquidator | 4128611 | 18 days ago | IN | 0 S | 0.00577192 | ||||
Set Contract Han... | 4128592 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Set Contract Han... | 4128472 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Signal Set Handl... | 4128447 | 18 days ago | IN | 0 S | 0.00575751 | ||||
Signal Approve | 4128413 | 18 days ago | IN | 0 S | 0.00579029 | ||||
Set Keeper | 4128407 | 18 days ago | IN | 0 S | 0.00512699 | ||||
Set Contract Han... | 4128399 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Set Contract Han... | 4128387 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Set Contract Han... | 4128374 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Set Contract Han... | 4128366 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Set Contract Han... | 4128359 | 18 days ago | IN | 0 S | 0.00509564 | ||||
Set Should Toggl... | 4128352 | 18 days ago | IN | 0 S | 0.00504548 |
Loading...
Loading
Contract Name:
Timelock
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 10 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/IGlpManager.sol"; import "../referrals/interfaces/IReferralStorage.sol"; import "../tokens/interfaces/IYieldToken.sol"; import "../tokens/interfaces/IBaseToken.sol"; import "../tokens/interfaces/IMintable.sol"; import "../tokens/interfaces/IUSDG.sol"; import "../staking/interfaces/IVester.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 glpManager; address public rewardRouter; uint256 public maxTokenSupply; 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 SignalRedeemUsdg(address vault, address token, uint256 amount); event SignalVaultSetTokenConfig( address vault, address token, uint256 tokenDecimals, uint256 tokenWeight, uint256 minProfitBps, uint256 maxUsdgAmount, 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 _glpManager, address _rewardRouter, uint256 _maxTokenSupply, uint256 _marginFeeBasisPoints, uint256 _maxMarginFeeBasisPoints ) public { require(_buffer <= MAX_BUFFER, "Timelock: invalid _buffer"); admin = _admin; buffer = _buffer; tokenManager = _tokenManager; mintReceiver = _mintReceiver; glpManager = _glpManager; rewardRouter = _rewardRouter; maxTokenSupply = _maxTokenSupply; 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 initGlpManager() external onlyAdmin { IGlpManager _glpManager = IGlpManager(glpManager); IMintable glp = IMintable(_glpManager.glp()); glp.setMinter(glpManager, true); IUSDG usdg = IUSDG(_glpManager.usdg()); usdg.addVault(glpManager); IVault vault = _glpManager.vault(); vault.setManager(glpManager, true); } function initRewardRouter() external onlyAdmin { IRewardRouterV2 _rewardRouter = IRewardRouterV2(rewardRouter); IHandlerTarget(_rewardRouter.feeGlpTracker()).setHandler(rewardRouter, true); IHandlerTarget(_rewardRouter.stakedGlpTracker()).setHandler(rewardRouter, true); IHandlerTarget(glpManager).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 _maxUsdgAmount, uint256 _bufferAmount, uint256 _usdgAmount ) 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, _maxUsdgAmount, isStable, isShortable ); IVault(_vault).setBufferAmount(_token, _bufferAmount); IVault(_vault).setUsdgAmount(_token, _usdgAmount); } function setUsdgAmounts(address _vault, address[] memory _tokens, uint256[] memory _usdgAmounts) external onlyKeeperAndAbove { for (uint256 i = 0; i < _tokens.length; i++) { IVault(_vault).setUsdgAmount(_tokens[i], _usdgAmounts[i]); } } function updateUsdgSupply(uint256 usdgAmount) external onlyKeeperAndAbove { address usdg = IGlpManager(glpManager).usdg(); uint256 balance = IERC20(usdg).balanceOf(glpManager); IUSDG(usdg).addVault(address(this)); if (usdgAmount > balance) { uint256 mintAmount = usdgAmount.sub(balance); IUSDG(usdg).mint(glpManager, mintAmount); } else { uint256 burnAmount = balance.sub(usdgAmount); IUSDG(usdg).burn(glpManager, burnAmount); } IUSDG(usdg).removeVault(address(this)); } function setShortsTrackerAveragePriceWeight(uint256 _shortsTrackerAveragePriceWeight) external onlyAdmin { IGlpManager(glpManager).setShortsTrackerAveragePriceWeight(_shortsTrackerAveragePriceWeight); } function setGlpCooldownDuration(uint256 _cooldownDuration) external onlyAdmin { require(_cooldownDuration < 2 hours, "Timelock: invalid _cooldownDuration"); IGlpManager(glpManager).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 batchSetBonusRewards(address _vester, address[] memory _accounts, uint256[] memory _amounts) external onlyKeeperAndAbove { require(_accounts.length == _amounts.length, "Timelock: invalid lengths"); IHandlerTarget(_vester).setHandler(address(this), true); for (uint256 i = 0; i < _accounts.length; i++) { address account = _accounts[i]; uint256 amount = _amounts[i]; IVester(_vester).setBonusRewards(account, amount); } IHandlerTarget(_vester).setHandler(address(this), false); } 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 signalMint(address _token, address _receiver, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("mint", _token, _receiver, _amount)); _setPendingAction(action); emit SignalMint(_token, _receiver, _amount, action); } function processMint(address _token, address _receiver, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("mint", _token, _receiver, _amount)); _validateAction(action); _clearAction(action); _mint(_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 signalRedeemUsdg(address _vault, address _token, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("redeemUsdg", _vault, _token, _amount)); _setPendingAction(action); emit SignalRedeemUsdg(_vault, _token, _amount); } function redeemUsdg(address _vault, address _token, uint256 _amount) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("redeemUsdg", _vault, _token, _amount)); _validateAction(action); _clearAction(action); address usdg = IVault(_vault).usdg(); IVault(_vault).setManager(address(this), true); IUSDG(usdg).addVault(address(this)); IUSDG(usdg).mint(address(this), _amount); IERC20(usdg).transfer(address(_vault), _amount); IVault(_vault).sellUSDG(_token, mintReceiver); IVault(_vault).setManager(address(this), false); IUSDG(usdg).removeVault(address(this)); } function signalVaultSetTokenConfig( address _vault, address _token, uint256 _tokenDecimals, uint256 _tokenWeight, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable ) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked( "vaultSetTokenConfig", _vault, _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdgAmount, _isStable, _isShortable )); _setPendingAction(action); emit SignalVaultSetTokenConfig( _vault, _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdgAmount, _isStable, _isShortable ); } function vaultSetTokenConfig( address _vault, address _token, uint256 _tokenDecimals, uint256 _tokenWeight, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable ) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked( "vaultSetTokenConfig", _vault, _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdgAmount, _isStable, _isShortable )); _validateAction(action); _clearAction(action); IVault(_vault).setTokenConfig( _token, _tokenDecimals, _tokenWeight, _minProfitBps, _maxUsdgAmount, _isStable, _isShortable ); } function cancelAction(bytes32 _action) external onlyAdmin { _clearAction(_action); } function _mint(address _token, address _receiver, uint256 _amount) private { IMintable mintable = IMintable(_token); mintable.setMinter(address(this), true); mintable.mint(_receiver, _amount); require(IERC20(_token).totalSupply() <= maxTokenSupply, "Timelock: maxTokenSupply exceeded"); mintable.setMinter(address(this), false); } 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 IGlpManager { function glp() external view returns (address); function usdg() external view returns (address); function vault() external view returns (IVault); function cooldownDuration() external returns (uint256); function getAumInUsdg(bool maximise) external view returns (uint256); function lastAddedAt(address _account) external returns (uint256); function addLiquidity(address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256); function addLiquidityForAccount(address _fundingAccount, address _account, address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256); function removeLiquidity(address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external returns (uint256); function removeLiquidityForAccount(address _account, address _tokenOut, uint256 _glpAmount, 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 usdg() external view returns (address); function gov() external view returns (address); 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 getTargetUsdgAmount(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 setUsdgAmount(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 _maxUsdgAmount, 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 buyUSDG(address _token, address _receiver) external returns (uint256); function sellUSDG(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 _usdgDelta, 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 usdgAmounts(address _token) external view returns (uint256); function maxUsdgAmounts(address _token) external view returns (uint256); function getRedemptionAmount(address _token, uint256 _usdgAmount) 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 getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdgAmount) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) 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 feeGlpTracker() external view returns (address); function stakedGlpTracker() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IVester { function rewardTracker() external view returns (address); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function cumulativeClaimAmounts(address _account) external view returns (uint256); function claimedAmounts(address _account) external view returns (uint256); function pairAmounts(address _account) external view returns (uint256); function getVestedAmount(address _account) external view returns (uint256); function transferredAverageStakedAmounts(address _account) external view returns (uint256); function transferredCumulativeRewards(address _account) external view returns (uint256); function cumulativeRewardDeductions(address _account) external view returns (uint256); function bonusRewards(address _account) external view returns (uint256); function transferStakeValues(address _sender, address _receiver) external; function setTransferredAverageStakedAmounts(address _account, uint256 _amount) external; function setTransferredCumulativeRewards(address _account, uint256 _amount) external; function setCumulativeRewardDeductions(address _account, uint256 _amount) external; function setBonusRewards(address _account, uint256 _amount) external; function getMaxVestableAmount(address _account) external view returns (uint256); function getCombinedAverageStakedAmount(address _account) external view returns (uint256); }
// 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 IUSDG { 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; }
{ "optimizer": { "enabled": true, "runs": 10 }, "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":"_glpManager","type":"address"},{"internalType":"address","name":"_rewardRouter","type":"address"},{"internalType":"uint256","name":"_maxTokenSupply","type":"uint256"},{"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":"SignalRedeemUsdg","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":"maxUsdgAmount","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":"_vester","type":"address"},{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchSetBonusRewards","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":[],"name":"glpManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"initGlpManager","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":"maxTokenSupply","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":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"processMint","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":"redeemUsdg","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":"uint256","name":"_cooldownDuration","type":"uint256"}],"name":"setGlpCooldownDuration","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":"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":"_maxUsdgAmount","type":"uint256"},{"internalType":"uint256","name":"_bufferAmount","type":"uint256"},{"internalType":"uint256","name":"_usdgAmount","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":"_usdgAmounts","type":"uint256[]"}],"name":"setUsdgAmounts","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":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"signalMint","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":"signalRedeemUsdg","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":"_maxUsdgAmount","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":"usdgAmount","type":"uint256"}],"name":"updateUsdgSupply","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":"_maxUsdgAmount","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
60806040523480156200001157600080fd5b5060405162005cfa38038062005cfa83398181016040526101208110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e08801516101009098015196979596949593949293919290919062069780881115620000cd576040805162461bcd60e51b815260206004820152601960248201527f54696d656c6f636b3a20696e76616c6964205f62756666657200000000000000604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b039b8c16179091556000988955600280548216988b1698909817909755600380548816968a169690961790955560048054871694891694909417909355600580549095169190961617909255600693909355600755600891909155615baa9081906200015090396000f3fe608060405234801561001057600080fd5b50600436106103315760003560e01c8063781cc3d3116101b0578063781cc3d314610a485780637b6f775a14610a655780637e43c62d14610a9157806380894d6214610a9957806381774b3d14610ac757806386803c7214610ae45780638a39735a14610b125780638bf22c4614610b1a5780638e34c98f14610b4657806395082d2514610b65578063996a7a1e14610b6d578063996e2bc914610b9b5780639b53ad2214610ba3578063adc7ea3714610cd6578063afd14deb14610cf3578063bc476dfd14610cfb578063bc8a8ab914610d29578063c142940a14610d5f578063c7bb26a014610d95578063cd2b123014610d9d578063d1b9e85314610dcb578063d3c87bbb14610df9578063da76231614610e1f578063db1c844114610e63578063dce6e18d14610ebc578063df3a66d914610ef2578063e1f21c6714610f28578063e21b459114610f5e578063e30569e514610f81578063e3cbeb0f14610f9e578063e4652f4914610ff7578063e8ae22711461102d578063edaafe20146110de578063f851a440146110e6578063fa6db1bc146110ee57610331565b80629a698e146103365780630191c2371461046b57806309cc9a08146104a15780630e0dc426146104d75780630e9587f3146105255780631154e8081461055d578063117cf20414610595578063185051c1146105c3578063204bbc54146105f157806321754d9e1461062757806321bd059214610663578063227f03eb1461069157806323aaad12146106c957806324ccbe30146106e5578063268959e51461071d5780632a709b141461074b5780632ba3725a1461076f578063318bc6891461078957806346ea87af1461079157806347de43e2146107b75780634cd23f3b146107ef5780634f5f6b5e1461082b57806350f7c2041461084857806351a6de0d14610850578063558182941461087e57806355ef1395146108b65780635a3bb989146108e45780635b05348b146108ec57806361d07569146109095780636ba42aaa146109115780636d63c1d0146109375780636e5227d41461095d578063704b6c02146109be57806370ac0a93146109e457806376e1128614610a1a575b600080fd5b6104696004803603606081101561034c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561037657600080fd5b82018360208201111561038857600080fd5b803590602001918460208302840111600160201b831117156103a957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103f857600080fd5b82018360208201111561040a57600080fd5b803590602001918460208302840111600160201b8311171561042b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f6945050505050565b005b6104696004803603606081101561048157600080fd5b506001600160a01b03813581169160208101359091169060400135611352565b610469600480360360608110156104b757600080fd5b506001600160a01b03813581169160208101359091169060400135611450565b610469600480360360e08110156104ed57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c0013561154f565b6104696004803603606081101561053b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166119c8565b6104696004803603606081101561057357600080fd5b506001600160a01b038135811691602081013590911690604001351515611aa6565b610469600480360360408110156105ab57600080fd5b506001600160a01b0381351690602001351515611bd7565b610469600480360360408110156105d957600080fd5b506001600160a01b0381351690602001351515611cbc565b6104696004803603606081101561060757600080fd5b506001600160a01b03813581169160208101359160409091013516611d34565b6104696004803603608081101561063d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611e0c565b6104696004803603604081101561067957600080fd5b506001600160a01b0381351690602001351515611f57565b610469600480360360808110156106a757600080fd5b506001600160a01b038135169060208101359060408101359060600135611fec565b6106d1612141565b604080519115158252519081900360200190f35b610469600480360360608110156106fb57600080fd5b506001600160a01b03813581169160208101359091169060400135151561214a565b6104696004803603604081101561073357600080fd5b506001600160a01b0381358116916020013516612253565b6107536122ef565b604080516001600160a01b039092168252519081900360200190f35b6107776122fe565b60408051918252519081900360200190f35b610777612305565b6106d1600480360360208110156107a757600080fd5b50356001600160a01b031661230b565b610469600480360360608110156107cd57600080fd5b506001600160a01b038135811691602081013590911690604001351515612320565b6104696004803603608081101561080557600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356123c6565b6104696004803603602081101561084157600080fd5b50356124e1565b61077761258d565b6104696004803603604081101561086657600080fd5b506001600160a01b0381358116916020013516612593565b6104696004803603608081101561089457600080fd5b506001600160a01b03813516906020810135906040810135906060013561268d565b610469600480360360408110156108cc57600080fd5b506001600160a01b0381358116916020013516612764565b61075361285a565b6104696004803603602081101561090257600080fd5b5035612869565b610777612941565b6106d16004803603602081101561092757600080fd5b50356001600160a01b0316612948565b6104696004803603602081101561094d57600080fd5b50356001600160a01b031661295d565b610469600480360361014081101561097457600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612e13565b610469600480360360208110156109d457600080fd5b50356001600160a01b0316612f43565b610469600480360360608110156109fa57600080fd5b506001600160a01b03813581169160208101359091169060400135612fb2565b61046960048036036040811015610a3057600080fd5b506001600160a01b03813581169160200135166133b0565b61046960048036036020811015610a5e57600080fd5b50356134af565b61046960048036036040811015610a7b57600080fd5b506001600160a01b038135169060200135613508565b6104696135f2565b61046960048036036040811015610aaf57600080fd5b506001600160a01b03813581169160200135166138b6565b61046960048036036020811015610add57600080fd5b50356139ac565b61046960048036036040811015610afa57600080fd5b506001600160a01b0381351690602001351515613cdd565b610777613d72565b61046960048036036040811015610b3057600080fd5b506001600160a01b038135169060200135613d77565b61046960048036036020811015610b5c57600080fd5b50351515613e5a565b610777613ed4565b61046960048036036040811015610b8357600080fd5b506001600160a01b0381358116916020013516613ee4565b610777613fd5565b61046960048036036060811015610bb957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610be357600080fd5b820183602082011115610bf557600080fd5b803590602001918460208302840111600160201b83111715610c1657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c6557600080fd5b820183602082011115610c7757600080fd5b803590602001918460208302840111600160201b83111715610c9857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613fdb945050505050565b61046960048036036020811015610cec57600080fd5b503561410f565b6104696141b5565b61046960048036036040811015610d1157600080fd5b506001600160a01b038135811691602001351661440b565b61046960048036036060811015610d3f57600080fd5b506001600160a01b038135811691602081013590911690604001356144a7565b61046960048036036060811015610d7557600080fd5b506001600160a01b03813581169160208101359091169060400135614563565b61075361463b565b61046960048036036040811015610db357600080fd5b506001600160a01b038135169060200135151561464a565b61046960048036036040811015610de157600080fd5b506001600160a01b03813516906020013515156146f9565b61046960048036036020811015610e0f57600080fd5b50356001600160a01b0316614771565b610469600480360360c0811015610e3557600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135614aab565b6104696004803603610100811015610e7a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614d1c565b61046960048036036060811015610ed257600080fd5b506001600160a01b03813581169160208101359091169060400135614e79565b61046960048036036060811015610f0857600080fd5b506001600160a01b03813581169160208101359091169060400135614f7b565b61046960048036036060811015610f3e57600080fd5b506001600160a01b0381358116916020810135909116906040013561501f565b61046960048036036040811015610f7457600080fd5b5080359060200135615154565b61077760048036036020811015610f9757600080fd5b50356151c6565b6104696004803603610100811015610fb557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e0013515156151d8565b6104696004803603606081101561100d57600080fd5b506001600160a01b0381358116916020810135909116906040013561535d565b6104696004803603604081101561104357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561106d57600080fd5b82018360208201111561107f57600080fd5b803590602001918460208302840111600160201b831117156110a057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615403945050505050565b61077761553f565b610753615545565b610753615554565b6001546001600160a01b031633148061111e5750336000908152600b602052604090205460ff165b806111385750336000908152600c602052604090205460ff165b611177576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b80518251146111c9576040805162461bcd60e51b815260206004820152601960248201527854696d656c6f636b3a20696e76616c6964206c656e6774687360381b604482015290519081900360640190fd5b60408051639cb7de4b60e01b81523060048201526001602482015290516001600160a01b03851691639cb7de4b91604480830192600092919082900301818387803b15801561121757600080fd5b505af115801561122b573d6000803e3d6000fd5b5050505060005b82518110156112e857600083828151811061124957fe5b60200260200101519050600083838151811061126157fe5b60200260200101519050856001600160a01b03166341f2272483836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b50506001909401935061123292505050565b5060408051639cb7de4b60e01b815230600482015260006024820181905291516001600160a01b03861692639cb7de4b926044808201939182900301818387803b15801561133557600080fd5b505af1158015611349573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b0316331461139f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061140081615563565b604080516001600160a01b0380871682528516602082015280820184905290517fe6bd553b6ef21f3a22ebc877b3aaedc30fe15826b8156d4e8c8b373ebf11d78b9181900360600190a150505050565b6001546001600160a01b0316331461149d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c90920190925280519101206114f881615563565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f23d37bec99db82564427c9bbfe48ad7434bccf413a40fd357fb838c90a0d68289181900360800190a150505050565b6001546001600160a01b03163314806115775750336000908152600b602052604090205460ff165b806115915750336000908152600c602052604090205460ff165b6115d0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6101f4841115611627576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b15801561167157600080fd5b505afa158015611685573d6000803e3d6000fd5b505050506040513d602081101561169b57600080fd5b50516116d85760405162461bcd60e51b8152600401808060200182810382526023815260200180615ac36023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172757600080fd5b505afa15801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b1580156117a357600080fd5b505afa1580156117b7573d6000803e3d6000fd5b505050506040513d60208110156117cd57600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d602081101561184957600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b505050508a6001600160a01b031663d66b000d8b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119a357600080fd5b505af11580156119b7573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b03163314611a15576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050506040513d6020811015611a9f57600080fd5b5050505050565b6001546001600160a01b03163314611af3576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611b5781615607565b611b60816156b3565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611bb957600080fd5b505af1158015611bcd573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b0316331480611bff5750336000908152600b602052604090205460ff165b80611c195750336000908152600c602052604090205460ff165b611c58576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b505af1158015611cb4573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314611d09576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331480611d5c5750336000908152600b602052604090205460ff165b80611d765750336000908152600c602052604090205460ff165b611db5576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b03163314611e59576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b16605583015260698083018590528351808403909101815260899092019092528051910120611ec781615607565b611ed0816156b3565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611f3857600080fd5b505af1158015611f4c573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611fa4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b03163314806120145750336000908152600b602052604090205460ff165b8061202e5750336000908152600c602052604090205460ff165b61206d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60c882106120ac5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a5a6024913960400191505060405180910390fd5b60c881106120eb5760405162461bcd60e51b815260040180806020018281038252602a815260200180615b4b602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611bb957600080fd5b60095460ff1681565b6001546001600160a01b03163314612197576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b605283015282516033818403018152605390920190925280519101206121fb81615563565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b031633146122a0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611ca057600080fd5b6002546001600160a01b031681565b6207a12081565b60075481565b600b6020526000908152604090205460ff1681565b6001546001600160a01b0316331461236d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b03163314612413576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061248181615563565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b6001546001600160a01b0316331461252e576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60048054604080516327afb5af60e11b8152928301849052516001600160a01b0390911691634f5f6b5e91602480830192600092919082900301818387803b15801561257957600080fd5b505af1158015611a9f573d6000803e3d6000fd5b60065481565b6001546001600160a01b031633146125e0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061263581615607565b61263e816156b3565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b03163314806126b55750336000908152600b602052604090205460ff165b806126cf5750336000908152600c602052604090205460ff165b61270e576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611bb957600080fd5b6001546001600160a01b031633146127b1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6001600160a01b03821630141561280b576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611ca057600080fd5b6005546001600160a01b031681565b6001546001600160a01b031633146128b6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b611c2081106128f65760405162461bcd60e51b8152600401808060200182810382526023815260200180615a7e6023913960400191505060405180910390fd5b600480546040805163966be07560e01b8152928301849052516001600160a01b039091169163966be07591602480830192600092919082900301818387803b15801561257957600080fd5b6206978081565b600c6020526000908152604090205460ff1681565b6001546001600160a01b03163314806129855750336000908152600b602052604090205460ff165b6129c4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600954819060ff1615612a325760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b158015612a1957600080fd5b505af1158015612a2d573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b158015612ae657600080fd5b505afa158015612afa573d6000803e3d6000fd5b505050506040513d6020811015612b1057600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b158015612b5257600080fd5b505afa158015612b66573d6000803e3d6000fd5b505050506040513d6020811015612b7c57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015612bbe57600080fd5b505afa158015612bd2573d6000803e3d6000fd5b505050506040513d6020811015612be857600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612c2a57600080fd5b505afa158015612c3e573d6000803e3d6000fd5b505050506040513d6020811015612c5457600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c9957600080fd5b505afa158015612cad573d6000803e3d6000fd5b505050506040513d6020811015612cc357600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612d0557600080fd5b505afa158015612d19573d6000803e3d6000fd5b505050506040513d6020811015612d2f57600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612d7157600080fd5b505afa158015612d85573d6000803e3d6000fd5b505050506040513d6020811015612d9b57600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015611ca057600080fd5b6001546001600160a01b0316331480612e3b5750336000908152600b602052604090205460ff165b80612e555750336000908152600c602052604090205460ff165b612e94576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6007849055600854604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612f1f57600080fd5b505af1158015612f33573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612f90576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612fff576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061306081615607565b613069816156b3565b6000846001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a457600080fd5b505afa1580156130b8573d6000803e3d6000fd5b505050506040513d60208110156130ce57600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b15801561318157600080fd5b505af1158015613195573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b1580156131e757600080fd5b505af11580156131fb573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561325657600080fd5b505af115801561326a573d6000803e3d6000fd5b505050506040513d602081101561328057600080fd5b505060035460408051630711e61960e41b81526001600160a01b038781166004830152928316602482015290519187169163711e6190916044808201926020929091908290030181600087803b1580156132d957600080fd5b505af11580156132ed573d6000803e3d6000fd5b505050506040513d602081101561330357600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561335157600080fd5b505af1158015613365573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611f3857600080fd5b6001546001600160a01b031633146133fd576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061345781615607565b613460816156b3565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b031633146134fc576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b613505816156b3565b50565b6001546001600160a01b03163314613555576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6207a12081116135ac576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b0316331461363f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6004805460408051633c5103f760e11b815290516001600160a01b039092169260009284926378a207ee9281810192602092909190829003018186803b15801561368857600080fd5b505afa15801561369c573d6000803e3d6000fd5b505050506040513d60208110156136b257600080fd5b5051600480546040805163cf456ae760e01b81526001600160a01b0392831693810193909352600160248401525192935083169163cf456ae79160448082019260009290919082900301818387803b15801561370d57600080fd5b505af1158015613721573d6000803e3d6000fd5b505050506000826001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561376057600080fd5b505afa158015613774573d6000803e3d6000fd5b505050506040513d602081101561378a57600080fd5b505160048054604080516312b5ad0160e11b81526001600160a01b03928316938101939093525192935083169163256b5a029160248082019260009290919082900301818387803b1580156137de57600080fd5b505af11580156137f2573d6000803e3d6000fd5b505050506000836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561383157600080fd5b505afa158015613845573d6000803e3d6000fd5b505050506040513d602081101561385b57600080fd5b505160048054604080516352f4877760e11b81526001600160a01b0392831693810193909352600160248401525192935083169163a5e90eee9160448082019260009290919082900301818387803b158015611bb957600080fd5b6001546001600160a01b03163314613903576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061395d81615563565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314806139d45750336000908152600b602052604090205460ff165b806139ee5750336000908152600c602052604090205460ff165b613a2d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a7d57600080fd5b505afa158015613a91573d6000803e3d6000fd5b505050506040513d6020811015613aa757600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b158015613afd57600080fd5b505afa158015613b11573d6000803e3d6000fd5b505050506040513d6020811015613b2757600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b158015613b7457600080fd5b505af1158015613b88573d6000803e3d6000fd5b5050505080831115613c17576000613ba08483615758565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b158015613bf957600080fd5b505af1158015613c0d573d6000803e3d6000fd5b5050505050613c96565b6000613c238285615758565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b158015613c7c57600080fd5b505af1158015613c90573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b15801561133557600080fd5b6001546001600160a01b03163314613d2a576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b60c881565b6001546001600160a01b03163314613dc4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b64012a05f2008111613e14576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b0316331480613e825750336000908152600b602052604090205460ff165b613ec1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b03163314613f31576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e9092019092528051910120613f8681615563565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60085481565b6001546001600160a01b03163314806140035750336000908152600b602052604090205460ff165b8061401d5750336000908152600c602052604090205460ff165b61405c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60005b825181101561410957836001600160a01b031663d66b000d84838151811061408357fe5b602002602001015184848151811061409757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156140e557600080fd5b505af11580156140f9573d6000803e3d6000fd5b50506001909201915061405f9050565b50505050565b6001546001600160a01b0316331461415c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b620697808111156141b0576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b600055565b6001546001600160a01b03163314614202576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6005546040805163e1c363b760e01b815290516001600160a01b0390921691829163e1c363b7916004808301926020929190829003018186803b15801561424857600080fd5b505afa15801561425c573d6000803e3d6000fd5b505050506040513d602081101561427257600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b1580156142c957600080fd5b505af11580156142dd573d6000803e3d6000fd5b50505050806001600160a01b031663af394d006040518163ffffffff1660e01b815260040160206040518083038186803b15801561431a57600080fd5b505afa15801561432e573d6000803e3d6000fd5b505050506040513d602081101561434457600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b15801561439b57600080fd5b505af11580156143af573d6000803e3d6000fd5b50506004805460055460408051639cb7de4b60e01b81526001600160a01b0392831694810194909452600160248501525191169350639cb7de4b9250604480830192600092919082900301818387803b15801561257957600080fd5b6001546001600160a01b03163314614458576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b031633146144f4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c909201909252805191012061454f81615607565b614558816156b3565b6141098484846157a1565b6001546001600160a01b031633148061458b5750336000908152600b602052604090205460ff165b806145a55750336000908152600c602052604090205460ff165b6145e4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561133557600080fd5b6003546001600160a01b031681565b6001546001600160a01b03163314806146725750336000908152600b602052604090205460ff165b6146b1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b03163314614746576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806147995750336000908152600b602052604090205460ff165b6147d8576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600954819060ff16156148445760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561482b57600080fd5b505af115801561483f573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561488c57600080fd5b505afa1580156148a0573d6000803e3d6000fd5b505050506040513d60208110156148b657600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b1580156148f857600080fd5b505afa15801561490c573d6000803e3d6000fd5b505050506040513d602081101561492257600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561496457600080fd5b505afa158015614978573d6000803e3d6000fd5b505050506040513d602081101561498e57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b1580156149d057600080fd5b505afa1580156149e4573d6000803e3d6000fd5b505050506040513d60208110156149fa57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015614a3c57600080fd5b505afa158015614a50573d6000803e3d6000fd5b505050506040513d6020811015614a6657600080fd5b5051600854604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c9957600080fd5b6001546001600160a01b0316331480614ad35750336000908152600b602052604090205460ff165b80614aed5750336000908152600c602052604090205460ff165b614b2c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600854886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b158015614b8157600080fd5b505afa158015614b95573d6000803e3d6000fd5b505050506040513d6020811015614bab57600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015614bed57600080fd5b505afa158015614c01573d6000803e3d6000fd5b505050506040513d6020811015614c1757600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015614c5957600080fd5b505afa158015614c6d573d6000803e3d6000fd5b505050506040513d6020811015614c8357600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015614cfb57600080fd5b505af1158015614d0f573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b03163314614d69576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614dfe81615563565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b03163314614ec6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f9092019092528051910120614f2481615563565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b03163314614fc8576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b0316331461506c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f90920190925280519101206150ca81615607565b6150d3816156b3565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561512a57600080fd5b505af115801561513e573d6000803e3d6000fd5b505050506040513d6020811015611cb457600080fd5b6001546001600160a01b031633148061517c5750336000908152600b602052604090205460ff165b6151bb576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600791909155600855565b600a6020526000908152604090205481565b6001546001600160a01b03163314615225576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd90920190925280519101206152ba81615607565b6152c3816156b3565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b15801561533a57600080fd5b505af115801561534e573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b031633146153aa576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b158015611a7557600080fd5b6001546001600160a01b031633148061542b5750336000908152600b602052604090205460ff165b806154455750336000908152600c602052604090205460ff165b615484576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60005b815181101561553a57826001600160a01b031663f25552788383815181106154ab57fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b15801561550657600080fd5b505af115801561551a573d6000803e3d6000fd5b505050506040513d602081101561553057600080fd5b5050600101615487565b505050565b60005481565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000818152600a6020526040902054156155ae5760405162461bcd60e51b8152600401808060200182810382526022815260200180615aa16022913960400191505060405180910390fd5b6000546155bc90429061596a565b6000828152600a602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000818152600a6020526040902054615667576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b6000818152600a602052604090205442116135055760405162461bcd60e51b8152600401808060200182810382526024815260200180615ae66024913960400191505060405180910390fd5b6000818152600a602052604090205461570f576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b6000818152600a6020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b600061579a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506159c2565b9392505050565b6040805163cf456ae760e01b815230600482015260016024820152905184916001600160a01b0383169163cf456ae79160448082019260009290919082900301818387803b1580156157f257600080fd5b505af1158015615806573d6000803e3d6000fd5b50505050806001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561586157600080fd5b505af1158015615875573d6000803e3d6000fd5b50505050600654846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156158b557600080fd5b505afa1580156158c9573d6000803e3d6000fd5b505050506040513d60208110156158df57600080fd5b5051111561591e5760405162461bcd60e51b8152600401808060200182810382526021815260200180615b2a6021913960400191505060405180910390fd5b6040805163cf456ae760e01b815230600482015260006024820181905291516001600160a01b0384169263cf456ae7926044808201939182900301818387803b158015611bb957600080fd5b60008282018381101561579a576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008184841115615a515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615a165781810151838201526020016159fe565b50505050905090810190601f168015615a435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20696e76616c6964205f636f6f6c646f776e4475726174696f6e54696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a206d6178546f6b656e537570706c7920657863656564656454696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a26469706673582212201665c9df8d686b99cfe5eabdd1eec7f5a8b25c970bbaeaecfd745a481d73dbbe64736f6c634300060c00330000000000000000000000001197d7e9ace3eac4392690cf8d4f28e213dfe44100000000000000000000000000000000000000000000000000000000000151800000000000000000000000001cf05f65e2f65a78ed441d8d4bc8709967afbbb00000000000000000000000001cf05f65e2f65a78ed441d8d4bc8709967afbbb0000000000000000000000000a16fabe630e75981b03b31aad20f5bdde581acdf000000000000000000000000a0411bbefdc6d896615d1ece1c3212353842c2df0000000000000000000000000000000000000000000af5cbf0741b4c95400000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103315760003560e01c8063781cc3d3116101b0578063781cc3d314610a485780637b6f775a14610a655780637e43c62d14610a9157806380894d6214610a9957806381774b3d14610ac757806386803c7214610ae45780638a39735a14610b125780638bf22c4614610b1a5780638e34c98f14610b4657806395082d2514610b65578063996a7a1e14610b6d578063996e2bc914610b9b5780639b53ad2214610ba3578063adc7ea3714610cd6578063afd14deb14610cf3578063bc476dfd14610cfb578063bc8a8ab914610d29578063c142940a14610d5f578063c7bb26a014610d95578063cd2b123014610d9d578063d1b9e85314610dcb578063d3c87bbb14610df9578063da76231614610e1f578063db1c844114610e63578063dce6e18d14610ebc578063df3a66d914610ef2578063e1f21c6714610f28578063e21b459114610f5e578063e30569e514610f81578063e3cbeb0f14610f9e578063e4652f4914610ff7578063e8ae22711461102d578063edaafe20146110de578063f851a440146110e6578063fa6db1bc146110ee57610331565b80629a698e146103365780630191c2371461046b57806309cc9a08146104a15780630e0dc426146104d75780630e9587f3146105255780631154e8081461055d578063117cf20414610595578063185051c1146105c3578063204bbc54146105f157806321754d9e1461062757806321bd059214610663578063227f03eb1461069157806323aaad12146106c957806324ccbe30146106e5578063268959e51461071d5780632a709b141461074b5780632ba3725a1461076f578063318bc6891461078957806346ea87af1461079157806347de43e2146107b75780634cd23f3b146107ef5780634f5f6b5e1461082b57806350f7c2041461084857806351a6de0d14610850578063558182941461087e57806355ef1395146108b65780635a3bb989146108e45780635b05348b146108ec57806361d07569146109095780636ba42aaa146109115780636d63c1d0146109375780636e5227d41461095d578063704b6c02146109be57806370ac0a93146109e457806376e1128614610a1a575b600080fd5b6104696004803603606081101561034c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561037657600080fd5b82018360208201111561038857600080fd5b803590602001918460208302840111600160201b831117156103a957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103f857600080fd5b82018360208201111561040a57600080fd5b803590602001918460208302840111600160201b8311171561042b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f6945050505050565b005b6104696004803603606081101561048157600080fd5b506001600160a01b03813581169160208101359091169060400135611352565b610469600480360360608110156104b757600080fd5b506001600160a01b03813581169160208101359091169060400135611450565b610469600480360360e08110156104ed57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c0013561154f565b6104696004803603606081101561053b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166119c8565b6104696004803603606081101561057357600080fd5b506001600160a01b038135811691602081013590911690604001351515611aa6565b610469600480360360408110156105ab57600080fd5b506001600160a01b0381351690602001351515611bd7565b610469600480360360408110156105d957600080fd5b506001600160a01b0381351690602001351515611cbc565b6104696004803603606081101561060757600080fd5b506001600160a01b03813581169160208101359160409091013516611d34565b6104696004803603608081101561063d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611e0c565b6104696004803603604081101561067957600080fd5b506001600160a01b0381351690602001351515611f57565b610469600480360360808110156106a757600080fd5b506001600160a01b038135169060208101359060408101359060600135611fec565b6106d1612141565b604080519115158252519081900360200190f35b610469600480360360608110156106fb57600080fd5b506001600160a01b03813581169160208101359091169060400135151561214a565b6104696004803603604081101561073357600080fd5b506001600160a01b0381358116916020013516612253565b6107536122ef565b604080516001600160a01b039092168252519081900360200190f35b6107776122fe565b60408051918252519081900360200190f35b610777612305565b6106d1600480360360208110156107a757600080fd5b50356001600160a01b031661230b565b610469600480360360608110156107cd57600080fd5b506001600160a01b038135811691602081013590911690604001351515612320565b6104696004803603608081101561080557600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356123c6565b6104696004803603602081101561084157600080fd5b50356124e1565b61077761258d565b6104696004803603604081101561086657600080fd5b506001600160a01b0381358116916020013516612593565b6104696004803603608081101561089457600080fd5b506001600160a01b03813516906020810135906040810135906060013561268d565b610469600480360360408110156108cc57600080fd5b506001600160a01b0381358116916020013516612764565b61075361285a565b6104696004803603602081101561090257600080fd5b5035612869565b610777612941565b6106d16004803603602081101561092757600080fd5b50356001600160a01b0316612948565b6104696004803603602081101561094d57600080fd5b50356001600160a01b031661295d565b610469600480360361014081101561097457600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612e13565b610469600480360360208110156109d457600080fd5b50356001600160a01b0316612f43565b610469600480360360608110156109fa57600080fd5b506001600160a01b03813581169160208101359091169060400135612fb2565b61046960048036036040811015610a3057600080fd5b506001600160a01b03813581169160200135166133b0565b61046960048036036020811015610a5e57600080fd5b50356134af565b61046960048036036040811015610a7b57600080fd5b506001600160a01b038135169060200135613508565b6104696135f2565b61046960048036036040811015610aaf57600080fd5b506001600160a01b03813581169160200135166138b6565b61046960048036036020811015610add57600080fd5b50356139ac565b61046960048036036040811015610afa57600080fd5b506001600160a01b0381351690602001351515613cdd565b610777613d72565b61046960048036036040811015610b3057600080fd5b506001600160a01b038135169060200135613d77565b61046960048036036020811015610b5c57600080fd5b50351515613e5a565b610777613ed4565b61046960048036036040811015610b8357600080fd5b506001600160a01b0381358116916020013516613ee4565b610777613fd5565b61046960048036036060811015610bb957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610be357600080fd5b820183602082011115610bf557600080fd5b803590602001918460208302840111600160201b83111715610c1657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c6557600080fd5b820183602082011115610c7757600080fd5b803590602001918460208302840111600160201b83111715610c9857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613fdb945050505050565b61046960048036036020811015610cec57600080fd5b503561410f565b6104696141b5565b61046960048036036040811015610d1157600080fd5b506001600160a01b038135811691602001351661440b565b61046960048036036060811015610d3f57600080fd5b506001600160a01b038135811691602081013590911690604001356144a7565b61046960048036036060811015610d7557600080fd5b506001600160a01b03813581169160208101359091169060400135614563565b61075361463b565b61046960048036036040811015610db357600080fd5b506001600160a01b038135169060200135151561464a565b61046960048036036040811015610de157600080fd5b506001600160a01b03813516906020013515156146f9565b61046960048036036020811015610e0f57600080fd5b50356001600160a01b0316614771565b610469600480360360c0811015610e3557600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135614aab565b6104696004803603610100811015610e7a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614d1c565b61046960048036036060811015610ed257600080fd5b506001600160a01b03813581169160208101359091169060400135614e79565b61046960048036036060811015610f0857600080fd5b506001600160a01b03813581169160208101359091169060400135614f7b565b61046960048036036060811015610f3e57600080fd5b506001600160a01b0381358116916020810135909116906040013561501f565b61046960048036036040811015610f7457600080fd5b5080359060200135615154565b61077760048036036020811015610f9757600080fd5b50356151c6565b6104696004803603610100811015610fb557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e0013515156151d8565b6104696004803603606081101561100d57600080fd5b506001600160a01b0381358116916020810135909116906040013561535d565b6104696004803603604081101561104357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561106d57600080fd5b82018360208201111561107f57600080fd5b803590602001918460208302840111600160201b831117156110a057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615403945050505050565b61077761553f565b610753615545565b610753615554565b6001546001600160a01b031633148061111e5750336000908152600b602052604090205460ff165b806111385750336000908152600c602052604090205460ff165b611177576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b80518251146111c9576040805162461bcd60e51b815260206004820152601960248201527854696d656c6f636b3a20696e76616c6964206c656e6774687360381b604482015290519081900360640190fd5b60408051639cb7de4b60e01b81523060048201526001602482015290516001600160a01b03851691639cb7de4b91604480830192600092919082900301818387803b15801561121757600080fd5b505af115801561122b573d6000803e3d6000fd5b5050505060005b82518110156112e857600083828151811061124957fe5b60200260200101519050600083838151811061126157fe5b60200260200101519050856001600160a01b03166341f2272483836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b50506001909401935061123292505050565b5060408051639cb7de4b60e01b815230600482015260006024820181905291516001600160a01b03861692639cb7de4b926044808201939182900301818387803b15801561133557600080fd5b505af1158015611349573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b0316331461139f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061140081615563565b604080516001600160a01b0380871682528516602082015280820184905290517fe6bd553b6ef21f3a22ebc877b3aaedc30fe15826b8156d4e8c8b373ebf11d78b9181900360600190a150505050565b6001546001600160a01b0316331461149d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c90920190925280519101206114f881615563565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f23d37bec99db82564427c9bbfe48ad7434bccf413a40fd357fb838c90a0d68289181900360800190a150505050565b6001546001600160a01b03163314806115775750336000908152600b602052604090205460ff165b806115915750336000908152600c602052604090205460ff165b6115d0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6101f4841115611627576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b15801561167157600080fd5b505afa158015611685573d6000803e3d6000fd5b505050506040513d602081101561169b57600080fd5b50516116d85760405162461bcd60e51b8152600401808060200182810382526023815260200180615ac36023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172757600080fd5b505afa15801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b1580156117a357600080fd5b505afa1580156117b7573d6000803e3d6000fd5b505050506040513d60208110156117cd57600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d602081101561184957600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b505050508a6001600160a01b031663d66b000d8b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119a357600080fd5b505af11580156119b7573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b03163314611a15576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050506040513d6020811015611a9f57600080fd5b5050505050565b6001546001600160a01b03163314611af3576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611b5781615607565b611b60816156b3565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611bb957600080fd5b505af1158015611bcd573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b0316331480611bff5750336000908152600b602052604090205460ff165b80611c195750336000908152600c602052604090205460ff165b611c58576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b505af1158015611cb4573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314611d09576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331480611d5c5750336000908152600b602052604090205460ff165b80611d765750336000908152600c602052604090205460ff165b611db5576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b03163314611e59576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b16605583015260698083018590528351808403909101815260899092019092528051910120611ec781615607565b611ed0816156b3565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611f3857600080fd5b505af1158015611f4c573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611fa4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b03163314806120145750336000908152600b602052604090205460ff165b8061202e5750336000908152600c602052604090205460ff165b61206d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60c882106120ac5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a5a6024913960400191505060405180910390fd5b60c881106120eb5760405162461bcd60e51b815260040180806020018281038252602a815260200180615b4b602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611bb957600080fd5b60095460ff1681565b6001546001600160a01b03163314612197576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b605283015282516033818403018152605390920190925280519101206121fb81615563565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b031633146122a0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611ca057600080fd5b6002546001600160a01b031681565b6207a12081565b60075481565b600b6020526000908152604090205460ff1681565b6001546001600160a01b0316331461236d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b03163314612413576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061248181615563565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b6001546001600160a01b0316331461252e576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60048054604080516327afb5af60e11b8152928301849052516001600160a01b0390911691634f5f6b5e91602480830192600092919082900301818387803b15801561257957600080fd5b505af1158015611a9f573d6000803e3d6000fd5b60065481565b6001546001600160a01b031633146125e0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061263581615607565b61263e816156b3565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b03163314806126b55750336000908152600b602052604090205460ff165b806126cf5750336000908152600c602052604090205460ff165b61270e576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611bb957600080fd5b6001546001600160a01b031633146127b1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6001600160a01b03821630141561280b576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611ca057600080fd5b6005546001600160a01b031681565b6001546001600160a01b031633146128b6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b611c2081106128f65760405162461bcd60e51b8152600401808060200182810382526023815260200180615a7e6023913960400191505060405180910390fd5b600480546040805163966be07560e01b8152928301849052516001600160a01b039091169163966be07591602480830192600092919082900301818387803b15801561257957600080fd5b6206978081565b600c6020526000908152604090205460ff1681565b6001546001600160a01b03163314806129855750336000908152600b602052604090205460ff165b6129c4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600954819060ff1615612a325760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b158015612a1957600080fd5b505af1158015612a2d573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b158015612ae657600080fd5b505afa158015612afa573d6000803e3d6000fd5b505050506040513d6020811015612b1057600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b158015612b5257600080fd5b505afa158015612b66573d6000803e3d6000fd5b505050506040513d6020811015612b7c57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015612bbe57600080fd5b505afa158015612bd2573d6000803e3d6000fd5b505050506040513d6020811015612be857600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612c2a57600080fd5b505afa158015612c3e573d6000803e3d6000fd5b505050506040513d6020811015612c5457600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c9957600080fd5b505afa158015612cad573d6000803e3d6000fd5b505050506040513d6020811015612cc357600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612d0557600080fd5b505afa158015612d19573d6000803e3d6000fd5b505050506040513d6020811015612d2f57600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612d7157600080fd5b505afa158015612d85573d6000803e3d6000fd5b505050506040513d6020811015612d9b57600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015611ca057600080fd5b6001546001600160a01b0316331480612e3b5750336000908152600b602052604090205460ff165b80612e555750336000908152600c602052604090205460ff165b612e94576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6007849055600854604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612f1f57600080fd5b505af1158015612f33573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612f90576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612fff576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061306081615607565b613069816156b3565b6000846001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a457600080fd5b505afa1580156130b8573d6000803e3d6000fd5b505050506040513d60208110156130ce57600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b15801561318157600080fd5b505af1158015613195573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b1580156131e757600080fd5b505af11580156131fb573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561325657600080fd5b505af115801561326a573d6000803e3d6000fd5b505050506040513d602081101561328057600080fd5b505060035460408051630711e61960e41b81526001600160a01b038781166004830152928316602482015290519187169163711e6190916044808201926020929091908290030181600087803b1580156132d957600080fd5b505af11580156132ed573d6000803e3d6000fd5b505050506040513d602081101561330357600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561335157600080fd5b505af1158015613365573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611f3857600080fd5b6001546001600160a01b031633146133fd576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061345781615607565b613460816156b3565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b031633146134fc576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b613505816156b3565b50565b6001546001600160a01b03163314613555576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6207a12081116135ac576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b0316331461363f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6004805460408051633c5103f760e11b815290516001600160a01b039092169260009284926378a207ee9281810192602092909190829003018186803b15801561368857600080fd5b505afa15801561369c573d6000803e3d6000fd5b505050506040513d60208110156136b257600080fd5b5051600480546040805163cf456ae760e01b81526001600160a01b0392831693810193909352600160248401525192935083169163cf456ae79160448082019260009290919082900301818387803b15801561370d57600080fd5b505af1158015613721573d6000803e3d6000fd5b505050506000826001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561376057600080fd5b505afa158015613774573d6000803e3d6000fd5b505050506040513d602081101561378a57600080fd5b505160048054604080516312b5ad0160e11b81526001600160a01b03928316938101939093525192935083169163256b5a029160248082019260009290919082900301818387803b1580156137de57600080fd5b505af11580156137f2573d6000803e3d6000fd5b505050506000836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561383157600080fd5b505afa158015613845573d6000803e3d6000fd5b505050506040513d602081101561385b57600080fd5b505160048054604080516352f4877760e11b81526001600160a01b0392831693810193909352600160248401525192935083169163a5e90eee9160448082019260009290919082900301818387803b158015611bb957600080fd5b6001546001600160a01b03163314613903576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061395d81615563565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314806139d45750336000908152600b602052604090205460ff165b806139ee5750336000908152600c602052604090205460ff165b613a2d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a7d57600080fd5b505afa158015613a91573d6000803e3d6000fd5b505050506040513d6020811015613aa757600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b158015613afd57600080fd5b505afa158015613b11573d6000803e3d6000fd5b505050506040513d6020811015613b2757600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b158015613b7457600080fd5b505af1158015613b88573d6000803e3d6000fd5b5050505080831115613c17576000613ba08483615758565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b158015613bf957600080fd5b505af1158015613c0d573d6000803e3d6000fd5b5050505050613c96565b6000613c238285615758565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b158015613c7c57600080fd5b505af1158015613c90573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b15801561133557600080fd5b6001546001600160a01b03163314613d2a576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b60c881565b6001546001600160a01b03163314613dc4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b64012a05f2008111613e14576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b0316331480613e825750336000908152600b602052604090205460ff165b613ec1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b03163314613f31576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e9092019092528051910120613f8681615563565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60085481565b6001546001600160a01b03163314806140035750336000908152600b602052604090205460ff165b8061401d5750336000908152600c602052604090205460ff165b61405c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60005b825181101561410957836001600160a01b031663d66b000d84838151811061408357fe5b602002602001015184848151811061409757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156140e557600080fd5b505af11580156140f9573d6000803e3d6000fd5b50506001909201915061405f9050565b50505050565b6001546001600160a01b0316331461415c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b620697808111156141b0576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b600055565b6001546001600160a01b03163314614202576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6005546040805163e1c363b760e01b815290516001600160a01b0390921691829163e1c363b7916004808301926020929190829003018186803b15801561424857600080fd5b505afa15801561425c573d6000803e3d6000fd5b505050506040513d602081101561427257600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b1580156142c957600080fd5b505af11580156142dd573d6000803e3d6000fd5b50505050806001600160a01b031663af394d006040518163ffffffff1660e01b815260040160206040518083038186803b15801561431a57600080fd5b505afa15801561432e573d6000803e3d6000fd5b505050506040513d602081101561434457600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b15801561439b57600080fd5b505af11580156143af573d6000803e3d6000fd5b50506004805460055460408051639cb7de4b60e01b81526001600160a01b0392831694810194909452600160248501525191169350639cb7de4b9250604480830192600092919082900301818387803b15801561257957600080fd5b6001546001600160a01b03163314614458576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b031633146144f4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c909201909252805191012061454f81615607565b614558816156b3565b6141098484846157a1565b6001546001600160a01b031633148061458b5750336000908152600b602052604090205460ff165b806145a55750336000908152600c602052604090205460ff165b6145e4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561133557600080fd5b6003546001600160a01b031681565b6001546001600160a01b03163314806146725750336000908152600b602052604090205460ff165b6146b1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611ca057600080fd5b6001546001600160a01b03163314614746576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806147995750336000908152600b602052604090205460ff165b6147d8576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600954819060ff16156148445760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561482b57600080fd5b505af115801561483f573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561488c57600080fd5b505afa1580156148a0573d6000803e3d6000fd5b505050506040513d60208110156148b657600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b1580156148f857600080fd5b505afa15801561490c573d6000803e3d6000fd5b505050506040513d602081101561492257600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561496457600080fd5b505afa158015614978573d6000803e3d6000fd5b505050506040513d602081101561498e57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b1580156149d057600080fd5b505afa1580156149e4573d6000803e3d6000fd5b505050506040513d60208110156149fa57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015614a3c57600080fd5b505afa158015614a50573d6000803e3d6000fd5b505050506040513d6020811015614a6657600080fd5b5051600854604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c9957600080fd5b6001546001600160a01b0316331480614ad35750336000908152600b602052604090205460ff165b80614aed5750336000908152600c602052604090205460ff165b614b2c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600854886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b158015614b8157600080fd5b505afa158015614b95573d6000803e3d6000fd5b505050506040513d6020811015614bab57600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015614bed57600080fd5b505afa158015614c01573d6000803e3d6000fd5b505050506040513d6020811015614c1757600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015614c5957600080fd5b505afa158015614c6d573d6000803e3d6000fd5b505050506040513d6020811015614c8357600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015614cfb57600080fd5b505af1158015614d0f573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b03163314614d69576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614dfe81615563565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b03163314614ec6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f9092019092528051910120614f2481615563565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b03163314614fc8576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561133557600080fd5b6001546001600160a01b0316331461506c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f90920190925280519101206150ca81615607565b6150d3816156b3565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561512a57600080fd5b505af115801561513e573d6000803e3d6000fd5b505050506040513d6020811015611cb457600080fd5b6001546001600160a01b031633148061517c5750336000908152600b602052604090205460ff165b6151bb576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b600791909155600855565b600a6020526000908152604090205481565b6001546001600160a01b03163314615225576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd90920190925280519101206152ba81615607565b6152c3816156b3565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b15801561533a57600080fd5b505af115801561534e573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b031633146153aa576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b158015611a7557600080fd5b6001546001600160a01b031633148061542b5750336000908152600b602052604090205460ff165b806154455750336000908152600c602052604090205460ff165b615484576040805162461bcd60e51b81526020600482015260136024820152600080516020615b0a833981519152604482015290519081900360640190fd5b60005b815181101561553a57826001600160a01b031663f25552788383815181106154ab57fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b15801561550657600080fd5b505af115801561551a573d6000803e3d6000fd5b505050506040513d602081101561553057600080fd5b5050600101615487565b505050565b60005481565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000818152600a6020526040902054156155ae5760405162461bcd60e51b8152600401808060200182810382526022815260200180615aa16022913960400191505060405180910390fd5b6000546155bc90429061596a565b6000828152600a602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000818152600a6020526040902054615667576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b6000818152600a602052604090205442116135055760405162461bcd60e51b8152600401808060200182810382526024815260200180615ae66024913960400191505060405180910390fd5b6000818152600a602052604090205461570f576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b6000818152600a6020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b600061579a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506159c2565b9392505050565b6040805163cf456ae760e01b815230600482015260016024820152905184916001600160a01b0383169163cf456ae79160448082019260009290919082900301818387803b1580156157f257600080fd5b505af1158015615806573d6000803e3d6000fd5b50505050806001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561586157600080fd5b505af1158015615875573d6000803e3d6000fd5b50505050600654846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156158b557600080fd5b505afa1580156158c9573d6000803e3d6000fd5b505050506040513d60208110156158df57600080fd5b5051111561591e5760405162461bcd60e51b8152600401808060200182810382526021815260200180615b2a6021913960400191505060405180910390fd5b6040805163cf456ae760e01b815230600482015260006024820181905291516001600160a01b0384169263cf456ae7926044808201939182900301818387803b158015611bb957600080fd5b60008282018381101561579a576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008184841115615a515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615a165781810151838201526020016159fe565b50505050905090810190601f168015615a435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20696e76616c6964205f636f6f6c646f776e4475726174696f6e54696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a206d6178546f6b656e537570706c7920657863656564656454696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a26469706673582212201665c9df8d686b99cfe5eabdd1eec7f5a8b25c970bbaeaecfd745a481d73dbbe64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001197d7e9ace3eac4392690cf8d4f28e213dfe44100000000000000000000000000000000000000000000000000000000000151800000000000000000000000001cf05f65e2f65a78ed441d8d4bc8709967afbbb00000000000000000000000001cf05f65e2f65a78ed441d8d4bc8709967afbbb0000000000000000000000000a16fabe630e75981b03b31aad20f5bdde581acdf000000000000000000000000a0411bbefdc6d896615d1ece1c3212353842c2df0000000000000000000000000000000000000000000af5cbf0741b4c95400000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _admin (address): 0x1197d7E9acE3eaC4392690cF8d4f28E213DfE441
Arg [1] : _buffer (uint256): 86400
Arg [2] : _tokenManager (address): 0x1cF05F65E2F65A78ED441d8d4BC8709967aFbBb0
Arg [3] : _mintReceiver (address): 0x1cF05F65E2F65A78ED441d8d4BC8709967aFbBb0
Arg [4] : _glpManager (address): 0xA16FaBE630E75981b03b31AAD20F5BDDE581acDF
Arg [5] : _rewardRouter (address): 0xA0411BBefDC6d896615d1ece1C3212353842C2dF
Arg [6] : _maxTokenSupply (uint256): 13250000000000000000000000
Arg [7] : _marginFeeBasisPoints (uint256): 10
Arg [8] : _maxMarginFeeBasisPoints (uint256): 500
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000001197d7e9ace3eac4392690cf8d4f28e213dfe441
Arg [1] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [2] : 0000000000000000000000001cf05f65e2f65a78ed441d8d4bc8709967afbbb0
Arg [3] : 0000000000000000000000001cf05f65e2f65a78ed441d8d4bc8709967afbbb0
Arg [4] : 000000000000000000000000a16fabe630e75981b03b31aad20f5bdde581acdf
Arg [5] : 000000000000000000000000a0411bbefdc6d896615d1ece1c3212353842c2df
Arg [6] : 0000000000000000000000000000000000000000000af5cbf0741b4c95400000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [8] : 00000000000000000000000000000000000000000000000000000000000001f4
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.