Source Code
Latest 25 from a total of 118 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 421199791 | 11 days ago | IN | 0 ETH | 0.00000129 | ||||
| Signal Approve | 420516222 | 13 days ago | IN | 0 ETH | 0.00000107 | ||||
| Approve | 411532941 | 39 days ago | IN | 0 ETH | 0.00000064 | ||||
| Signal Approve | 411132434 | 40 days ago | IN | 0 ETH | 0.00000053 | ||||
| Approve | 406310735 | 54 days ago | IN | 0 ETH | 0.00000076 | ||||
| Signal Approve | 405954979 | 55 days ago | IN | 0 ETH | 0.00000056 | ||||
| Approve | 392810721 | 93 days ago | IN | 0 ETH | 0.00000073 | ||||
| Approve | 392496708 | 94 days ago | IN | 0 ETH | 0.00000081 | ||||
| Approve | 392496602 | 94 days ago | IN | 0 ETH | 0.00000061 | ||||
| Signal Approve | 392141531 | 95 days ago | IN | 0 ETH | 0.00000054 | ||||
| Signal Approve | 392141313 | 95 days ago | IN | 0 ETH | 0.00000054 | ||||
| Signal Approve | 390048963 | 101 days ago | IN | 0 ETH | 0.00000054 | ||||
| Approve | 383766913 | 120 days ago | IN | 0 ETH | 0.00000065 | ||||
| Signal Approve | 382757500 | 122 days ago | IN | 0 ETH | 0.00001202 | ||||
| Approve | 373177444 | 150 days ago | IN | 0 ETH | 0.00000067 | ||||
| Signal Approve | 371037468 | 156 days ago | IN | 0 ETH | 0.00000054 | ||||
| Approve | 362337425 | 181 days ago | IN | 0 ETH | 0.00000073 | ||||
| Signal Approve | 360652998 | 186 days ago | IN | 0 ETH | 0.00000055 | ||||
| Approve | 355801259 | 200 days ago | IN | 0 ETH | 0.00000068 | ||||
| Signal Approve | 355444279 | 201 days ago | IN | 0 ETH | 0.00000056 | ||||
| Approve | 352301336 | 210 days ago | IN | 0 ETH | 0.00000066 | ||||
| Signal Approve | 350985848 | 214 days ago | IN | 0 ETH | 0.00000078 | ||||
| Approve | 348567028 | 221 days ago | IN | 0 ETH | 0.00000067 | ||||
| Signal Approve | 346843188 | 226 days ago | IN | 0 ETH | 0.00000064 | ||||
| Approve | 343044980 | 237 days ago | IN | 0 ETH | 0.00000071 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Timelock
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 1 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
import "./interfaces/ITimelockTarget.sol";
import "./interfaces/ITimelock.sol";
import "./interfaces/IHandlerTarget.sol";
import "../access/interfaces/IAdmin.sol";
import "../core/interfaces/IVault.sol";
import "../core/interfaces/IVaultUtils.sol";
import "../core/interfaces/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 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);
if (!mintable.isMinter(address(this))) {
mintable.setMinter(address(this), true);
}
mintable.mint(_receiver, _amount);
require(IERC20(_token).totalSupply() <= maxTokenSupply, "Timelock: maxTokenSupply exceeded");
}
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;
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 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 IYieldToken {
function totalStaked() external view returns (uint256);
function stakedBalance(address _account) external view returns (uint256);
function removeAdmin(address _account) external;
}// 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 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;
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;
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;
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 ITimelock {
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 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;
/**
* @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 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;
/**
* @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;
interface IRewardRouterV2 {
function feeGlpTracker() external view returns (address);
function stakedGlpTracker() external view returns (address);
}{
"optimizer": {
"enabled": true,
"runs": 1
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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
60806040523480156200001157600080fd5b5060405162005d7b38038062005d7b83398181016040526101208110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e08801516101009098015196979596949593949293919290919062069780881115620000cd576040805162461bcd60e51b815260206004820152601960248201527f54696d656c6f636b3a20696e76616c6964205f62756666657200000000000000604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b039b8c16179091556000988955600280548216988b1698909817909755600380548816968a169690961790955560048054871694891694909417909355600580549095169190961617909255600693909355600755600891909155615c2b9081906200015090396000f3fe608060405234801561001057600080fd5b50600436106103215760003560e01c80629a698e146103265780630191c2371461045b57806309cc9a08146104915780630e0dc426146104c75780630e9587f3146105155780631154e8081461054d578063117cf20414610585578063185051c1146105b3578063204bbc54146105e157806321754d9e1461061757806321bd059214610653578063227f03eb1461068157806323aaad12146106b957806324ccbe30146106d5578063268959e51461070d5780632a709b141461073b5780632ba3725a1461075f578063318bc6891461077957806346ea87af1461078157806347de43e2146107a75780634cd23f3b146107df5780634f5f6b5e1461081b57806350f7c2041461083857806351a6de0d14610840578063558182941461086e57806355ef1395146108a65780635a3bb989146108d45780635b05348b146108dc57806361d07569146108f95780636ba42aaa146109015780636d63c1d0146109275780636e5227d41461094d578063704b6c02146109ae57806370ac0a93146109d457806376e1128614610a0a578063781cc3d314610a385780637b6f775a14610a555780637e43c62d14610a8157806380894d6214610a8957806381774b3d14610ab757806386803c7214610ad45780638a39735a14610b025780638bf22c4614610b0a5780638e34c98f14610b3657806395082d2514610b55578063996a7a1e14610b5d578063996e2bc914610b8b5780639b53ad2214610b93578063adc7ea3714610cc6578063afd14deb14610ce3578063bc476dfd14610ceb578063bc8a8ab914610d19578063c142940a14610d4f578063c7bb26a014610d85578063cd2b123014610d8d578063d1b9e85314610dbb578063d3c87bbb14610de9578063da76231614610e0f578063db1c844114610e53578063dce6e18d14610eac578063df3a66d914610ee2578063e1f21c6714610f18578063e21b459114610f4e578063e30569e514610f71578063e3cbeb0f14610f8e578063e4652f4914610fe7578063e8ae22711461101d578063edaafe20146110ce578063f851a440146110d6578063fa6db1bc146110de575b600080fd5b6104596004803603606081101561033c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561036657600080fd5b82018360208201111561037857600080fd5b803590602001918460208302840111600160201b8311171561039957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103e857600080fd5b8201836020820111156103fa57600080fd5b803590602001918460208302840111600160201b8311171561041b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110e6945050505050565b005b6104596004803603606081101561047157600080fd5b506001600160a01b03813581169160208101359091169060400135611342565b610459600480360360608110156104a757600080fd5b506001600160a01b03813581169160208101359091169060400135611440565b610459600480360360e08110156104dd57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c0013561153f565b6104596004803603606081101561052b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166119b8565b6104596004803603606081101561056357600080fd5b506001600160a01b038135811691602081013590911690604001351515611a96565b6104596004803603604081101561059b57600080fd5b506001600160a01b0381351690602001351515611bc7565b610459600480360360408110156105c957600080fd5b506001600160a01b0381351690602001351515611cac565b610459600480360360608110156105f757600080fd5b506001600160a01b03813581169160208101359160409091013516611d24565b6104596004803603608081101561062d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611dfc565b6104596004803603604081101561066957600080fd5b506001600160a01b0381351690602001351515611f47565b6104596004803603608081101561069757600080fd5b506001600160a01b038135169060208101359060408101359060600135611fdc565b6106c1612131565b604080519115158252519081900360200190f35b610459600480360360608110156106eb57600080fd5b506001600160a01b03813581169160208101359091169060400135151561213a565b6104596004803603604081101561072357600080fd5b506001600160a01b0381358116916020013516612243565b6107436122df565b604080516001600160a01b039092168252519081900360200190f35b6107676122ee565b60408051918252519081900360200190f35b6107676122f5565b6106c16004803603602081101561079757600080fd5b50356001600160a01b03166122fb565b610459600480360360608110156107bd57600080fd5b506001600160a01b038135811691602081013590911690604001351515612310565b610459600480360360808110156107f557600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356123b6565b6104596004803603602081101561083157600080fd5b50356124d1565b61076761257d565b6104596004803603604081101561085657600080fd5b506001600160a01b0381358116916020013516612583565b6104596004803603608081101561088457600080fd5b506001600160a01b03813516906020810135906040810135906060013561267d565b610459600480360360408110156108bc57600080fd5b506001600160a01b0381358116916020013516612754565b61074361284a565b610459600480360360208110156108f257600080fd5b5035612859565b610767612931565b6106c16004803603602081101561091757600080fd5b50356001600160a01b0316612938565b6104596004803603602081101561093d57600080fd5b50356001600160a01b031661294d565b610459600480360361014081101561096457600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612e03565b610459600480360360208110156109c457600080fd5b50356001600160a01b0316612f33565b610459600480360360608110156109ea57600080fd5b506001600160a01b03813581169160208101359091169060400135612fa2565b61045960048036036040811015610a2057600080fd5b506001600160a01b03813581169160200135166133a0565b61045960048036036020811015610a4e57600080fd5b503561349f565b61045960048036036040811015610a6b57600080fd5b506001600160a01b0381351690602001356134f8565b6104596135e2565b61045960048036036040811015610a9f57600080fd5b506001600160a01b03813581169160200135166138a6565b61045960048036036020811015610acd57600080fd5b503561399c565b61045960048036036040811015610aea57600080fd5b506001600160a01b0381351690602001351515613ccd565b610767613d62565b61045960048036036040811015610b2057600080fd5b506001600160a01b038135169060200135613d67565b61045960048036036020811015610b4c57600080fd5b50351515613e4a565b610767613ec4565b61045960048036036040811015610b7357600080fd5b506001600160a01b0381358116916020013516613ed4565b610767613fc5565b61045960048036036060811015610ba957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610bd357600080fd5b820183602082011115610be557600080fd5b803590602001918460208302840111600160201b83111715610c0657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c5557600080fd5b820183602082011115610c6757600080fd5b803590602001918460208302840111600160201b83111715610c8857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613fcb945050505050565b61045960048036036020811015610cdc57600080fd5b50356140ff565b6104596141e5565b61045960048036036040811015610d0157600080fd5b506001600160a01b038135811691602001351661443b565b61045960048036036060811015610d2f57600080fd5b506001600160a01b038135811691602081013590911690604001356144d7565b61045960048036036060811015610d6557600080fd5b506001600160a01b03813581169160208101359091169060400135614593565b61074361466b565b61045960048036036040811015610da357600080fd5b506001600160a01b038135169060200135151561467a565b61045960048036036040811015610dd157600080fd5b506001600160a01b0381351690602001351515614729565b61045960048036036020811015610dff57600080fd5b50356001600160a01b03166147a1565b610459600480360360c0811015610e2557600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135614adb565b6104596004803603610100811015610e6a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614d4c565b61045960048036036060811015610ec257600080fd5b506001600160a01b03813581169160208101359091169060400135614ea9565b61045960048036036060811015610ef857600080fd5b506001600160a01b03813581169160208101359091169060400135614fab565b61045960048036036060811015610f2e57600080fd5b506001600160a01b0381358116916020810135909116906040013561504f565b61045960048036036040811015610f6457600080fd5b5080359060200135615184565b61076760048036036020811015610f8757600080fd5b50356151f6565b6104596004803603610100811015610fa557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515615208565b61045960048036036060811015610ffd57600080fd5b506001600160a01b0381358116916020810135909116906040013561538d565b6104596004803603604081101561103357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561105d57600080fd5b82018360208201111561106f57600080fd5b803590602001918460208302840111600160201b8311171561109057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615433945050505050565b61076761556f565b610743615575565b610743615584565b6001546001600160a01b031633148061110e5750336000908152600b602052604090205460ff165b806111285750336000908152600c602052604090205460ff165b611167576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b80518251146111b9576040805162461bcd60e51b815260206004820152601960248201527854696d656c6f636b3a20696e76616c6964206c656e6774687360381b604482015290519081900360640190fd5b60408051639cb7de4b60e01b81523060048201526001602482015290516001600160a01b03851691639cb7de4b91604480830192600092919082900301818387803b15801561120757600080fd5b505af115801561121b573d6000803e3d6000fd5b5050505060005b82518110156112d857600083828151811061123957fe5b60200260200101519050600083838151811061125157fe5b60200260200101519050856001600160a01b03166341f2272483836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112b257600080fd5b505af11580156112c6573d6000803e3d6000fd5b50506001909401935061122292505050565b5060408051639cb7de4b60e01b815230600482015260006024820181905291516001600160a01b03861692639cb7de4b926044808201939182900301818387803b15801561132557600080fd5b505af1158015611339573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b0316331461138f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e830152605280830185905283518084039091018152607290920190925280519101206113f081615593565b604080516001600160a01b0380871682528516602082015280820184905290517fe6bd553b6ef21f3a22ebc877b3aaedc30fe15826b8156d4e8c8b373ebf11d78b9181900360600190a150505050565b6001546001600160a01b0316331461148d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c90920190925280519101206114e881615593565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f23d37bec99db82564427c9bbfe48ad7434bccf413a40fd357fb838c90a0d68289181900360800190a150505050565b6001546001600160a01b03163314806115675750336000908152600b602052604090205460ff165b806115815750336000908152600c602052604090205460ff165b6115c0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6101f4841115611617576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b15801561166157600080fd5b505afa158015611675573d6000803e3d6000fd5b505050506040513d602081101561168b57600080fd5b50516116c85760405162461bcd60e51b8152600401808060200182810382526023815260200180615b206023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d602081101561174157600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b15801561179357600080fd5b505afa1580156117a7573d6000803e3d6000fd5b505050506040513d60208110156117bd57600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d602081101561183957600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b1580156118b557600080fd5b505af11580156118c9573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b505050508a6001600160a01b031663d66b000d8b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561199357600080fd5b505af11580156119a7573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b03163314611a05576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050506040513d6020811015611a8f57600080fd5b5050505050565b6001546001600160a01b03163314611ae3576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611b4781615637565b611b50816156e3565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611ba957600080fd5b505af1158015611bbd573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b0316331480611bef5750336000908152600b602052604090205460ff165b80611c095750336000908152600c602052604090205460ff165b611c48576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314611cf9576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331480611d4c5750336000908152600b602052604090205460ff165b80611d665750336000908152600c602052604090205460ff165b611da5576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b03163314611e49576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b16605583015260698083018590528351808403909101815260899092019092528051910120611eb781615637565b611ec0816156e3565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611f2857600080fd5b505af1158015611f3c573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611f94576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b03163314806120045750336000908152600b602052604090205460ff165b8061201e5750336000908152600c602052604090205460ff165b61205d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60c8821061209c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615ab76024913960400191505060405180910390fd5b60c881106120db5760405162461bcd60e51b815260040180806020018281038252602a815260200180615bcc602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611ba957600080fd5b60095460ff1681565b6001546001600160a01b03163314612187576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b605283015282516033818403018152605390920190925280519101206121eb81615593565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b03163314612290576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c9057600080fd5b6002546001600160a01b031681565b6207a12081565b60075481565b600b6020526000908152604090205460ff1681565b6001546001600160a01b0316331461235d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b03163314612403576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061247181615593565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b6001546001600160a01b0316331461251e576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60048054604080516327afb5af60e11b8152928301849052516001600160a01b0390911691634f5f6b5e91602480830192600092919082900301818387803b15801561256957600080fd5b505af1158015611a8f573d6000803e3d6000fd5b60065481565b6001546001600160a01b031633146125d0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061262581615637565b61262e816156e3565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b03163314806126a55750336000908152600b602052604090205460ff165b806126bf5750336000908152600c602052604090205460ff165b6126fe576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611ba957600080fd5b6001546001600160a01b031633146127a1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6001600160a01b0382163014156127fb576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c9057600080fd5b6005546001600160a01b031681565b6001546001600160a01b031633146128a6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b611c2081106128e65760405162461bcd60e51b8152600401808060200182810382526023815260200180615adb6023913960400191505060405180910390fd5b600480546040805163966be07560e01b8152928301849052516001600160a01b039091169163966be07591602480830192600092919082900301818387803b15801561256957600080fd5b6206978081565b600c6020526000908152604090205460ff1681565b6001546001600160a01b03163314806129755750336000908152600b602052604090205460ff165b6129b4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600954819060ff1615612a225760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a6a57600080fd5b505afa158015612a7e573d6000803e3d6000fd5b505050506040513d6020811015612a9457600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b158015612ad657600080fd5b505afa158015612aea573d6000803e3d6000fd5b505050506040513d6020811015612b0057600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b158015612b4257600080fd5b505afa158015612b56573d6000803e3d6000fd5b505050506040513d6020811015612b6c57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015612bae57600080fd5b505afa158015612bc2573d6000803e3d6000fd5b505050506040513d6020811015612bd857600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612c1a57600080fd5b505afa158015612c2e573d6000803e3d6000fd5b505050506040513d6020811015612c4457600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c8957600080fd5b505afa158015612c9d573d6000803e3d6000fd5b505050506040513d6020811015612cb357600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612cf557600080fd5b505afa158015612d09573d6000803e3d6000fd5b505050506040513d6020811015612d1f57600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612d6157600080fd5b505afa158015612d75573d6000803e3d6000fd5b505050506040513d6020811015612d8b57600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015611c9057600080fd5b6001546001600160a01b0316331480612e2b5750336000908152600b602052604090205460ff165b80612e455750336000908152600c602052604090205460ff165b612e84576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6007849055600854604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612f0f57600080fd5b505af1158015612f23573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612f80576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612fef576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061305081615637565b613059816156e3565b6000846001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561309457600080fd5b505afa1580156130a8573d6000803e3d6000fd5b505050506040513d60208110156130be57600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b15801561311257600080fd5b505af1158015613126573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b1580156131d757600080fd5b505af11580156131eb573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561324657600080fd5b505af115801561325a573d6000803e3d6000fd5b505050506040513d602081101561327057600080fd5b505060035460408051630711e61960e41b81526001600160a01b038781166004830152928316602482015290519187169163711e6190916044808201926020929091908290030181600087803b1580156132c957600080fd5b505af11580156132dd573d6000803e3d6000fd5b505050506040513d60208110156132f357600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611f2857600080fd5b6001546001600160a01b031633146133ed576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061344781615637565b613450816156e3565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b031633146134ec576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6134f5816156e3565b50565b6001546001600160a01b03163314613545576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6207a120811161359c576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b0316331461362f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6004805460408051633c5103f760e11b815290516001600160a01b039092169260009284926378a207ee9281810192602092909190829003018186803b15801561367857600080fd5b505afa15801561368c573d6000803e3d6000fd5b505050506040513d60208110156136a257600080fd5b5051600480546040805163cf456ae760e01b81526001600160a01b0392831693810193909352600160248401525192935083169163cf456ae79160448082019260009290919082900301818387803b1580156136fd57600080fd5b505af1158015613711573d6000803e3d6000fd5b505050506000826001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561375057600080fd5b505afa158015613764573d6000803e3d6000fd5b505050506040513d602081101561377a57600080fd5b505160048054604080516312b5ad0160e11b81526001600160a01b03928316938101939093525192935083169163256b5a029160248082019260009290919082900301818387803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b505050506000836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561382157600080fd5b505afa158015613835573d6000803e3d6000fd5b505050506040513d602081101561384b57600080fd5b505160048054604080516352f4877760e11b81526001600160a01b0392831693810193909352600160248401525192935083169163a5e90eee9160448082019260009290919082900301818387803b158015611ba957600080fd5b6001546001600160a01b031633146138f3576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061394d81615593565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314806139c45750336000908152600b602052604090205460ff165b806139de5750336000908152600c602052604090205460ff165b613a1d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a6d57600080fd5b505afa158015613a81573d6000803e3d6000fd5b505050506040513d6020811015613a9757600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b158015613aed57600080fd5b505afa158015613b01573d6000803e3d6000fd5b505050506040513d6020811015613b1757600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b158015613b6457600080fd5b505af1158015613b78573d6000803e3d6000fd5b5050505080831115613c07576000613b908483615788565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b158015613be957600080fd5b505af1158015613bfd573d6000803e3d6000fd5b5050505050613c86565b6000613c138285615788565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b158015613c6c57600080fd5b505af1158015613c80573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b15801561132557600080fd5b6001546001600160a01b03163314613d1a576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b60c881565b6001546001600160a01b03163314613db4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b64012a05f2008111613e04576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b0316331480613e725750336000908152600b602052604090205460ff165b613eb1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b03163314613f21576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e9092019092528051910120613f7681615593565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60085481565b6001546001600160a01b0316331480613ff35750336000908152600b602052604090205460ff165b8061400d5750336000908152600c602052604090205460ff165b61404c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60005b82518110156140f957836001600160a01b031663d66b000d84838151811061407357fe5b602002602001015184848151811061408757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156140d557600080fd5b505af11580156140e9573d6000803e3d6000fd5b50506001909201915061404f9050565b50505050565b6001546001600160a01b0316331461414c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b620697808111156141a0576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b60005481116141e05760405162461bcd60e51b8152600401808060200182810382526024815260200180615b676024913960400191505060405180910390fd5b600055565b6001546001600160a01b03163314614232576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6005546040805163e1c363b760e01b815290516001600160a01b0390921691829163e1c363b7916004808301926020929190829003018186803b15801561427857600080fd5b505afa15801561428c573d6000803e3d6000fd5b505050506040513d60208110156142a257600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b1580156142f957600080fd5b505af115801561430d573d6000803e3d6000fd5b50505050806001600160a01b031663af394d006040518163ffffffff1660e01b815260040160206040518083038186803b15801561434a57600080fd5b505afa15801561435e573d6000803e3d6000fd5b505050506040513d602081101561437457600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b1580156143cb57600080fd5b505af11580156143df573d6000803e3d6000fd5b50506004805460055460408051639cb7de4b60e01b81526001600160a01b0392831694810194909452600160248501525191169350639cb7de4b9250604480830192600092919082900301818387803b15801561256957600080fd5b6001546001600160a01b03163314614488576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b03163314614524576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c909201909252805191012061457f81615637565b614588816156e3565b6140f98484846157d1565b6001546001600160a01b03163314806145bb5750336000908152600b602052604090205460ff165b806145d55750336000908152600c602052604090205460ff165b614614576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561132557600080fd5b6003546001600160a01b031681565b6001546001600160a01b03163314806146a25750336000908152600b602052604090205460ff165b6146e1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b03163314614776576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806147c95750336000908152600b602052604090205460ff165b614808576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600954819060ff16156148745760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561485b57600080fd5b505af115801561486f573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156148bc57600080fd5b505afa1580156148d0573d6000803e3d6000fd5b505050506040513d60208110156148e657600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b15801561492857600080fd5b505afa15801561493c573d6000803e3d6000fd5b505050506040513d602081101561495257600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561499457600080fd5b505afa1580156149a8573d6000803e3d6000fd5b505050506040513d60208110156149be57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015614a0057600080fd5b505afa158015614a14573d6000803e3d6000fd5b505050506040513d6020811015614a2a57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015614a6c57600080fd5b505afa158015614a80573d6000803e3d6000fd5b505050506040513d6020811015614a9657600080fd5b5051600854604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c8957600080fd5b6001546001600160a01b0316331480614b035750336000908152600b602052604090205460ff165b80614b1d5750336000908152600c602052604090205460ff165b614b5c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600854886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b158015614bb157600080fd5b505afa158015614bc5573d6000803e3d6000fd5b505050506040513d6020811015614bdb57600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015614c1d57600080fd5b505afa158015614c31573d6000803e3d6000fd5b505050506040513d6020811015614c4757600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015614d2b57600080fd5b505af1158015614d3f573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b03163314614d99576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614e2e81615593565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b03163314614ef6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f9092019092528051910120614f5481615593565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b03163314614ff8576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b0316331461509c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f90920190925280519101206150fa81615637565b615103816156e3565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561515a57600080fd5b505af115801561516e573d6000803e3d6000fd5b505050506040513d6020811015611ca457600080fd5b6001546001600160a01b03163314806151ac5750336000908152600b602052604090205460ff165b6151eb576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600791909155600855565b600a6020526000908152604090205481565b6001546001600160a01b03163314615255576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd90920190925280519101206152ea81615637565b6152f3816156e3565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b15801561536a57600080fd5b505af115801561537e573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b031633146153da576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b158015611a6557600080fd5b6001546001600160a01b031633148061545b5750336000908152600b602052604090205460ff165b806154755750336000908152600c602052604090205460ff165b6154b4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60005b815181101561556a57826001600160a01b031663f25552788383815181106154db57fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b15801561553657600080fd5b505af115801561554a573d6000803e3d6000fd5b505050506040513d602081101561556057600080fd5b50506001016154b7565b505050565b60005481565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000818152600a6020526040902054156155de5760405162461bcd60e51b8152600401808060200182810382526022815260200180615afe6022913960400191505060405180910390fd5b6000546155ec9042906159c7565b6000828152600a602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000818152600a6020526040902054615697576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b6000818152600a602052604090205442116134f55760405162461bcd60e51b8152600401808060200182810382526024815260200180615b436024913960400191505060405180910390fd5b6000818152600a602052604090205461573f576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b6000818152600a6020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b60006157ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615a1f565b9392505050565b604080516355138f0d60e11b8152306004820152905184916001600160a01b0383169163aa271e1a916024808201926020929091908290030181600087803b15801561581c57600080fd5b505af1158015615830573d6000803e3d6000fd5b505050506040513d602081101561584657600080fd5b50516158b3576040805163cf456ae760e01b81523060048201526001602482015290516001600160a01b0383169163cf456ae791604480830192600092919082900301818387803b15801561589a57600080fd5b505af11580156158ae573d6000803e3d6000fd5b505050505b806001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561590a57600080fd5b505af115801561591e573d6000803e3d6000fd5b50505050600654846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561595e57600080fd5b505afa158015615972573d6000803e3d6000fd5b505050506040513d602081101561598857600080fd5b505111156140f95760405162461bcd60e51b8152600401808060200182810382526021815260200180615bab6021913960400191505060405180910390fd5b6000828201838110156157ca576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008184841115615aae5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615a73578181015183820152602001615a5b565b50505050905090810190601f168015615aa05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20696e76616c6964205f636f6f6c646f776e4475726174696f6e54696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a206275666665722063616e6e6f742062652064656372656173656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a206d6178546f6b656e537570706c7920657863656564656454696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a2646970667358221220eb041045be1aa1386f140f63fed9db3b6ba794efc6e17a4d6ad36cf92cf3a67664736f6c634300060c003300000000000000000000000049b373d422bda4c6bfcdd5ec1e48a9a26fda2f8b0000000000000000000000000000000000000000000000000000000000015180000000000000000000000000dddc546e07f1374a07b270b7d863371e575ea96a000000000000000000000000b95db5b167d75e6d04227cfffa61069348d271f5000000000000000000000000dddc546e07f1374a07b270b7d863371e575ea96a000000000000000000000000321f653eed006ad1c29d174e17d96351bde226490000000000000000000000000000000000000000000af5cbf0741b4c95400000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103215760003560e01c80629a698e146103265780630191c2371461045b57806309cc9a08146104915780630e0dc426146104c75780630e9587f3146105155780631154e8081461054d578063117cf20414610585578063185051c1146105b3578063204bbc54146105e157806321754d9e1461061757806321bd059214610653578063227f03eb1461068157806323aaad12146106b957806324ccbe30146106d5578063268959e51461070d5780632a709b141461073b5780632ba3725a1461075f578063318bc6891461077957806346ea87af1461078157806347de43e2146107a75780634cd23f3b146107df5780634f5f6b5e1461081b57806350f7c2041461083857806351a6de0d14610840578063558182941461086e57806355ef1395146108a65780635a3bb989146108d45780635b05348b146108dc57806361d07569146108f95780636ba42aaa146109015780636d63c1d0146109275780636e5227d41461094d578063704b6c02146109ae57806370ac0a93146109d457806376e1128614610a0a578063781cc3d314610a385780637b6f775a14610a555780637e43c62d14610a8157806380894d6214610a8957806381774b3d14610ab757806386803c7214610ad45780638a39735a14610b025780638bf22c4614610b0a5780638e34c98f14610b3657806395082d2514610b55578063996a7a1e14610b5d578063996e2bc914610b8b5780639b53ad2214610b93578063adc7ea3714610cc6578063afd14deb14610ce3578063bc476dfd14610ceb578063bc8a8ab914610d19578063c142940a14610d4f578063c7bb26a014610d85578063cd2b123014610d8d578063d1b9e85314610dbb578063d3c87bbb14610de9578063da76231614610e0f578063db1c844114610e53578063dce6e18d14610eac578063df3a66d914610ee2578063e1f21c6714610f18578063e21b459114610f4e578063e30569e514610f71578063e3cbeb0f14610f8e578063e4652f4914610fe7578063e8ae22711461101d578063edaafe20146110ce578063f851a440146110d6578063fa6db1bc146110de575b600080fd5b6104596004803603606081101561033c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561036657600080fd5b82018360208201111561037857600080fd5b803590602001918460208302840111600160201b8311171561039957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103e857600080fd5b8201836020820111156103fa57600080fd5b803590602001918460208302840111600160201b8311171561041b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110e6945050505050565b005b6104596004803603606081101561047157600080fd5b506001600160a01b03813581169160208101359091169060400135611342565b610459600480360360608110156104a757600080fd5b506001600160a01b03813581169160208101359091169060400135611440565b610459600480360360e08110156104dd57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c0013561153f565b6104596004803603606081101561052b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166119b8565b6104596004803603606081101561056357600080fd5b506001600160a01b038135811691602081013590911690604001351515611a96565b6104596004803603604081101561059b57600080fd5b506001600160a01b0381351690602001351515611bc7565b610459600480360360408110156105c957600080fd5b506001600160a01b0381351690602001351515611cac565b610459600480360360608110156105f757600080fd5b506001600160a01b03813581169160208101359160409091013516611d24565b6104596004803603608081101561062d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611dfc565b6104596004803603604081101561066957600080fd5b506001600160a01b0381351690602001351515611f47565b6104596004803603608081101561069757600080fd5b506001600160a01b038135169060208101359060408101359060600135611fdc565b6106c1612131565b604080519115158252519081900360200190f35b610459600480360360608110156106eb57600080fd5b506001600160a01b03813581169160208101359091169060400135151561213a565b6104596004803603604081101561072357600080fd5b506001600160a01b0381358116916020013516612243565b6107436122df565b604080516001600160a01b039092168252519081900360200190f35b6107676122ee565b60408051918252519081900360200190f35b6107676122f5565b6106c16004803603602081101561079757600080fd5b50356001600160a01b03166122fb565b610459600480360360608110156107bd57600080fd5b506001600160a01b038135811691602081013590911690604001351515612310565b610459600480360360808110156107f557600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356123b6565b6104596004803603602081101561083157600080fd5b50356124d1565b61076761257d565b6104596004803603604081101561085657600080fd5b506001600160a01b0381358116916020013516612583565b6104596004803603608081101561088457600080fd5b506001600160a01b03813516906020810135906040810135906060013561267d565b610459600480360360408110156108bc57600080fd5b506001600160a01b0381358116916020013516612754565b61074361284a565b610459600480360360208110156108f257600080fd5b5035612859565b610767612931565b6106c16004803603602081101561091757600080fd5b50356001600160a01b0316612938565b6104596004803603602081101561093d57600080fd5b50356001600160a01b031661294d565b610459600480360361014081101561096457600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612e03565b610459600480360360208110156109c457600080fd5b50356001600160a01b0316612f33565b610459600480360360608110156109ea57600080fd5b506001600160a01b03813581169160208101359091169060400135612fa2565b61045960048036036040811015610a2057600080fd5b506001600160a01b03813581169160200135166133a0565b61045960048036036020811015610a4e57600080fd5b503561349f565b61045960048036036040811015610a6b57600080fd5b506001600160a01b0381351690602001356134f8565b6104596135e2565b61045960048036036040811015610a9f57600080fd5b506001600160a01b03813581169160200135166138a6565b61045960048036036020811015610acd57600080fd5b503561399c565b61045960048036036040811015610aea57600080fd5b506001600160a01b0381351690602001351515613ccd565b610767613d62565b61045960048036036040811015610b2057600080fd5b506001600160a01b038135169060200135613d67565b61045960048036036020811015610b4c57600080fd5b50351515613e4a565b610767613ec4565b61045960048036036040811015610b7357600080fd5b506001600160a01b0381358116916020013516613ed4565b610767613fc5565b61045960048036036060811015610ba957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610bd357600080fd5b820183602082011115610be557600080fd5b803590602001918460208302840111600160201b83111715610c0657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c5557600080fd5b820183602082011115610c6757600080fd5b803590602001918460208302840111600160201b83111715610c8857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613fcb945050505050565b61045960048036036020811015610cdc57600080fd5b50356140ff565b6104596141e5565b61045960048036036040811015610d0157600080fd5b506001600160a01b038135811691602001351661443b565b61045960048036036060811015610d2f57600080fd5b506001600160a01b038135811691602081013590911690604001356144d7565b61045960048036036060811015610d6557600080fd5b506001600160a01b03813581169160208101359091169060400135614593565b61074361466b565b61045960048036036040811015610da357600080fd5b506001600160a01b038135169060200135151561467a565b61045960048036036040811015610dd157600080fd5b506001600160a01b0381351690602001351515614729565b61045960048036036020811015610dff57600080fd5b50356001600160a01b03166147a1565b610459600480360360c0811015610e2557600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135614adb565b6104596004803603610100811015610e6a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614d4c565b61045960048036036060811015610ec257600080fd5b506001600160a01b03813581169160208101359091169060400135614ea9565b61045960048036036060811015610ef857600080fd5b506001600160a01b03813581169160208101359091169060400135614fab565b61045960048036036060811015610f2e57600080fd5b506001600160a01b0381358116916020810135909116906040013561504f565b61045960048036036040811015610f6457600080fd5b5080359060200135615184565b61076760048036036020811015610f8757600080fd5b50356151f6565b6104596004803603610100811015610fa557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515615208565b61045960048036036060811015610ffd57600080fd5b506001600160a01b0381358116916020810135909116906040013561538d565b6104596004803603604081101561103357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561105d57600080fd5b82018360208201111561106f57600080fd5b803590602001918460208302840111600160201b8311171561109057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615433945050505050565b61076761556f565b610743615575565b610743615584565b6001546001600160a01b031633148061110e5750336000908152600b602052604090205460ff165b806111285750336000908152600c602052604090205460ff165b611167576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b80518251146111b9576040805162461bcd60e51b815260206004820152601960248201527854696d656c6f636b3a20696e76616c6964206c656e6774687360381b604482015290519081900360640190fd5b60408051639cb7de4b60e01b81523060048201526001602482015290516001600160a01b03851691639cb7de4b91604480830192600092919082900301818387803b15801561120757600080fd5b505af115801561121b573d6000803e3d6000fd5b5050505060005b82518110156112d857600083828151811061123957fe5b60200260200101519050600083838151811061125157fe5b60200260200101519050856001600160a01b03166341f2272483836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112b257600080fd5b505af11580156112c6573d6000803e3d6000fd5b50506001909401935061122292505050565b5060408051639cb7de4b60e01b815230600482015260006024820181905291516001600160a01b03861692639cb7de4b926044808201939182900301818387803b15801561132557600080fd5b505af1158015611339573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b0316331461138f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e830152605280830185905283518084039091018152607290920190925280519101206113f081615593565b604080516001600160a01b0380871682528516602082015280820184905290517fe6bd553b6ef21f3a22ebc877b3aaedc30fe15826b8156d4e8c8b373ebf11d78b9181900360600190a150505050565b6001546001600160a01b0316331461148d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c90920190925280519101206114e881615593565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f23d37bec99db82564427c9bbfe48ad7434bccf413a40fd357fb838c90a0d68289181900360800190a150505050565b6001546001600160a01b03163314806115675750336000908152600b602052604090205460ff165b806115815750336000908152600c602052604090205460ff165b6115c0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6101f4841115611617576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b15801561166157600080fd5b505afa158015611675573d6000803e3d6000fd5b505050506040513d602081101561168b57600080fd5b50516116c85760405162461bcd60e51b8152600401808060200182810382526023815260200180615b206023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d602081101561174157600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b15801561179357600080fd5b505afa1580156117a7573d6000803e3d6000fd5b505050506040513d60208110156117bd57600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d602081101561183957600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b1580156118b557600080fd5b505af11580156118c9573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b505050508a6001600160a01b031663d66b000d8b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561199357600080fd5b505af11580156119a7573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b03163314611a05576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050506040513d6020811015611a8f57600080fd5b5050505050565b6001546001600160a01b03163314611ae3576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611b4781615637565b611b50816156e3565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611ba957600080fd5b505af1158015611bbd573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b0316331480611bef5750336000908152600b602052604090205460ff165b80611c095750336000908152600c602052604090205460ff165b611c48576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314611cf9576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331480611d4c5750336000908152600b602052604090205460ff165b80611d665750336000908152600c602052604090205460ff165b611da5576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b03163314611e49576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b16605583015260698083018590528351808403909101815260899092019092528051910120611eb781615637565b611ec0816156e3565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611f2857600080fd5b505af1158015611f3c573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611f94576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b03163314806120045750336000908152600b602052604090205460ff165b8061201e5750336000908152600c602052604090205460ff165b61205d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60c8821061209c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615ab76024913960400191505060405180910390fd5b60c881106120db5760405162461bcd60e51b815260040180806020018281038252602a815260200180615bcc602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611ba957600080fd5b60095460ff1681565b6001546001600160a01b03163314612187576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b605283015282516033818403018152605390920190925280519101206121eb81615593565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b03163314612290576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c9057600080fd5b6002546001600160a01b031681565b6207a12081565b60075481565b600b6020526000908152604090205460ff1681565b6001546001600160a01b0316331461235d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b03163314612403576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061247181615593565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b6001546001600160a01b0316331461251e576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60048054604080516327afb5af60e11b8152928301849052516001600160a01b0390911691634f5f6b5e91602480830192600092919082900301818387803b15801561256957600080fd5b505af1158015611a8f573d6000803e3d6000fd5b60065481565b6001546001600160a01b031633146125d0576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061262581615637565b61262e816156e3565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b03163314806126a55750336000908152600b602052604090205460ff165b806126bf5750336000908152600c602052604090205460ff165b6126fe576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611ba957600080fd5b6001546001600160a01b031633146127a1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6001600160a01b0382163014156127fb576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c9057600080fd5b6005546001600160a01b031681565b6001546001600160a01b031633146128a6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b611c2081106128e65760405162461bcd60e51b8152600401808060200182810382526023815260200180615adb6023913960400191505060405180910390fd5b600480546040805163966be07560e01b8152928301849052516001600160a01b039091169163966be07591602480830192600092919082900301818387803b15801561256957600080fd5b6206978081565b600c6020526000908152604090205460ff1681565b6001546001600160a01b03163314806129755750336000908152600b602052604090205460ff165b6129b4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600954819060ff1615612a225760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a6a57600080fd5b505afa158015612a7e573d6000803e3d6000fd5b505050506040513d6020811015612a9457600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b158015612ad657600080fd5b505afa158015612aea573d6000803e3d6000fd5b505050506040513d6020811015612b0057600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b158015612b4257600080fd5b505afa158015612b56573d6000803e3d6000fd5b505050506040513d6020811015612b6c57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015612bae57600080fd5b505afa158015612bc2573d6000803e3d6000fd5b505050506040513d6020811015612bd857600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612c1a57600080fd5b505afa158015612c2e573d6000803e3d6000fd5b505050506040513d6020811015612c4457600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c8957600080fd5b505afa158015612c9d573d6000803e3d6000fd5b505050506040513d6020811015612cb357600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612cf557600080fd5b505afa158015612d09573d6000803e3d6000fd5b505050506040513d6020811015612d1f57600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612d6157600080fd5b505afa158015612d75573d6000803e3d6000fd5b505050506040513d6020811015612d8b57600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015611c9057600080fd5b6001546001600160a01b0316331480612e2b5750336000908152600b602052604090205460ff165b80612e455750336000908152600c602052604090205460ff165b612e84576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6007849055600854604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612f0f57600080fd5b505af1158015612f23573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612f80576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612fef576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061305081615637565b613059816156e3565b6000846001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561309457600080fd5b505afa1580156130a8573d6000803e3d6000fd5b505050506040513d60208110156130be57600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b15801561311257600080fd5b505af1158015613126573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b1580156131d757600080fd5b505af11580156131eb573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561324657600080fd5b505af115801561325a573d6000803e3d6000fd5b505050506040513d602081101561327057600080fd5b505060035460408051630711e61960e41b81526001600160a01b038781166004830152928316602482015290519187169163711e6190916044808201926020929091908290030181600087803b1580156132c957600080fd5b505af11580156132dd573d6000803e3d6000fd5b505050506040513d60208110156132f357600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611f2857600080fd5b6001546001600160a01b031633146133ed576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061344781615637565b613450816156e3565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b031633146134ec576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6134f5816156e3565b50565b6001546001600160a01b03163314613545576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6207a120811161359c576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b0316331461362f576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6004805460408051633c5103f760e11b815290516001600160a01b039092169260009284926378a207ee9281810192602092909190829003018186803b15801561367857600080fd5b505afa15801561368c573d6000803e3d6000fd5b505050506040513d60208110156136a257600080fd5b5051600480546040805163cf456ae760e01b81526001600160a01b0392831693810193909352600160248401525192935083169163cf456ae79160448082019260009290919082900301818387803b1580156136fd57600080fd5b505af1158015613711573d6000803e3d6000fd5b505050506000826001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561375057600080fd5b505afa158015613764573d6000803e3d6000fd5b505050506040513d602081101561377a57600080fd5b505160048054604080516312b5ad0160e11b81526001600160a01b03928316938101939093525192935083169163256b5a029160248082019260009290919082900301818387803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b505050506000836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561382157600080fd5b505afa158015613835573d6000803e3d6000fd5b505050506040513d602081101561384b57600080fd5b505160048054604080516352f4877760e11b81526001600160a01b0392831693810193909352600160248401525192935083169163a5e90eee9160448082019260009290919082900301818387803b158015611ba957600080fd5b6001546001600160a01b031633146138f3576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061394d81615593565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314806139c45750336000908152600b602052604090205460ff165b806139de5750336000908152600c602052604090205460ff165b613a1d576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a6d57600080fd5b505afa158015613a81573d6000803e3d6000fd5b505050506040513d6020811015613a9757600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b158015613aed57600080fd5b505afa158015613b01573d6000803e3d6000fd5b505050506040513d6020811015613b1757600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b158015613b6457600080fd5b505af1158015613b78573d6000803e3d6000fd5b5050505080831115613c07576000613b908483615788565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b158015613be957600080fd5b505af1158015613bfd573d6000803e3d6000fd5b5050505050613c86565b6000613c138285615788565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b158015613c6c57600080fd5b505af1158015613c80573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b15801561132557600080fd5b6001546001600160a01b03163314613d1a576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b60c881565b6001546001600160a01b03163314613db4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b64012a05f2008111613e04576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b0316331480613e725750336000908152600b602052604090205460ff165b613eb1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b03163314613f21576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e9092019092528051910120613f7681615593565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60085481565b6001546001600160a01b0316331480613ff35750336000908152600b602052604090205460ff165b8061400d5750336000908152600c602052604090205460ff165b61404c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60005b82518110156140f957836001600160a01b031663d66b000d84838151811061407357fe5b602002602001015184848151811061408757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156140d557600080fd5b505af11580156140e9573d6000803e3d6000fd5b50506001909201915061404f9050565b50505050565b6001546001600160a01b0316331461414c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b620697808111156141a0576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b60005481116141e05760405162461bcd60e51b8152600401808060200182810382526024815260200180615b676024913960400191505060405180910390fd5b600055565b6001546001600160a01b03163314614232576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6005546040805163e1c363b760e01b815290516001600160a01b0390921691829163e1c363b7916004808301926020929190829003018186803b15801561427857600080fd5b505afa15801561428c573d6000803e3d6000fd5b505050506040513d60208110156142a257600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b1580156142f957600080fd5b505af115801561430d573d6000803e3d6000fd5b50505050806001600160a01b031663af394d006040518163ffffffff1660e01b815260040160206040518083038186803b15801561434a57600080fd5b505afa15801561435e573d6000803e3d6000fd5b505050506040513d602081101561437457600080fd5b505160055460408051639cb7de4b60e01b81526001600160a01b0392831660048201526001602482015290519190921691639cb7de4b91604480830192600092919082900301818387803b1580156143cb57600080fd5b505af11580156143df573d6000803e3d6000fd5b50506004805460055460408051639cb7de4b60e01b81526001600160a01b0392831694810194909452600160248501525191169350639cb7de4b9250604480830192600092919082900301818387803b15801561256957600080fd5b6001546001600160a01b03163314614488576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b03163314614524576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c909201909252805191012061457f81615637565b614588816156e3565b6140f98484846157d1565b6001546001600160a01b03163314806145bb5750336000908152600b602052604090205460ff165b806145d55750336000908152600c602052604090205460ff165b614614576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561132557600080fd5b6003546001600160a01b031681565b6001546001600160a01b03163314806146a25750336000908152600b602052604090205460ff165b6146e1576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c9057600080fd5b6001546001600160a01b03163314614776576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806147c95750336000908152600b602052604090205460ff165b614808576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600954819060ff16156148745760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561485b57600080fd5b505af115801561486f573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156148bc57600080fd5b505afa1580156148d0573d6000803e3d6000fd5b505050506040513d60208110156148e657600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b15801561492857600080fd5b505afa15801561493c573d6000803e3d6000fd5b505050506040513d602081101561495257600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561499457600080fd5b505afa1580156149a8573d6000803e3d6000fd5b505050506040513d60208110156149be57600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b158015614a0057600080fd5b505afa158015614a14573d6000803e3d6000fd5b505050506040513d6020811015614a2a57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015614a6c57600080fd5b505afa158015614a80573d6000803e3d6000fd5b505050506040513d6020811015614a9657600080fd5b5051600854604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612c8957600080fd5b6001546001600160a01b0316331480614b035750336000908152600b602052604090205460ff165b80614b1d5750336000908152600c602052604090205460ff165b614b5c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600854886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b158015614bb157600080fd5b505afa158015614bc5573d6000803e3d6000fd5b505050506040513d6020811015614bdb57600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015614c1d57600080fd5b505afa158015614c31573d6000803e3d6000fd5b505050506040513d6020811015614c4757600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015614d2b57600080fd5b505af1158015614d3f573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b03163314614d99576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614e2e81615593565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b03163314614ef6576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f9092019092528051910120614f5481615593565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b03163314614ff8576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561132557600080fd5b6001546001600160a01b0316331461509c576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f90920190925280519101206150fa81615637565b615103816156e3565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561515a57600080fd5b505af115801561516e573d6000803e3d6000fd5b505050506040513d6020811015611ca457600080fd5b6001546001600160a01b03163314806151ac5750336000908152600b602052604090205460ff165b6151eb576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b600791909155600855565b600a6020526000908152604090205481565b6001546001600160a01b03163314615255576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd90920190925280519101206152ea81615637565b6152f3816156e3565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b15801561536a57600080fd5b505af115801561537e573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b031633146153da576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b158015611a6557600080fd5b6001546001600160a01b031633148061545b5750336000908152600b602052604090205460ff165b806154755750336000908152600c602052604090205460ff165b6154b4576040805162461bcd60e51b81526020600482015260136024820152600080516020615b8b833981519152604482015290519081900360640190fd5b60005b815181101561556a57826001600160a01b031663f25552788383815181106154db57fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b15801561553657600080fd5b505af115801561554a573d6000803e3d6000fd5b505050506040513d602081101561556057600080fd5b50506001016154b7565b505050565b60005481565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000818152600a6020526040902054156155de5760405162461bcd60e51b8152600401808060200182810382526022815260200180615afe6022913960400191505060405180910390fd5b6000546155ec9042906159c7565b6000828152600a602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000818152600a6020526040902054615697576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b6000818152600a602052604090205442116134f55760405162461bcd60e51b8152600401808060200182810382526024815260200180615b436024913960400191505060405180910390fd5b6000818152600a602052604090205461573f576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b6000818152600a6020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b60006157ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615a1f565b9392505050565b604080516355138f0d60e11b8152306004820152905184916001600160a01b0383169163aa271e1a916024808201926020929091908290030181600087803b15801561581c57600080fd5b505af1158015615830573d6000803e3d6000fd5b505050506040513d602081101561584657600080fd5b50516158b3576040805163cf456ae760e01b81523060048201526001602482015290516001600160a01b0383169163cf456ae791604480830192600092919082900301818387803b15801561589a57600080fd5b505af11580156158ae573d6000803e3d6000fd5b505050505b806001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561590a57600080fd5b505af115801561591e573d6000803e3d6000fd5b50505050600654846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561595e57600080fd5b505afa158015615972573d6000803e3d6000fd5b505050506040513d602081101561598857600080fd5b505111156140f95760405162461bcd60e51b8152600401808060200182810382526021815260200180615bab6021913960400191505060405180910390fd5b6000828201838110156157ca576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008184841115615aae5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615a73578181015183820152602001615a5b565b50505050905090810190601f168015615aa05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20696e76616c6964205f636f6f6c646f776e4475726174696f6e54696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a206275666665722063616e6e6f742062652064656372656173656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a206d6178546f6b656e537570706c7920657863656564656454696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a2646970667358221220eb041045be1aa1386f140f63fed9db3b6ba794efc6e17a4d6ad36cf92cf3a67664736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000049b373d422bda4c6bfcdd5ec1e48a9a26fda2f8b0000000000000000000000000000000000000000000000000000000000015180000000000000000000000000dddc546e07f1374a07b270b7d863371e575ea96a000000000000000000000000b95db5b167d75e6d04227cfffa61069348d271f5000000000000000000000000dddc546e07f1374a07b270b7d863371e575ea96a000000000000000000000000321f653eed006ad1c29d174e17d96351bde226490000000000000000000000000000000000000000000af5cbf0741b4c95400000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _admin (address): 0x49B373D422BdA4C6BfCdd5eC1E48A9a26fdA2F8b
Arg [1] : _buffer (uint256): 86400
Arg [2] : _tokenManager (address): 0xddDc546e07f1374A07b270b7d863371e575EA96A
Arg [3] : _mintReceiver (address): 0xB95DB5B167D75e6d04227CfFFA61069348d271F5
Arg [4] : _glpManager (address): 0xddDc546e07f1374A07b270b7d863371e575EA96A
Arg [5] : _rewardRouter (address): 0x321F653eED006AD1C29D174e17d96351BDe22649
Arg [6] : _maxTokenSupply (uint256): 13250000000000000000000000
Arg [7] : _marginFeeBasisPoints (uint256): 10
Arg [8] : _maxMarginFeeBasisPoints (uint256): 500
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000049b373d422bda4c6bfcdd5ec1e48a9a26fda2f8b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [2] : 000000000000000000000000dddc546e07f1374a07b270b7d863371e575ea96a
Arg [3] : 000000000000000000000000b95db5b167d75e6d04227cfffa61069348d271f5
Arg [4] : 000000000000000000000000dddc546e07f1374a07b270b7d863371e575ea96a
Arg [5] : 000000000000000000000000321f653eed006ad1c29d174e17d96351bde22649
Arg [6] : 0000000000000000000000000000000000000000000af5cbf0741b4c95400000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [8] : 00000000000000000000000000000000000000000000000000000000000001f4
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$644,468.77
Net Worth in ETH
224.865901
Token Allocations
USDC
86.62%
GMX
10.14%
DAI
2.39%
Others
0.85%
Multichain Portfolio | 35 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.